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.

  • 🔘 Osnovna ideja: Svaki element se pohranjuje kao PNG, a Sikuli ga pronalazi usklađivanjem piksela na ekranu.
  • ☑️ Postaviti: Dodaj SikuliX API JAR za Java izgraditi put pored Selenium JAR-ovi.
  • ✅ Klasa ekrana: Pruža klik, dvostruki klik, tipkanje, lebdenje mišem i pronalaženje, a svaki prihvaća naziv slike.
  • 🧪 Klasa uzorka: Omotava putanju slike i podešava podudaranje putem similar() i exact().
  • 🛠️ Obrađeni primjer: Chromeov test klikne na Odaberi datoteku, zatim Sikuli upiše putanju i klikne Otvori.
  • ️ Ograničenje: Promjena rezolucije ili veličine piksela prekida podudaranje i pokreće FindFailed.

Sikuli Tutorial za Selenium Automatizacija

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.

Sikuli JAR datoteka dodana u Java izgraditi put u Eclipse Konfiguriraj put izgradnje

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.

Snipping Tool odabir preko Windows tekstualni okvir za unos datoteke u skočnom prozoru za prijenos

Ovako bi trebala izgledati vaša snimka zaslona:

Snimljena datoteka s tekstomBox i referentne slike OpenButton koje koristi Sikuli skripta

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

Preglednik Chrome otvoren je na stranici za prijenos demo datoteke na početku izvođenja

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

Windows skočni prozor s putanjom datoteke unesenom u tekstni okvir za unos datoteke

Donji zaslon se prikazuje nakon što je učitavanje datoteke završeno i zatvara preglednik

Demo stranica koja potvrđuje da je prijenos dovršen neposredno prije zatvaranja preglednika

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.

Pitanja i odgovori

Referentna slika nije pronađena na zaslonu. Uobičajeni uzroci su različita rezolucija, promijenjena skala slike, restilizirana tema ili element koji još nije vidljiv. Ponovno snimite pri trenutnoj rezoluciji ili nižoj sličnosti.

Selenium usmjerava DOM preglednika putem lokatora. Sikuli usmjerava zaslon putem snimaka zaslona, ​​tako da dolazi do izvornih dijaloga koje DOM nikada ne izlaže. To dvoje se koristi zajedno.

Da. Izjavi com.sikulix:sikulixapi kao ovisnost i Maven povlači isti API, keeping verzija u datoteci za izradu, a ne Eclipse izgraditi put.

Da, SikuliX radi na Windows, Linux i macOSReferentne slike nisu prenosive između njih jer se ukrasi i fontovi razlikuju, pa svaka platforma treba vlastite snimke.

Strojno učenje za usklađivanje tolerira promjene boja, skala i tema koje usporedba piksela ne može, te može pronaći kontrolu prema njezinoj oznaci. To smanjuje rad potreban za ponovno snimanje nakon redizajna.

GitHub kopilot skice poziva Screen i Pattern te postavke WebDrivera oko njih. Ne može snimiti PNG datoteke, stoga provjerite svaku generiranu putanju slike.

Usklađivanje se prekida kada se sučelje restilizira ili promijeni rezolucija, radi sporije od DOM automatizacije i manje jasno izvještava o kvarovima. Odgovara sučeljima koja se rijetko mijenjaju.

Izvorni istraživački projekt Sikuli nije, ali njegov nasljednik SikuliX jest i objavljuje ovdje korišteni artefakt sikulixapi. Članci koji citiraju JAR-ove običnog sikuli scripta opisuju raniji redak.

Sažmite ovu objavu uz: