Tutoriel Sikuli pour Selenium Automatisation

⚡ Résumé intelligent

Sikuli automatise une interface graphique en reconnaissant des captures d'écran enregistrées plutôt que des localisateurs, ce qui permet à une Selenium essai routier Windows fenêtres contextuelles, boîtes de dialogue de fichiers natives et objets Flash que WebDriver seul ne peut pas atteindre.

  • (I.e. Idée centrale : Chaque élément est stocké au format PNG, et Sikuli le retrouve en faisant correspondre les pixels à l'écran.
  • ☑️ Installer: Ajoutez le SikuliX JAR API vers le Java construire un chemin à côté du Selenium JARs.
  • Classe d'écran : Offre les fonctions clic, double-clic, saisie, survol et recherche, chacune prenant en compte le nom d'une image.
  • 🧪 Classe de modèle : Encapsule un chemin d'image et ajuste la correspondance via similar() et exact().
  • Exemple concret : Dans un test Chrome, Sikuli clique sur « Choisir un fichier », puis saisit le chemin d'accès et clique sur « Ouvrir ».
  • ⚙️ Limitation: Une modification de la résolution ou de la taille des pixels interrompt la correspondance et génère une exception FindFailed.

Tutoriel Sikuli pour Selenium Automatisation

Dans quoi se trouve Sikuli Selenium?

Sikuli est un outil d'automatisation de tests open source basé sur une interface graphique. Il est principalement utilisé pour interagir avec des éléments de pages Web et gérer les fenêtres contextuelles. Sikuli utilise la technique de « Reconnaissance d'image » et de « Control GUI » pour interagir avec les éléments des pages Web et les fenêtres contextuelles. Dans Sikuli, tous les éléments Web sont pris sous forme d'images et stockés dans le projet.

⚠️ Note concernant la dénomination : le projet est maintenu aujourd'hui sous la forme SikuliX, publié sur Maven Central sous le nom de com.sikulix:sikulixapiLes noms des classes ci-dessous restent inchangés.

Comment utiliser Sikuli avec Selenium Pilote Web

Sikuli peut être intégré à Selenium WebDriver utilisant le fichier JAR Sikuli, dans les deux étapes ci-dessous.

Étape 1) Téléchargez le fichier JAR Sikuli ci-dessous URL, et extracextraire le contenu du fichier ZIP dans un dossier.

https://mvnrepository.com/artifact/com.sikulix/sikulixapi/2.0.5

Étape 2) Créez un nouveau projet JAVA dans Eclipse et ajoutez le fichier JAR au chemin de compilation, ainsi que les fichiers jar de Selenium, en cliquant avec le bouton droit sur le projet -> Chemin de compilation -> Configurer le chemin de compilation, comme indiqué ci-dessous.

Le fichier JAR Sikuli a été ajouté au Java chemin de construction dans Eclipse Configurer le chemin de compilation

Une fois le fichier JAR ajouté au chemin de compilation du projet, les classes fournies par Sikuli peuvent être utilisées. Un projet Maven peut également déclarer ce même artefact comme dépendance.

Cours d’écran à Sikuli

La classe Screen est la classe de base de toutes les méthodes fournies par Sikuli. Elle contient des méthodes prédéfinies pour toutes les opérations courantes effectuées sur les éléments de l'écran, telles que le clic, le double-clic, la saisie dans une zone de texte, le survol, etc. Vous trouverez ci-dessous la liste des méthodes les plus fréquemment utilisées de la classe Screen.

Méthode Description Syntaxe
Cliquez à nouveau Cette méthode est utilisée pour cliquer sur un élément à l'écran en utilisant le nom de l'image comme paramètre.

Écran s = nouvel écran ();

s.clic("QA.png");

doubleCliquez Cette méthode est utilisée pour double-cliquer sur un élément. Il accepte le nom de l'image comme paramètre.

Écran s = nouvel écran ();

s.doubleClick("QA.png");

Type Cette méthode est utilisée pour fournir une valeur d’entrée à un élément. Il accepte le nom de l'image et le texte à envoyer comme paramètres.

s.type("QA.png", "TEXT");

Flotter Cette méthode est utilisée pour survoler un élément. Il accepte le nom de l'image comme paramètre.

s.hover("QA.png");

Trouvez Cette méthode est utilisée pour rechercher un élément spécifique sur l'écran. Il accepte le nom de l'image comme paramètre.

