Sikuli Tutorial za Selenium Automatizacija
⚡ Pametni sažetak
Sikuli automatizira grafičko sučelje prepoznavanjem pohranjenih snimaka zaslona umjesto lokatora, što omogućuje Selenium probna vožnja Windows skočne prozore, izvorne dijaloške okvire datoteka i Flash objekte do kojih sam WebDriver ne može doći.
U čemu je Sikuli Selenium?
Sikuli je alat za automatizaciju testiranja temeljen na GUI-ju otvorenog koda. Uglavnom se koristi za interakciju s elementima web stranica i rukovanje skočnim prozorima. Sikuli koristi tehniku "Image Recognition" i "Control GUI" za interakciju s elementima web stranica i skočnim prozorima. U Sikuliju se svi web elementi uzimaju kao slike i pohranjuju unutar projekta.
⚠️ Napomena o imenovanju: projekt se danas održava kao SikuliX, objavljeno na Maven Centralu kao com.sikulix:sikulixapiNazivi klasa u nastavku ostaju nepromijenjeni.
Kako koristiti Sikuli sa Selenium Webdriver
Sikuli se može integrirati s Selenium WebDriver pomoću Sikuli JAR datoteke, u dva koraka u nastavku.
Korak 1) Preuzimanje Sikuli JAR datoteka odozdo URLi bivšitracsadržaj ZIP datoteke u mapu.
https://mvnrepository.com/artifact/com.sikulix/sikulixapi/2.0.5
Korak 2) Napravite novi JAVA projekt u Eclipse i dodajte JAR datoteku u putanju izgradnje, zajedno sa selenium jar datotekama pomoću desnog klika na projekt -> Putanja izgradnje -> Konfiguriraj putanju izgradnje, kao što je prikazano dolje.
Nakon što ste dodali JAR datoteku u putanju izgradnje projekta, mogu se koristiti klase koje pruža Sikuli. Maven projekt može umjesto toga deklarirati isti artefakt kao ovisnost.
Razred ekrana u Sikulima
Klasa Screen je osnovna klasa za sve metode koje pruža Sikuli. Klasa Screen sadrži unaprijed definirane metode za sve uobičajene operacije na elementima zaslona kao što su klik, dvostruki klik, unos u tekstualni okvir, zadržavanje miša iznad polja itd. U nastavku je popis često korištenih metoda koje pruža klasa Screen.
| način | Description | Sintaksa |
|---|---|---|
| Kliknite | Ova se metoda koristi za klik na element na zaslonu koristeći naziv slike kao parametar. |
Zaslon s = novi Zaslon(); s.click(“QA.png”); |
| dvostruki klik | Ova se metoda koristi za dvostruki klik na element. Prihvaća naziv slike kao parametar. |
Zaslon s = novi Zaslon(); s.doubleClick(“QA.png”); |
| Tip | Ova se metoda koristi za pružanje ulazne vrijednosti elementu. Prihvaća naziv slike i tekst za slanje kao parametre. |
s.type(“QA.png”,”TEKST”); |
| Lebdjeti | Ova se metoda koristi za postavljanje pokazivača iznad elementa. Prihvaća naziv slike kao parametar. |
s.hover("QA.png"); |
| naći | Ova se metoda koristi za pronalaženje određenog elementa na zaslonu. Prihvaća naziv slike kao parametar. |
s.find("QA.png"); |
Razred uzora u Sikulima
Dok Screen djeluje na obični naziv slike, klasa Pattern se koristi za povezivanje slikovne datoteke s dodatnim atributima kako bi se jedinstveno identificirao element. Kao parametar uzima putanju slike.
Pattern p = new Pattern(“Path of image”);
Sljedeće su najčešće korištene metode klase Pattern.
| način | Description | Sintaksa |
|---|---|---|
| getFileName | Vraća naziv datoteke sadržan u objektu uzorka. |
Uzorak p = novi uzorak (“D:\Demo\QA.png”); String naziv datoteke = p.getFileName(); |
| sličan | Ova metoda vraća novi objekt Pattern sa sličnošću postavljenom na određenu vrijednost. Prihvaća vrijednost sličnosti između 0 i 1 kao parametar. Sikuli traži sve elemente koji spadaju unutar navedenog raspona sličnosti i vraća novi objekt uzorka. |
Uzorak p1 = p.similar(0.7f); |
| Točan | Ova metoda vraća novi objekt uzorka sa sličnošću postavljenom na 1. Traži samo točno podudaranje navedenog elementa. |
Uzorak p1 = p.exact(); |
Code Primjer prijenosa datoteke pomoću Sikulija
Donji kod objašnjava korištenje Sikulija za prijenos datoteka u Chromeu.
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 Objašnjenje
Korak 1) Prva izjava uključuje postavljanje putanje izvršnog upravljačkog programa za chrome.
System.setProperty("webdriver.chrome.driver", "D:\\ chromedriver.exe");
⚠️ Napomena o verziji: Selenium 4 rješava binarni fajl upravljačkog programa putem Selenium Manager, tako da je ovaj redak sada opcionalan. Čuva se onako kako ga je izvor napisao.
Korak 2) Koristite alat za snimanje zaslona kao što je Snipping Tool za snimanje zaslona skočnog prozora 'FileTextBox' i gumb 'Otvori', kao što je prikazano dolje.
Ovako bi trebala izgledati vaša snimka zaslona:
Slike za tekstualni okvir za unos Windows datoteke i gumb za otvaranje pohranjuju se na 'FileTextBox.PNG' i 'OpenButton.PNG'.
Primjer: Ako želite automatizirati operaciju otvaranja bilježnice, trebate pohraniti sliku ikone radne površine za bilježnicu u PNG datoteku i izvršiti radnju klika na njoj.
U našem slučaju, prepoznaje tekstualni okvir za unos datoteke i gumb Otvori na Windows skočni prozor pomoću pohranjenih slika. Ako se razlučivost zaslona mijenja od snimanja slike do izvođenja testne skripte, ponašanje Sikulija bilo bi nedosljedno. Stoga je uvijek preporučljivo pokrenuti testnu skriptu na istoj razlučivosti u kojoj su slike snimljene. Promjena u veličini piksela slika rezultirat će time da Sikuli izbaci iznimku FindFailed.
Korak 3) Sljedeće izjave uključuju stvaranje objekata za klase Screen i Pattern. Stvorite novi zaslonski objekt. Postavite putanju datoteke koju želite prenijeti kao parametar objektu Pattern.
Screen s = new Screen(); Pattern fileInputTextBox = new Pattern(filepath + "FileTextBox.PNG"); Pattern openButton = new Pattern(filepath + "OpenButton.PNG");
Korak 4) Donje izjave uključuju otvaranje preglednika Chrome s URL aplikacije za prijenos demo datoteka: https://demo.guru99.com/test/image_upload/index.php
driver = new ChromeDriver(); driver.get("https://demo.guru99.com/test/image_upload/index.php");
Korak 5) Pritisnite gumb za odabir datoteke koristeći donju izjavu
driver.findElement(By.xpath(".//*[@id='photoimg']")).click();
Korak 6) Pričekajte da se pojavi prozorski prozor. Metoda čekanja koristi se za rješavanje odgode povezane s otvaranjem iskačućih prozora nakon klika na gumb za pregledavanje.
s.wait(fileInputTextBox, 20);
Korak 7) Upišite put datoteke u tekstni okvir ulazne datoteke i kliknite gumb Otvori
s.type(fileInputTextBox, inputFilePath + "Test.docx");
s.click(openButton);
Korak 8) Zatvorite preglednik
driver.close();
Izlaz
U početku skripta otvara chrome preglednik
Klikom na gumb 'Odaberi datoteku' pojavit će se skočni prozor za Windows datoteku. Unosi podatke u tekstualni okvir za unos datoteke i klikne na gumb "Otvori".
Donji zaslon se prikazuje nakon što je učitavanje datoteke završeno i zatvara preglednik
Budući da podudaranje ovisi o pikselima, ponovno snimite svaku referentnu sliku kad god se sučelje restilizira. Ta krhkost je razlog zašto timovi rezerviraju Sikuli za skočne prozore. jednostavno rukovanje datotekama WebDrivera ne može dosegnuti.






