Sikuli opplæring for Selenium Automatisering

⚡ Smart oppsummering

Sikuli automatiserer et grafisk grensesnitt ved å gjenkjenne lagrede skjermbilder i stedet for lokatorer, noe som lar en Selenium prøvekjør Windows popup-vinduer, native fildialoger og Flash-objekter som WebDriver alene ikke kan nå.

  • 🔘 Kjerneide: Hvert element lagres som en PNG, og Sikuli finner det ved å matche piksler på skjermen.
  • ☑️ Oppsett: Legg til SikuliX API JAR til Java bygge sti ved siden av Selenium JAR-filer.
  • Skjermklasse: Tilbyr klikk, dobbeltklikk, skriv, hold musepekeren og finn, som hver tar et bildenavn.
  • 🧪 Mønsterklasse: Pakker en bildebane og justerer samsvar gjennom similar() og exact().
  • 🛠️ Utarbeidet eksempel: En Chrome-test klikker på Velg fil, deretter skriver Sikuli inn banen og klikker på Åpne.
  • ⚙️ Begrensning: En endring i oppløsning eller pikselstørrelse ødelegger samsvar og genererer FindFailed.

Sikuli opplæring for Selenium Automatisering

Hva er Sikuli i Selenium?

Sikuli er et åpen kildekode GUI-basert testautomatiseringsverktøy. Den brukes hovedsakelig til å samhandle med elementer på nettsider og håndtere vinduer baserte popup-vinduer. Sikuli bruker teknikken "Image Recognition" og "Control GUI" for å samhandle med elementer på nettsider og popup-vinduer i vinduer. I Sikuli er alle webelementene tatt som bilder og lagret inne i prosjektet.

⚠️ Navnemerknad: prosjektet vedlikeholdes i dag som SikuliX, publisert på Maven Central som com.sikulix:sikulixapiKlassenavnene nedenfor er uendret.

Hvordan bruke Sikuli med Selenium Webdriver

Sikuli kan integreres med Selenium WebDriver ved hjelp av Sikuli JAR-filen, i de to trinnene nedenfor.

Trinn 1) Last ned Sikuli JAR-filen nedenfor URL, og ekstracoverføre innholdet i ZIP-filen til en mappe.

https://mvnrepository.com/artifact/com.sikulix/sikulixapi/2.0.5

Trinn 2) Opprett et nytt JAVA-prosjekt i Eclipse og legg til JAR-filen i byggebanen, sammen med Selenium JAR-filer ved å høyreklikke på prosjektet -> Byggebane -> Konfigurer byggebane, som vist nedenfor.

Sikuli JAR-fil lagt til Java bygge sti i Eclipse Konfigurer byggebane

Når du har lagt til JAR-filen i prosjektets byggebane, kan klasser levert av Sikuli brukes. Et Maven-prosjekt kan deklarere den samme artefakten som en avhengighet i stedet.

Skjermklasse i Sikuli

Screen-klassen er basisklassen for alle metodene som tilbys av Sikuli. Screen-klassen inneholder forhåndsdefinerte metoder for alle vanlige operasjoner på skjermelementer, som klikk, dobbeltklikk, gi input til en tekstboks, holde musepekeren over skjermbildet osv. Nedenfor er en liste over vanlige metoder som tilbys av Screen-klassen.

Metode Tekniske beskrivelser syntax
Klikk Denne metoden brukes til å klikke på et element på skjermen med bildenavn som parameter.

Skjerm s = ny skjerm();

s.click(“QA.png”);

dobbeltklikk Denne metoden brukes til å dobbeltklikke på et element. Den godtar bildenavn som parameter.

Skjerm s = ny skjerm();

s.doubleClick(“QA.png”);

typen Denne metoden brukes til å gi inngangsverdi til et element. Den godtar bildenavnet og teksten som skal sendes som parametere.

s.type(“QA.png”,,”TEXT”);

Sveve Denne metoden brukes til å holde musepekeren over et element. Den godtar bildenavn som parameter.

s.hover(“QA.png”);

Finn Denne metoden brukes til å finne et spesifikt element på skjermen. Den godtar bildenavn som parameter.

s.find(“QA.png”);

Mønsterklasse i Sikuli

Der Screen reagerer på et vanlig bildenavn, brukes Pattern-klassen til å knytte bildefilen til tilleggsattributter for å identifisere elementet unikt. Den tar bildets sti som en parameter.

Pattern p = new Pattern(“Path of image”);

Følgende er de mest brukte metodene i Pattern-klassen.

Metode Tekniske beskrivelser syntax
getFileName Returnerer filnavnet i Pattern-objektet.

Mønster p = nytt mønster(“D:\Demo\QA.png”);

String filnavn = p.getFileName();

lignende Denne metoden returnerer et nytt Pattern-objekt med likhet satt til en spesifisert verdi. Den aksepterer likhetsverdien mellom 0 til 1 som en parameter. Sikuli ser etter alle elementer som faller innenfor det angitte likhetsområdet og returnerer et nytt mønsterobjekt.

Mønster p1 = p.similar(0.7f);

Nøyaktig Denne metoden returnerer et nytt mønsterobjekt med likhet satt til 1. Den ser bare etter en eksakt match av det angitte elementet.

Mønster p1 = p.exact();

Code Eksempel på filopplasting ved bruk av Sikuli

Koden nedenfor forklarer bruken av Sikuli for filopplasting 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

Trinn 1) Den første setningen innebærer å angi driverens kjørbare banen for chrome.

System.setProperty("webdriver.chrome.driver", "D:\\ chromedriver.exe");

