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.

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.
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.
Voici à quoi devrait ressembler votre capture d'écran :
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
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 »
L'écran ci-dessous s'affiche une fois le téléchargement du fichier terminé et ferme le 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.