s.find("QA.png");

Cours de patrons à Sikuli

Alors que la classe Screen agit sur un simple nom d'image, la classe Pattern est utilisée pour associer le fichier image à des attributs supplémentaires afin d'identifier l'élément de manière unique. Elle prend le chemin d'accès à l'image comme paramètre.

Pattern p = new Pattern(“Path of image”);

Voici les méthodes les plus couramment utilisées de la classe Pattern.

Méthode Description Syntaxe
getFileName Renvoie le nom de fichier contenu dans l'objet Pattern.

Modèle p = nouveau modèle("D:\Demo\QA.png");

String filename = p.getFileName();

similaires Cette méthode renvoie un nouvel objet Pattern avec une similarité définie sur une valeur spécifiée. Il accepte la valeur de similarité entre 0 et 1 comme paramètre. Sikuli recherche tous les éléments qui se situent dans la plage de similarité spécifiée et renvoie un nouvel objet modèle.

Modèle p1 = p.similar(0.7f);

Exact Cette méthode renvoie un nouvel objet modèle avec une similarité définie sur 1. Elle recherche uniquement une correspondance exacte de l'élément spécifié.

Modèle p1 = p.exact();

Code Exemple de téléchargement de fichiers avec Sikuli

Le code ci-dessous explique comment utiliser Sikuli pour le téléchargement de fichiers dans Chrome.

package com.sikuli.demo;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.sikuli.script.FindFailed;
import org.sikuli.script.Pattern;
import org.sikuli.script.Screen;
import org.openqa.selenium.chrome.ChromeDriver;

public class SikuliDemo {

    public static void main(String[] args) throws FindFailed {

        System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
        String filepath = "D:\\Guru99Demo\\Files\\";
        String inputFilePath = "D:\\Guru99Demo\\Files\\";
        Screen s = new Screen();
        Pattern fileInputTextBox = new Pattern(filepath + "FileTextBox.PNG");
        Pattern openButton = new Pattern(filepath + "OpenButton.PNG");
        WebDriver driver;

        // Open Chrome browser    
        driver = new ChromeDriver();
        driver.get("https://demo.guru99.com/test/image_upload/index.php");

        // Click on Browse button and handle windows pop up using Sikuli
        driver.findElement(By.xpath(".//*[@id='photoimg']")).click();
        s.wait(fileInputTextBox, 20);
        s.type(fileInputTextBox, inputFilePath + "Test.docx");
        s.click(openButton);

        // Close the browser
        driver.close();
    }
}

Code Explication

Étape 1) La première instruction consiste à définir le chemin exécutable du pilote pour Chrome.

System.setProperty("webdriver.chrome.driver", "D:\\ chromedriver.exe");

⚠️ Note de version : Selenium 4 résout le binaire du pilote via Selenium Responsable, cette ligne est donc désormais facultative. Elle est conservée telle qu'elle a été écrite dans le code source.

Étape 2) Utilisez un outil de capture d'écran tel que Snipping Tool pour prendre des captures d'écran de la fenêtre contextuelle « FileText »Boxet le bouton « Ouvrir », comme ci-dessous.

Snipping Tool sélection sur le Windows zone de texte de saisie de fichier dans la fenêtre contextuelle de téléchargement

Voici à quoi devrait ressembler votre capture d'écran :

Texte du fichier capturéBox et les images de référence OpenButton utilisées par le script Sikuli

Les images de la zone de texte de saisie de fichier Windows et du bouton Ouvrir sont stockées dans « FileText »Box.PNG' et 'OpenButton.PNG'.

Exemple : Si vous souhaitez automatiser l'opération d'ouverture du bloc-notes, vous devez alors stocker l'image d'une icône du bureau pour le bloc-notes dans un fichier PNG et effectuer une opération de clic dessus.

Dans notre cas, il reconnaît la zone de texte de saisie de fichier et le bouton Ouvrir sur Windows popup utilisant les images stockées. Si la résolution de l'écran change entre la capture d'image et l'exécution du script de test, le comportement de Sikuli sera incohérent. Il est donc toujours conseillé d'exécuter le script de test sur la même résolution à laquelle les images sont capturées. Un changement dans la taille des pixels des images entraînera Sikuli à générer une exception FindFailed.