⚠️ Versjonsmerknad: Selenium 4 løser driverbinærfilen gjennom Selenium Leder, så denne linjen er nå valgfri. Den beholdes slik kilden skrev den.

Trinn 2) Bruk et screengrab-verktøy som f.eks Snipping Tool for å ta skjermbilder av Windows-popup 'FileTextBox' og 'Åpne'-knappen, som vist nedenfor.

Snipping Tool utvalget over Windows Tekstboks for filinndata i opplastingspopup-vinduet

Slik skal skjermbildet ditt se ut:

Oppfanget filtekstBox og OpenButton-referansebilder brukt av Sikuli-skriptet

Bilder for tekstboks for Windows-filinntasting og åpne-knapp er lagret i 'FileTextBox.PNG' og 'OpenButton.PNG'.

Eksempel: Hvis du vil automatisere operasjonen for å åpne notisblokk, må du lagre bildet av et skrivebordsikon for notisblokk på en PNG-fil og utføre klikkoperasjon på den.

I vårt tilfelle gjenkjenner den tekstboksen for filinndata og Åpne-knappen på Windows popup ved hjelp av bildene som er lagret. Hvis skjermoppløsningen endres fra bildeopptak til utførelse av testskript, vil oppførselen til Sikuli være inkonsekvent. Derfor er det alltid tilrådelig å kjøre testskriptet med samme oppløsning som bildene blir tatt med. Endring i pikselstørrelse på bilder vil resultere i at Sikuli kaster et FindFailed-unntak.

Trinn 3) De neste setningene inkluderer opprettelsen av objekter for skjerm- og mønsterklasser. Opprett et nytt skjermobjekt. Angi banen til filen du vil laste opp som en parameter til Pattern-objektet.

Screen s = new Screen();
Pattern fileInputTextBox = new Pattern(filepath + "FileTextBox.PNG");
Pattern openButton = new Pattern(filepath + "OpenButton.PNG");

Trinn 4) Utsagnene nedenfor innebærer å åpne Chrome-nettleseren med URL av et demoprogram for filopplasting: https://demo.guru99.com/test/image_upload/index.php

driver = new ChromeDriver();
driver.get("https://demo.guru99.com/test/image_upload/index.php");

Trinn 5) Klikk på velg fil-knappen ved å bruke uttalelsen nedenfor

driver.findElement(By.xpath(".//*[@id='photoimg']")).click();

Trinn 6) Vent til vinduets popup vises. Ventemetoden brukes til å håndtere forsinkelsen forbundet med å åpne vinduer som dukker opp etter å ha klikket på bla-knappen.

s.wait(fileInputTextBox, 20);

Trinn 7) Skriv inn filbanen i inndatafilens tekstboks og klikk på Åpne-knappen

s.type(fileInputTextBox, inputFilePath + "Test.docx");
s.click(openButton);

Trinn 8) Lukk nettleseren

driver.close();

Produksjon

Til å begynne med åpner skriptet Chrome-nettleseren

Chrome-nettleseren ble åpnet på opplastingssiden for demofilen ved starten av kjøringen.

Klikker du på 'Velg fil'-knappen, vil popup-skjermen for Windows-fil vises. Legger inn data i filinndata-tekstboksen og klikker på "Åpne"-knappen

Windows fil-popup med filbanen skrevet inn i tekstboksen Filinndata

Skjermen nedenfor vises når filopplastingen er fullført og lukker nettleseren

Demoside som bekrefter at opplastingen er fullført rett før nettleseren lukkes

Fordi matching avhenger av piksler, må du gjenskape alle referansebilder når grensesnittet endres. Denne sårbarheten er grunnen til at team reserverer Sikuli for popup-vinduer. enkel WebDriver-filhåndtering kan ikke nå.

Spørsmål og svar

Referansebildet samsvarte ikke på skjermen. Vanlige årsaker er en annen oppløsning, et omskalert bilde, et omstilt tema, eller at elementet ikke er synlig ennå. Gjenskap med kjørbar oppløsning eller lavere likhet.

Selenium driver nettleserens DOM gjennom lokaliseringsverktøy. Sikuli driver skjermen gjennom skjermbilder, slik at den når frem til native dialoger som DOM-en aldri viser. De to brukes sammen.

Ja. Erklær com.sikulix:sikulixapi som en avhengighet og Maven henter det samme API-et, keeping versjonen i byggefilen i stedet for en Eclipse bygge sti.

Ja, SikuliX kjører på Windows, Linux og macOSReferansebilder er ikke overførbare mellom dem, fordi dekorasjoner og fonter er forskjellige, så hver plattform trenger sine egne opptak.

Maskinlæringsmatchere tolererer farge-, skala- og temaendringer som pikselsammenligning ikke kan, og kan finne en kontroll ved hjelp av etiketten. Det reduserer arbeidet med å gjenskape nødvendig etter en redesign.

GitHub Copilot utkast til skjerm- og mønsterkall og WebDriver-oppsettet rundt dem. Den kan ikke fange PNG-filene, så bekreft hver genererte bildebane.

Matching brytes når grensesnittet endres eller oppløsningen endres, kjører saktere enn DOM-automatisering og rapporterer feil mindre tydelig. Det passer for grensesnitt som endres sjelden.

Det opprinnelige Sikuli-forskningsprosjektet er ikke det, men dets etterfølger. SikuliX er og publiserer sikulixapi-artefakten som brukes her. Artikler som siterer JAR-filer med vanlig sikuli-skript beskriver den tidligere linjen.

Oppsummer dette innlegget med: