Documentation d’EyesOfApplications 2.0
⚠ Documentation en cours de rédaction ⚠
Prérequis
EOA a besoin des paquets “Redistribuable Visual C++ pour Visual Studio 2015” pour fonctionner correctement.
Téléchargez et installez les applications vc_redist.x64.exe
et vc_redist.x86.exe
, disponibles sur le site officiel Microsoft ici.
Installation
Dans cette documentation, nous verrons comment installer EOA ainsi que son utilisation sur Windows.
EOA
- Récupérez EOA sur GitHub via le lien suivant.
- Extrayez le dossier téléchargé. Pour lancer l’installation il vous faudra tout d’abord signer le
setup.bat
. - Pour ce faire, faites un clic-droit sur
setup.bat
, allez dansPropriété
. - Cochez la case “Débloquer pour que Windows vous autorise l’utilisation du script, ceci est une sécurité de Windows pour prévenir du lancement de script malveillant”.
- Lancez ensuite le fichier
setup.bat
. - Renseignez les informations demandées selon vos critères :
Vous avez à présent un nouveau dossier à la racine de votre disque.
- Dirigez-vous vers ce dossier, puis dans Apps. Ouvrez
www.eyesofnewtork.fr.ps1
dans un éditeur de texte (Notepad++, Visual Studio Code, etc). Modifiez les éléments suivants en fonction de votre configuration :
$TargetedEON : Adresse IP de votre EON
$NrdpToken : Votre token
$GUI_Equipement_InEON : Nom de votre hôte Windows sur EON
- Dé-commentez la ligne correspondant à votre version de Firefox installé sur votre poste Windows.
Dans l’exemple, le poste a la version 32 bits de Firefox d’installé.
- Enfin, renommez le $Hostname :
Configuration SSH
Le programme utilise une connexion SSH via une paire de clés.
Il vous faut créer cette paire de clés, pour ce faire rendez-vous sur votre serveur EON.
- En tant qu’utilisateur
eon4apps
exécutez la commandessh-keygen –t dsa
. - Dirigez-vous ensuite dans le dossier
/srv/eyesofnetwork/eon4apps/.ssh
afin de retrouver la paire de clé précédement générée.
- Envoyez la clé publique générée dans le fichier authorized_keys avec la commande
cat id_dsa.pub >> authorized_keys
- Une fois ceci fait, retournez sur votre poste Windows. Ouvrez PowerShell en administrateur et lancez cette commande pour récupérer la clé et l’envoyer dans le bon dossier. Le login du compte root de la machine EON est nécessaire.
- Après la récupération de votre clé, allez dans le dossier C:\Axians\EOA\sshkey, et lancez puttygen.exe. Importez la clé :
- Puis sauvegardez-la dans C:\Axians\EOA\sshkey :
- Allez dans C:\Axians\EOA\sshkey. Renommez la clé nouvellement généré en id_dsa sans l’extension .ppk
- Supprimez la clé envoyé initialement du serveur EON pour ne garder que la nouvelle clé dans C:\Axians\EOA\sshkey
Configuration d’EyesOfNetwork
Maintenant, il faut configurer EON pour qu’il récupère les informations venant d’EOA.
- Rendez-vous sur la page web d’EON.
- Avant de créer et configurer l’hôte, il vous faut créer la commande
check_dummy
. Le plugin est présent dans EON mais la commande n’existe pas sur l’interface web. Si ce n’est pas le cas, reportez-vous à la documentation de création de commandes.
-
Si le service template “GENERIC_PASSIVE” n’est pas présent sur votre serveur EON, il faut le créer en dupliquant le service template GENERIC_SERVICE, puis en apportant les modifications suivantes :
-
sur l’onglet “General”, renommer le service et sa description :
-
Désactiver l’option “Active Checks”
-
Activez le “Check Freshness” et passer l’option “Freshness threshold” à 1200
-
-
Rajoutez l’hôte :
- Créez ensuite les services suivants, et configurez-les comme suit :
Votre service doit heriter du template de service “GENERIC_PASSIVE”
Ces services récupèrerons les informations qu’enverra EOA à EON, ce sont des services passifs.
Selenium
EOA permet de gérer des scénarios basé sur des copies d’écrans. Cependant, on peut également utiliser l’outil Selenium pour gérer des scénarios web.
PowerShell - DotNet
Selenium a besoin de PowerShell 4.0 mininum pour fonctionner. Si vous utilisez EOA sur Windows7, mettez à jour PowerShell, disponible ici : https://www.microsoft.com/fr-FR/download/details.aspx?id=40855.
Vous aurez également besoin du Framework .NET 4.5, disponibles ici: https://www.microsoft.com/fr-fr/download/details.aspx?id=30653
C# Packages
EOA utilise les paquets Selenium C#. Il vous faut télécharger et installer:
- Selenium Client & WebDriver Language Bindings, C# version: https://www.seleniumhq.org/download/
- Extraire les fichiers (en renommant
.nupkg
en.zip
) - Copier
WebDriver.dll
etWebDriver.Support.dll
dans le dossierC:\Axians\EOA\selenium
Browser Packages
Selenium a besoin des paquets drivers navigatur pour fonctionner:
- Télécharger les drivers IE, Firefox or Chrome dspuies la page de téléchargement Selenium : https://www.seleniumhq.org/download/
- Extraire et copier les drivers dans le dossier
C:\Axians\EOA\selenium
Plugin Selenium
Pour générer les scénarios, on utilisera un plugin navigateur web, comme par exemple Katalon Recorder pour Firefox.
Utilisation et Tests
Maintenant que la configuration est terminée, passons à l’utilisations d’EOA. EOA Simule un utilisateur, le script fait une recherche d’image puis clique et si elle ne la trouve pas, l’envoie à EON. Rendez-vous sur votre poste Windows.
Lancez l’application EyesOfApplicationGUI.exe, et laissez-la travailler quelques instants. Elle ouvrira le site www.eyesofnetwork.fr sur Firefox et tentera de cliquer sur le bouton téléchargement du site. Si elle n’y arrive pas, elle envoie l’erreur à EON en prenant une capture d’écran.
Pour vérifier que tout s’est bien passé, vérifiez sur EON le service non-user de votre hôte :
Si comme ici, vous obtenez CRITICAL à droite, c’est que EOA n’a rien envoyé et que la commande a échouée.
Attention : Il faut que vous ayez lancé EOA avant la vérification et attendu que le programme ait fini, sinon il est normal que cela affiche CRITICAL.
Pour savoir ce qu’il s’est passé, aller dans les logs dans le dossier suivant et ouvrez dans Notepad++ le fichier présent :
Allez à la fin du fichier de Logs, et déterminez la commande PowerShell envoyée commençant ainsi :
Vérifiez dans la commande que les informations des options sont les bonnes, tel que url, token, hostname, et service.
Corrigez les erreurs dans cette commande et dans le script www.eyesofnetwork.fr.ps1 du début de cette documentation, et lancez la commande corrigée en manuel :
Vous devriez obtenir ceci :
Pour vérifier que la commande a bien fonctionnée sur EON, allez sur le lien suivant https://IP_EON/nrdp/. Entrez le nom de votre token (ici toke) et cliquez sur Submit Check Data :
Vous devriez obtenir ceci :
Une fois la commande lancez dans PowerShell, allez dans EON, et vérifiez rapidement que vous avez bien ceci dans user_www.eyesofnetwork.fr :
La commande envoyée manuellement a alors fonctionné. Si vous obtenez ceci également avec le GUI, tout fonctionne. Si l’image est trouvée, vous obtenez alors ce résultat :
Si la sonde est en erreur, un screenshot sera envoyé à EON via ssh, avec le lien de l’image à cliquer en commentaires du service. Pour rendre le lien cliquable, il faut éditer la configuration thruk sur le serveur EON:
# vim /etc/thruk/cgi.cfg
[...]
escape_html_tags=0
[...]
# systemctl restart httpd
Création de scénarios
Pour la création de scénarios, nous avons 2 possibilités:
- Copie d’Ecran : pour les clients lourds
- Selenium : pour les sites web
On pourra utiliser la Copie d’Ecran pour les sites web, mais cela n’est pas conseillé.
L’exemple ci-après se fait depuis le site EyesOfNetwork, avec les actions suivantes:
- Lancement du navigateur
- Recherche et affichage de la page “Téléchargement”
- Recherche et affichage de la dernière release note 5.3
- Recherche et affichage de la documentation
Clients Lourds
Création du scénario
Pour créer le scénario, nous utilisons 2 fonctionnalités d’EOA:
- Simulation de touches clavier ou boutons souris
- Détection d’images pour valider les étapes
Simulation touches boutons
EOA propose des fonctions pour la simulation des touches ou boutons, que vous retrouverez décrites ici:
- https://github.com/EyesOfNetworkCommunity/eyesofapplication/blob/master/Dependances/docs/functions.md#click-mousebutton-button
- https://github.com/EyesOfNetworkCommunity/eyesofapplication/blob/master/Dependances/docs/functions.md#send-specialkeys-keystopress
- https://github.com/EyesOfNetworkCommunity/eyesofapplication/blob/master/Dependances/docs/functions.md#send-keys-keystopress-timing
Exemple pour simuler la touche TAB:
Send-SpecialKeys "{ENTER}"
Exemplr pour simuler l’entrée d’un nom d’utilisateur:
Send-Keys "login"
Détection d’image
Pour permettre la détection d’image, quelques pré-requis:
- les captures doivent être faites directement sur le poste avec la résolution d’écran native
- les images doivent être au format bitmap
- les images doivente être enregistrées dans le dossier
C:\Axians\EOA\images\nom_du_script\MonImage.bmp
La procédure est ensuite la suivante:
- Faire la capture d’écran à détecter
- Sauver l’image au format BMP dans le dossier adéquat
- Appel des fonctions dans le scénario
On pourra ensuite chercher et cliquer sur l’image comme suit:
$xy=ImageSearch $Image_00_warning $ImageSearchRetries $ImageSearchVerbosity $EonServ 250 0 30
ImageClick $xy 0 0
Les options de la fonction ImageSearch
sont décrites ici:
- https://github.com/EyesOfNetworkCommunity/eyesofapplication/blob/master/Dependances/docs/functions.md#imagesearch
Exemple
Ci-après un exemple complet de recherche d’image, puis entrée login / mot de passe:
$cmd = Measure-Command {
AddValues "INFO" "30 of tolerance because of transparency...."
# Please not the image name is composed by "$Image_"[File name without bmp extention]
$xy=ImageSearch $Image_01_connexion $ImageSearchRetries $ImageSearchVerbosity $EonServ 250 0 30
ImageClick $xy 0 0
Send-Keys $User
Send-SpecialKeys "{TAB}"
Send-Keys $Pass
Send-SpecialKeys "{TAB}"
Send-SpecialKeys "{ENTER}"
}
$Chrono += [math]::Round($cmd.TotalSeconds,6)
L’image $Image_01_connexion
correspondant au fichier C:\Axians\EOA\images\nom_du_script\01_connexion.bmp
Sites Web
Création du scénario
Pour créer le scénario, nous utilisons le module navigateur “Katalon”, voici ensuite la démarche à suivre:
- Lancer Katalon et créer un scénarion de test
- Lancer l’enregistrement
- Dérouler le scénario:
- Click sur Téléchargements
- Click sur Release Notes
- Click sur Documentation
- Arrêter l’enregistrement
Le scénario est maintenant disponible dans Katalon, il faut maintenant le transformer en script EOA.
Mise en forme dans EOA
Depuis la console Katalon, cliquer sur “Export”, au format “C# (WebDriver + MSTest) pour avoir le code exploitable par Selenium & les navigateurs.
Rechercher ensuite la fonction public void TheEOATest
ou équivalent, et sauvegarder les fonctions de type driver.FindElement
, qui correspondent à votre scénario. Dans notre cas ce sera :
[TestMethod]
public void TheEOATest()
{
driver.FindElement(By.LinkText("Télécharger")).Click();
driver.FindElement(By.LinkText("Release Note")).Click();
driver.FindElement(By.XPath("//button[@type='button']")).Click();
driver.FindElement(By.LinkText("Documentation")).Click();
}
Chaque fonction sera à mettre en forme dans un script ps1 dans le dossier C:\Axians\EOA\apps
On va ensuite “traduire” les fonctions pour que cela tourne sur EOA. Par exemple, driver.FindElement(By.LinkText("Télécharger")).Click();
deviendra $WebDriver.FindElementByLinkText("Télécharger").Click();
.
driver.FindElement(By
-> $WebDriver.FindElementBy
L’équivalent plus haut sera alors le suivant:
$WebDriver.FindElementByLinkText("Télécharger").Click();
$WebDriver.FindElementByLinkText("Release Note").Click();
$WebDriver.FindElementByXPath("//button[@type='button']").Click();
$WebDriver.FindElementByLinkText("Documentation").Click();
En découpant les actions, pour mesure, on aura par exemple pour la 1ère action:
$cmd = Measure-Command {
AddValues "INFO" "Click on Download Login"
$WebDriver.FindElementByLinkText("Télécharger").Click();
}
$Chrono += [math]::Round($cmd.TotalSeconds,6)
Liste d’actions EOA
Lors de la construction de scénarios EOA Web, nous retrouvons régulièrement les mêmes champs Ci-après une liste non exhaustive :
Action | Description |
---|---|
start-sleep -s 2 |
Pause de 2 secondes |
AddValues "INFO" "My Tasks"; |
Ajout d’un log de type « Info » |
$WebDriver.FindElementById("username").Click(); |
Click sur le champ de type « ID » « username » |
$WebDriver.FindElementById("username").Clear(); |
Effacement du champ « username » |
$WebDriver.FindElementById("username").SendKeys($Login); |
Ecriture dans le champ « username » |
$WebDriver.FindElementByXPath("//div[@id='mydiv'").Click(); |
Click sur un champ de type « XPath » |
$WebDriver.SwitchTo().frame(0); |
Changer de frame |
$WebDriver.switchTo().defaultContent(); |
Revenir sur la frame initiale |
$WebDriver.SwitchTo().window($WebDriver.WindowHandles[-1]); |
Changement de fenetre sur la dernière ouverte |
WaitForElement "//li/div/div" $ImgTimeout -ByXPath –IsClickable |
Recherche d’élément de type XPath, et verification qu’il est bien cliquable |