Étape 3) Les instructions suivantes incluent la création d'objets pour les classes Screen et Pattern. Créez un nouvel objet d'écran. Définissez le chemin du fichier que vous souhaitez télécharger en tant que paramètre de l'objet Pattern.

Screen s = new Screen();
Pattern fileInputTextBox = new Pattern(filepath + "FileTextBox.PNG");
Pattern openButton = new Pattern(filepath + "OpenButton.PNG");

Étape 4) Les instructions ci-dessous concernent l'ouverture du navigateur Chrome avec URL d'une application de démonstration de téléchargement de fichiers : https://demo.guru99.com/test/image_upload/index.php

driver = new ChromeDriver();
driver.get("https://demo.guru99.com/test/image_upload/index.php");

Étape 5) Cliquez sur le bouton Choisir un fichier en utilisant l'instruction ci-dessous

driver.findElement(By.xpath(".//*[@id='photoimg']")).click();

Étape 6) Attendez que la fenêtre contextuelle apparaisse. La méthode d'attente est utilisée pour gérer le délai associé à l'ouverture des fenêtres contextuelles après avoir cliqué sur le bouton Parcourir.

s.wait(fileInputTextBox, 20);

Étape 7) Tapez le chemin du fichier dans la zone de texte du fichier d'entrée et cliquez sur le bouton Ouvrir.

s.type(fileInputTextBox, inputFilePath + "Test.docx");
s.click(openButton);

Étape 8) Fermez le navigateur

driver.close();

Sortie

Initialement, le script ouvre le navigateur Chrome

Le navigateur Chrome s'est ouvert sur la page de téléchargement du fichier de démonstration au début de l'exécution.

Clique sur le bouton « Choisir un fichier », l'écran contextuel du fichier Windows apparaîtra. Entre les données dans la zone de texte de saisie de fichier et clique sur le bouton « Ouvrir »

Windows Une fenêtre contextuelle s'affiche avec le chemin d'accès au fichier saisi dans la zone de texte « Entrée de fichier ».

L'écran ci-dessous s'affiche une fois le téléchargement du fichier terminé et ferme le navigateur

Page de démonstration confirmant la fin du téléchargement juste avant la fermeture du navigateur.

Comme la correspondance dépend des pixels, il faut recréer chaque image de référence à chaque modification de l'interface. C'est cette fragilité qui explique pourquoi les équipes réservent Sikuli aux fenêtres contextuelles. Gestion de fichiers WebDriver simple ne peut pas atteindre.

FAQ

L'image de référence n'a pas pu être affichée à l'écran. Cela peut être dû à une résolution différente, une image redimensionnée, un thème modifié ou à l'absence de visibilité de l'élément. Veuillez relancer la capture à une résolution inférieure ou avec un niveau de similarité plus faible.

Selenium Sikuli pilote le DOM du navigateur via des localisateurs, tandis que Sikuli pilote l'écran via des captures d'écran, permettant ainsi d'accéder aux boîtes de dialogue natives que le DOM n'expose jamais. Les deux sont utilisés conjointement.

Oui. Déclarez. com.sikulix:sikulixapi en tant que dépendance et Maven récupère la même API, gardezping la version dans le fichier de construction plutôt qu'une Eclipse chemin de construction.

Oui, SikuliX fonctionne sur Windows, Linux et macOSLes images de référence ne sont pas compatibles entre les différentes plateformes, car les décorations et les polices diffèrent ; chaque plateforme a donc besoin de ses propres captures.

Les algorithmes d'apprentissage automatique tolèrent les variations de couleur, d'échelle et de thème que la comparaison de pixels ne peut pas gérer, et peuvent retrouver un contrôle grâce à son étiquette. Cela réduit considérablement le travail de recapture nécessaire après une refonte.

Copilote GitHub Ce programme gère les appels Screen et Pattern ainsi que la configuration WebDriver associée. Il ne peut pas capturer les fichiers PNG ; vérifiez donc le chemin d’accès de chaque image générée.

La mise en correspondance présente des dysfonctionnements lors du changement de style de l'interface ou de la résolution, est plus lente que l'automatisation DOM et signale les erreurs de manière moins claire. Elle convient aux interfaces qui changent rarement.

Le projet de recherche original de Sikuli ne l'est pas, mais son successeur SikuliX Il s'agit de la publication de l'artefact sikulixapi utilisé ici. Les articles citant des fichiers JAR en script sikuli simple décrivent la version précédente.

Résumez cet article avec :