Tutorial til Sikuli Selenium Automation
⚡ Smart opsummering
Sikuli automatiserer en grafisk brugerflade ved at genkende gemte skærmbilleder i stedet for lokatorer, hvilket giver en Selenium prøvekøre Windows pop op-vinduer, native fildialoger og Flash-objekter, som WebDriver ikke alene kan nå.
Hvad er Sikuli i Selenium?
Sikuli er et open source GUI-baseret testautomatiseringsværktøj. Det bruges hovedsageligt til at interagere med elementer på websider og håndtere vinduesbaserede popups. Sikuli bruger teknikken "Image Recognition" og "Control GUI" til at interagere med elementer af websider og popup-vinduer i vinduer. I Sikuli er alle webelementerne taget som billeder og gemt inde i projektet.
⚠️ Navngivningsnotat: projektet opretholdes i dag som SikuliX, udgivet på Maven Central som com.sikulix:sikulixapiKlassenavnene nedenfor er uændrede.
Sådan bruger du Sikuli med Selenium Webdriver
Sikuli kan integreres med Selenium WebDriver ved hjælp af Sikuli JAR-filen i de to trin nedenfor.
Trin 1) Download Sikuli JAR-filen fra nedenstående URLog extracindholdet af ZIP-filen til en mappe.
https://mvnrepository.com/artifact/com.sikulix/sikulixapi/2.0.5
Trin 2) Opret et nyt JAVA-projekt i Eclipse og tilføj JAR-filen til byggestien sammen med Selenium JAR-filer ved at højreklikke på projektet -> Byggesti -> Konfigurer byggesti, som vist nedenfor.
Når du har tilføjet JAR-filen til projektets byggesti, kan klasser leveret af Sikuli bruges. Et Maven-projekt kan i stedet deklarere den samme artefakt som en afhængighed.
Skærmklasse i Sikuli
Screen-klassen er basisklassen for alle metoderne leveret af Sikuli. Screen-klassen indeholder foruddefinerede metoder til alle de almindeligt udførte operationer på skærmelementer, såsom klik, dobbeltklik, input til en tekstboks, hold musen over feltet osv. Nedenfor er en liste over almindeligt anvendte metoder leveret af Screen-klassen.
| Metode | Beskrivelse | Syntaks |
|---|---|---|
| Klik | Denne metode bruges til at klikke på et element på skærmen med billednavn som parameter. |
Skærm s = ny skærm(); s.click(“QA.png”); |
| dobbeltklik | Denne metode bruges til at dobbeltklikke på et element. Den accepterer billednavn som parameter. |
Skærm s = ny skærm(); s.doubleClick(“QA.png”); |
| Type | Denne metode bruges til at give inputværdi til et element. Den accepterer billednavnet og teksten, der skal sendes som parametre. |
s.type(“QA.png”,,”TEXT”); |
| Hover | Denne metode bruges til at holde markøren over et element. Den accepterer billednavn som parameter. |
s.hover(“QA.png”); |
| Finde | Denne metode bruges til at finde et bestemt element på skærmen. Den accepterer billednavn som parameter. |
s.find(“QA.png”); |
Mønsterklasse i Sikuli
Hvor Screen reagerer på et almindeligt billednavn, bruges Pattern-klassen til at knytte billedfilen til yderligere attributter for entydigt at identificere elementet. Den tager billedets sti som en parameter.
Pattern p = new Pattern(“Path of image”);
Følgende er de mest almindeligt anvendte metoder i Pattern-klassen.
| Metode | Beskrivelse | Syntaks |
|---|---|---|
| getFileName | Returnerer filnavnet indeholdt i Pattern-objektet. |
Mønster p = nyt mønster(“D:\Demo\QA.png”); String filnavn = p.getFileName(); |
| lignende | Denne metode returnerer et nyt Pattern-objekt med lighed sat til en specificeret værdi. Den accepterer lighedsværdien mellem 0 til 1 som en parameter. Sikuli leder efter alle elementer, der falder inden for det angivne lighedsområde og returnerer et nyt mønsterobjekt. |
Mønster p1 = p.similar(0.7f); |
| Præcis | Denne metode returnerer et nyt mønsterobjekt med lighed sat til 1. Den leder kun efter en nøjagtig match af det angivne element. |
Mønster p1 = p.exact(); |
Code Eksempel på filupload ved hjælp af Sikuli
Koden nedenfor forklarer brugen af Sikuli til filupload i 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 Forklaring
Trin 1) Den første sætning involverer indstilling af driverens eksekverbare sti til chrome.
System.setProperty("webdriver.chrome.driver", "D:\\ chromedriver.exe");
⚠️ Versionsnotat: Selenium 4 løser driverbinærfilen via Selenium Manager, så denne linje er nu valgfri. Den bevares, som kilden skrev den.
Trin 2) Brug et screengrab-værktøj som f.eks Snipping Tool for at tage skærmbilleder af windows popup 'FileTextBox' og 'Åbn'-knappen, som vist nedenfor.
Sådan skal dit skærmbillede se ud:
Billeder til Windows-filinput tekstboks og åben knap gemmes på 'FileTextBox.PNG' og 'OpenButton.PNG'.
Eksempel: Hvis du vil automatisere betjeningen af at åbne notesblok, skal du gemme billedet af et skrivebordsikon til notesblok på en PNG-fil og udføre klikoperation på den.
I vores tilfælde genkender den tekstfeltet til filindtastning og knappen Åbn på Windows popup ved hjælp af de gemte billeder. Hvis skærmopløsningen ændres fra billedoptagelse til udførelse af testscript, ville Sikulis adfærd være inkonsekvent. Derfor er det altid tilrådeligt at køre testscriptet med den samme opløsning, som billederne er taget med. Ændring i pixelstørrelse på billeder vil resultere i, at Sikuli kaster en FindFailed-undtagelse.
Trin 3) De næste udsagn inkluderer oprettelsen af objekter til skærm- og mønsterklasser. Opret et nyt skærmobjekt. Indstil stien til den fil, du vil uploade som en parameter til Pattern-objektet.
Screen s = new Screen(); Pattern fileInputTextBox = new Pattern(filepath + "FileTextBox.PNG"); Pattern openButton = new Pattern(filepath + "OpenButton.PNG");
Trin 4) Nedenstående udsagn involverer åbning af Chrome-browseren med URL af et demo-program til filupload: https://demo.guru99.com/test/image_upload/index.php
driver = new ChromeDriver(); driver.get("https://demo.guru99.com/test/image_upload/index.php");
Trin 5) Klik på knappen vælg fil ved hjælp af nedenstående erklæring
driver.findElement(By.xpath(".//*[@id='photoimg']")).click();
Trin 6) Vent på, at popup-vinduet vises. Vent-metoden bruges til at håndtere forsinkelsen, der er forbundet med at åbne vinduer, som dukker op efter klik på gennemse-knappen.
s.wait(fileInputTextBox, 20);
Trin 7) Indtast filstien på inputfilens tekstboks, og klik på knappen Åbn
s.type(fileInputTextBox, inputFilePath + "Test.docx");
s.click(openButton);
Trin 8) Luk browseren
driver.close();
Produktion
I første omgang åbner scriptet chrome-browseren
Hvis du klikker på knappen 'Vælg fil', vises popup-skærmen for Windows-filen. Indsætter data i filindtastningsfeltet og klikker på knappen 'Åbn'
Nedenstående skærm vises, når filoverførslen er fuldført og lukker browseren
Fordi matchning afhænger af pixels, skal alle referencebilleder genindfanges, når brugerfladen restyles. Denne skrøbelighed er grunden til, at teams reserverer Sikuli til pop op-vinduer. almindelig WebDriver-filhåndtering ikke kan nå.






