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

  • 🔘 Kärnidé: Varje element lagras som en PNG, och Sikuli hittar det genom att matcha pixlar på skärmen.
  • ☑️ Setup: Lägg till SikuliX API JAR till Java bygga stig bredvid Selenium JAR-filer.
  • ✅ Skärmklass: Tillåter klicka, dubbelklicka, skriv, muspekare och sök, där varje alternativ tar ett bildnamn.
  • 🧪 Mönsterklass: Slår om en bildbana och justerar matchning genom similar() och exact().
  • 🛠️ Utarbetat exempel: Ett Chrome-test klickar på Välj fil, sedan skriver Sikuli sökvägen och klickar på Öppna.
  • ⚙️ Begränsning: En ändring av upplösning eller pixelstorlek avbryter matchningen och utlöser FindFailed.

Handledning för Sikuli Selenium Automation

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.

Sikuli JAR-fil tillagd till Java bygga väg i Eclipse Konfigurera byggväg

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.

Snipping Tool valet över Windows textruta för filinmatning i popup-fönstret för uppladdning

Så här ska din skärmdump se ut:

Inspelad filtextBox och OpenButton-referensbilder som används av Sikuli-skriptet

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

Chrome-webbläsaren öppnades på uppladdningssidan för demofiler i början av körningen.

Klicka på knappen "Välj fil", popup-skärmen för Windows-filer visas. Matar in data i filinmatningstextrutan och klickar på knappen "Öppna".

Windows filpopup med sökvägen inskriven i textrutan Filinmatning

Skärmen nedan visas när filuppladdningen är klar och webbläsaren stängs

Demosida som bekräftar att uppladdningen är klar precis innan 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å.

Vanliga frågor

Referensbilden matchade inte på skärmen. Vanliga orsaker är en annan upplösning, en omskalad bild, ett omformat tema eller att elementet inte är synligt ännu. Återskapa med körupplösning eller lägre likhet.

Selenium driver webbläsarens DOM genom sökare. Sikuli driver skärmen genom skärmdumpar, så att den når inbyggda dialogrutor som DOM aldrig exponerar. De två används tillsammans.

Ja. Deklarera com.sikulix:sikulixapi som ett beroende och Maven hämtar samma API, keeping versionen i byggfilen snarare än en Eclipse bygga väg.

Ja, SikuliX går på Windows, Linux och macOSReferensbilder är inte portabla mellan dem, eftersom dekorationer och teckensnitt skiljer sig åt, så varje plattform behöver sina egna bilder.

Maskininlärningsmatchare tolererar färg-, skal- och temaförändringar som pixeljämförelse inte kan, och kan hitta en kontroll via dess etikett. Det minskar det återskapande arbete som behövs efter en omdesign.

GitHub Copilot utkast skärm- och mönsteranrop och WebDriver-inställningarna kring dem. Den kan inte hämta PNG-filerna, så verifiera varje genererad bildsökväg.

Matchning bryts när gränssnittet ändras eller upplösningen ändras, går långsammare än DOM-automation och rapporterar fel mindre tydligt. Det passar gränssnitt som sällan ändras.

Det ursprungliga Sikuli-forskningsprojektet är inte det, utan dess efterföljare SikuliX är och publicerar sikulixapi-artefakten som används här. Artiklar som hänvisar till vanliga sikuli-skript-JAR-filer beskriver den tidigare raden.

Sammanfatta detta inlägg med: