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

  • 🔘 Kerneidé: Hvert element gemmes som en PNG, og Sikuli finder det ved at matche pixels på skærmen.
  • ☑️ Opsætning: Tilsæt SikuliX API JAR til Java bygge sti ved siden af Selenium JAR'er.
  • ✅ Skærmklasse: Tilbyder klik, dobbeltklik, skriv, hold musen nede og find, der hver tager et billednavn.
  • 🧪 Mønsterklasse: Ombryder en billedsti og justerer matchning via similar() og exact().
  • 🛠️ Udarbejdet eksempel: En Chrome-test klikker på Vælg fil, derefter skriver Sikuli stien og klikker på Åbn.
  • 🇧🇷 Begrænsning: En ændring i opløsning eller pixelstørrelse afbryder matchningen og forårsager FindFailed.

Tutorial til Sikuli Selenium Automation

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.

Sikuli JAR-fil tilføjet til Java bygge sti i Eclipse Konfigurer byggesti

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.

Snipping Tool valget over Windows Tekstboks til filindtastning i pop op-upload

Sådan skal dit skærmbillede se ud:

Optaget filtekstBox og OpenButton-referencebilleder brugt af Sikuli-scriptet

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

Chrome-browseren blev åbnet på demofilens uploadside i starten af ​​kørslen.

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'

Windows fil-popup med filstien indtastet i tekstfeltet Filinput

Nedenstående skærm vises, når filoverførslen er fuldført og lukker browseren

Demoside, der bekræfter, at uploaden er fuldført, lige før browseren lukker

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

Ofte Stillede Spørgsmål

Referencebilledet matchede ikke på skærmen. Almindelige årsager er en anden opløsning, et omskaleret billede, et omdesignet tema, eller at elementet endnu ikke er synligt. Genoptag med køreopløsning eller lavere lighed.

Selenium driver browserens DOM via locators. Sikuli driver skærmen via skærmbilleder, så den når indbyggede dialoger, som DOM'en aldrig viser. De to bruges sammen.

Ja. Erklær com.sikulix:sikulixapi som en afhængighed, og Maven trækker den samme API, keeping versionen i byggefilen i stedet for en Eclipse bygge sti.

Ja, SikuliX kører på Windows, Linux og macOSReferencebilleder kan ikke overføres mellem dem, fordi dekorationer og skrifttyper er forskellige, så hver platform har brug for sine egne billeder.

Maskinlæringsmatchere tolererer farve-, skala- og temaskift, som pixelsammenligning ikke kan, og kan finde en kontrol via dens etiket. Det reducerer det nødvendige gendannelsesarbejde efter et redesign.

GitHub Copilot udkast til skærm- og mønsterkald og WebDriver-opsætningen omkring dem. Den kan ikke indfange PNG-filerne, så verificér alle genererede billedstier.

Matching afbrydes, når brugerfladen omdesignes eller opløsningen ændres, kører langsommere end DOM-automatisering og rapporterer fejl mindre tydeligt. Det passer til brugerflader, der sjældent ændres.

Det oprindelige Sikuli-forskningsprojekt er ikke, men dets efterfølger SikuliX er og udgiver sikulixapi-artefaktet, der bruges her. Artikler, der citerer almindelige sikuli-script JAR-filer, beskriver den tidligere linje.

Opsummer dette indlæg med: