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å.
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.
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.
Slik skal skjermbildet ditt se ut:
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
Klikker du på 'Velg fil'-knappen, vil popup-skjermen for Windows-fil vises. Legger inn data i filinndata-tekstboksen og klikker på "Åpne"-knappen
Skjermen nedenfor vises når filopplastingen er fullført og lukker nettleseren
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å.






