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: