Handledning för Sikuli Selenium Automation
⚡ Smart sammanfattning
Sikuli automatiserar ett grafiskt gränssnitt genom att känna igen lagrade skärmdumpar snarare än positionerare, vilket gör att en Selenium provköra Windows popup-fönster, dialogrutor för inbyggda filer och Flash-objekt som WebDriver inte ensamt kan nå.
Vad är Sikuli i Selenium?
Sikuli är ett GUI-baserat testautomatiseringsverktyg med öppen källkod. Det används främst för att interagera med delar av webbsidor och hantera fönsterbaserade popup-fönster. Sikuli använder tekniken "Image Recognition" och "Control GUI" för att interagera med delar av webbsidor och popup-fönster i fönster. I Sikuli tas alla webbelement som bilder och lagras i projektet.
⚠️ Namngivningsanmärkning: projektet underhålls idag som SikuliX, publicerad på Maven Central som com.sikulix:sikulixapiKlassnamnen nedan är oförändrade.
Hur man använder Sikuli med Selenium Webdriver
Sikuli kan integreras med Selenium WebDriver med hjälp av Sikuli JAR-filen, i de två stegen nedan.
Steg 1) Ladda ner Sikuli JAR-filen nedan URLoch extracöverföra innehållet i ZIP-filen till en mapp.
https://mvnrepository.com/artifact/com.sikulix/sikulixapi/2.0.5
Steg 2) Skapa ett nytt JAVA-projekt i Eclipse och lägg till JAR-filen i byggsökvägen, tillsammans med Selenium JAR-filer genom att högerklicka på projektet -> Byggsökväg -> Konfigurera byggsökväg, som visas nedan.
När du har lagt till JAR-filen i projektets byggsökväg kan klasser som tillhandahålls av Sikuli användas. Ett Maven-projekt kan istället deklarera samma artefakt som ett beroende.
Skärmklass i Sikuli
Klassen Screen är basklassen för alla metoder som tillhandahålls av Sikuli. Klassen Screen innehåller fördefinierade metoder för alla vanliga operationer på skärmelement, såsom klick, dubbelklicka, ge inmatning till en textruta, hålla muspekaren över skärmbilden etc. Nedan följer en lista över vanliga metoder som tillhandahålls av klassen Screen.
| Metod | BESKRIVNING | syntax |
|---|---|---|
| Klicka | Denna metod används för att klicka på ett element på skärmen med bildnamnet som parameter. |
Skärm s = ny skärm(); s.click(“QA.png”); |
| dubbelklicka | Denna metod används för att dubbelklicka på ett element. Den accepterar bildnamn som parameter. |
Skärm s = ny skärm(); s.doubleClick(“QA.png”); |
| Typ | Den här metoden används för att ge ingångsvärde till ett element. Den accepterar bildnamnet och texten som ska skickas som parametrar. |
s.type(“QA.png”,,”TEXT”); |
| Hovra | Denna metod används för att hålla muspekaren över ett element. Den accepterar bildnamn som parameter. |
s.hover(“QA.png”); |
| Hitta | Denna metod används för att hitta ett specifikt element på skärmen. Den accepterar bildnamn som parameter. |
s.find(“QA.png”); |
Mönsterklass i Sikuli
Där Screen agerar på ett vanligt bildnamn används klassen Pattern för att associera bildfilen med ytterligare attribut för att unikt identifiera elementet. Den tar bildens sökväg som en parameter.
Pattern p = new Pattern(“Path of image”);
Följande är de mest använda metoderna i Pattern-klassen.
| Metod | BESKRIVNING | syntax |
|---|---|---|
| getFileName | Returnerar filnamnet som finns i Pattern-objektet. |
Mönster p = nytt mönster(“D:\Demo\QA.png”); Sträng filnamn = p.getFileName(); |
| liknande | Denna metod returnerar ett nytt Pattern-objekt med likhet inställd på ett angivet värde. Den accepterar likhetsvärdet mellan 0 till 1 som en parameter. Sikuli letar efter alla element som faller inom det angivna likhetsintervallet och returnerar ett nytt mönsterobjekt. |
Mönster p1 = p.similar(0.7f); |
| Exakt | Den här metoden returnerar ett nytt mönsterobjekt med likheten satt till 1. Den letar bara efter en exakt matchning av det angivna elementet. |
Mönster p1 = p.exact(); |
Code Exempel på filuppladdning med Sikuli
Koden nedan förklarar användningen av Sikuli för filuppladdning 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 Förklaring
Steg 1) Den första satsen innebär att ställa in drivrutinens körbara sökväg för chrome.
System.setProperty("webdriver.chrome.driver", "D:\\ chromedriver.exe");
⚠️ Versionsnotering: Selenium 4 löser drivrutinsbinärfilen genom Selenium Chef, så den här raden är nu valfri. Den behålls som källkoden skrev den.
Steg 2) Använd ett screengrab-verktyg som t.ex Snipping Tool för att ta skärmdumpar av windows popup 'FileTextBoxoch knappen 'Öppna', som nedan.
Så här ska din skärmdump se ut:
Bilder för Windows-filinmatningstextrutan och öppna-knappen lagras i 'FileTextBox.PNG' och 'OpenButton.PNG'.
Exempel: Om du vill automatisera operationen för att öppna anteckningsblocket måste du lagra bilden av en skrivbordsikon för anteckningsblock i en PNG-fil och utföra klickoperation på den.
I vårt fall känner den igen textrutan för filinmatning och knappen Öppna på Windows popup med de lagrade bilderna. Om skärmupplösningen ändras från bildtagning till exekvering av testskript, skulle Sikulis beteende vara inkonsekvent. Därför är det alltid tillrådligt att köra testskriptet med samma upplösning som bilderna tas. Ändring av pixelstorlek på bilder kommer att resultera i att Sikuli kastar ett FindFailed-undantag.
Steg 3) Nästa påstående inkluderar skapandet av objekt för skärm- och mönsterklasser. Skapa ett nytt skärmobjekt. Ställ in sökvägen för filen du vill ladda upp som en parameter till Pattern-objektet.
Screen s = new Screen(); Pattern fileInputTextBox = new Pattern(filepath + "FileTextBox.PNG"); Pattern openButton = new Pattern(filepath + "OpenButton.PNG");
Steg 4) Nedanstående påståenden innebär att öppna Chrome-webbläsaren med URL av ett demoprogram för filuppladdning: https://demo.guru99.com/test/image_upload/index.php
driver = new ChromeDriver(); driver.get("https://demo.guru99.com/test/image_upload/index.php");
Steg 5) Klicka på knappen Välj fil med hjälp av uttalandet nedan
driver.findElement(By.xpath(".//*[@id='photoimg']")).click();
Steg 6) Vänta tills Windows-popupen visas. Väntemetoden används för att hantera fördröjningen i samband med att fönster öppnas efter att du klickat på bläddringsknappen.
s.wait(fileInputTextBox, 20);
Steg 7) Skriv sökvägen till inmatningsfilens textruta och klicka på knappen Öppna
s.type(fileInputTextBox, inputFilePath + "Test.docx");
s.click(openButton);
Steg 8) Stäng webbläsaren
driver.close();
Produktion
Till en början öppnar skriptet Chrome-webbläsaren
Klicka på knappen "Välj fil", popup-skärmen för Windows-filer visas. Matar in data i filinmatningstextrutan och klickar på knappen "Öppna".
Skärmen nedan visas när filuppladdningen är klar och webbläsaren stängs
Eftersom matchning beror på pixlar, återskapa varje referensbild när gränssnittet omformas. Den sårbarheten är anledningen till att team reserverar Sikuli för popup-fönster. enkel WebDriver-filhantering kan inte nå.






