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 dans Proprié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”.

Screenshot

  • Lancez ensuite le fichier setup.bat.
  • Renseignez les informations demandées selon vos critères :

Screenshot Screenshot

Vous avez à présent un nouveau dossier à la racine de votre disque.

Screenshot

  • 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 :

Screenshot

$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é.

Screenshot

  • Enfin, renommez le $Hostname :

Screenshot

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 commande ssh-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.

Screenshot

  • Envoyez la clé publique générée dans le fichier authorized_keys avec la commande cat id_dsa.pub >> authorized_keys

Screenshot

  • 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.

Screenshot

  • Après la récupération de votre clé, allez dans le dossier C:\Axians\EOA\sshkey, et lancez puttygen.exe. Importez la clé :

Screenshot

  • Puis sauvegardez-la dans C:\Axians\EOA\sshkey :

Screenshot

  • Allez dans C:\Axians\EOA\sshkey. Renommez la clé nouvellement généré en id_dsa sans l’extension .ppk

Screenshot

  • 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.

Screenshot

  • 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 : Screenshot

    • Désactiver l’option “Active Checks” Screenshot

    • Activez le “Check Freshness” et passer l’option “Freshness threshold” à 1200 Screenshot

  • Rajoutez l’hôte :

Screenshot

  • Créez ensuite les services suivants, et configurez-les comme suit :

Votre service doit heriter du template de service “GENERIC_PASSIVE”

Screenshot Screenshot

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 et WebDriver.Support.dll dans le dossier C:\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 :

Screenshot

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 :

Screenshot

Allez à la fin du fichier de Logs, et déterminez la commande PowerShell envoyée commençant ainsi :

Screenshot

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 :

Screenshot

Vous devriez obtenir ceci :

Screenshot

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 :

Screenshot

Vous devriez obtenir ceci :

Screenshot

Une fois la commande lancez dans PowerShell, allez dans EON, et vérifiez rapidement que vous avez bien ceci dans user_www.eyesofnetwork.fr :

Screenshot

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 :

Screenshot

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:

  1. Lancement du navigateur
  2. Recherche et affichage de la page “Téléchargement”
  3. Recherche et affichage de la dernière release note 5.3
  4. 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:

  1. Faire la capture d’écran à détecter
  2. Sauver l’image au format BMP dans le dossier adéquat
  3. 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:

  1. Lancer Katalon et créer un scénarion de test

Screenshot

  1. Lancer l’enregistrement
  2. Dérouler le scénario:
    • Click sur Téléchargements
    • Click sur Release Notes
    • Click sur Documentation
  3. Arrêter l’enregistrement

Screenshot

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.

Screenshot

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