Návod na Sikuli pro Selenium Automatizace

⚡ Chytré shrnutí

Sikuli automatizuje grafické rozhraní rozpoznáváním uložených snímků obrazovky namísto lokátorů, což umožňuje... Selenium zkušební jízda Windows vyskakovací okna, nativní dialogová okna souborů a objekty Flash, ke kterým se WebDriver sám nedostane.

  • 🔘 Základní myšlenka: Každý prvek je uložen jako PNG a Sikuli ho vyhledává porovnáváním pixelů na obrazovce.
  • ☑️ Setup: Přidat SikuliX JAR API do Java postavit cestu vedle Selenium JAR soubory.
  • (Tj. Třída obrazovky: Nabízí kliknutí, dvojité kliknutí, psaní, vložení myší a nalezení, přičemž každé z nich přijímá název obrázku.
  • 🧪 Třída vzoru: Zabalí cestu k obrázku a vyladí shodu pomocí funkcí similar() a exact().
  • 🛠️ Zpracovaný příklad: Test Chrome klikne na Vybrat soubor, poté Sikuli zadá cestu a klikne na Otevřít.
  • ⚙️ Omezení: Změna rozlišení nebo velikosti pixelů přeruší porovnávání a vyvolá chybu FindFailed.

Návod na Sikuli pro Selenium Automatizace

V čem je Sikuli Selenium?

Sikuli je open-source nástroj pro automatizaci testování založený na GUI. Používá se hlavně pro interakci s prvky webových stránek a manipulaci s vyskakovacími okny. Sikuli používá techniku ​​„Rozpoznávání obrázků“ a „Ovládací GUI“ k interakci s prvky webových stránek a vyskakovacích oken. V Sikuli jsou všechny prvky webu převzaty jako obrázky a uloženy v projektu.

⚠️ Poznámka k názvu: projekt je dodnes udržován jako SikuliX, publikováno na Maven Central jako com.sikulix:sikulixapiNíže uvedené názvy tříd zůstávají nezměněny.

Jak používat Sikuli s Selenium Webdriver

Sikuli lze integrovat s Selenium WebDriver pomocí souboru Sikuli JAR ve dvou níže uvedených krocích.

Krok 1) Stáhnout soubor Sikuli JAR z níže uvedeného URLa extracobsah ZIP souboru do složky.

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

Krok 2) Vytvořte nový JAVA projekt v Eclipse a přidejte soubor JAR do cesty sestavení spolu se soubory JAR Selenium pomocí kliknutí pravým tlačítkem myši na projekt -> Cesta sestavení -> Konfigurovat cestu sestavení, jak je znázorněno níže.

Soubor Sikuli JAR byl přidán do Java vybudovat cestu v Eclipse Konfigurace cesty sestavení

Jakmile přidáte soubor JAR do cesty sestavení projektu, můžete použít třídy poskytované Sikuli. Projekt Maven může místo toho deklarovat stejný artefakt jako závislost.

Třída obrazovky v Sikuli

Třída Screen je základní třídou pro všechny metody poskytované Sikuli. Třída Screen obsahuje předdefinované metody pro všechny běžně prováděné operace s prvky obrazovky, jako je kliknutí, dvojité kliknutí, zadávání vstupu do textového pole, najetí myší atd. Níže je uveden seznam běžně používaných metod poskytovaných třídou Screen.

Metoda Description Syntax
klikněte Tato metoda se používá ke kliknutí na prvek na obrazovce s použitím názvu obrázku jako parametru.

Screen s = new Screen();

s.click(“QA.png”);

dvojitým kliknutím Tato metoda se používá k dvojitému kliknutí na prvek. Jako parametr přijímá název obrázku.

Screen s = new Screen();

s.doubleClick(“QA.png”);

Typ Tato metoda se používá k poskytnutí vstupní hodnoty prvku. Jako parametry přijímá název obrázku a text k odeslání.

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

Vznášet se Tato metoda se používá k najetí myší na prvek. Jako parametr přijímá název obrázku.

s.hover(“QA.png”);

Najít Tato metoda se používá k vyhledání konkrétního prvku na obrazovce. Jako parametr přijímá název obrázku.

s.find(“QA.png”);

Třída vzorů v Sikuli

Zatímco třída Screen pracuje s názvem prostého obrázku, třída Pattern se používá k přiřazení souboru obrázku k dalším atributům pro jednoznačnou identifikaci prvku. Jako parametr bere cestu k obrázku.

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

Níže jsou uvedeny nejběžněji používané metody třídy Pattern.

Metoda Description Syntax
getFileName Vrátí název souboru obsažený v objektu Pattern.

Vzor p = nový vzor(“D:\Demo\QA.png”);

String filename = p.getFileName();

podobný Tato metoda vrací nový objekt Pattern s podobností nastavenou na zadanou hodnotu. Jako parametr přijímá hodnotu podobnosti mezi 0 až 1. Sikuli vyhledá všechny prvky, které spadají do zadaného rozsahu podobnosti, a vrátí nový objekt vzoru.

Vzor p1 = p.similar(0.7f);

Přesný Tato metoda vrací nový objekt vzoru s podobností nastavenou na 1. Hledá pouze přesnou shodu zadaného prvku.

Vzor p1 = p.exact();

Code Příklad nahrání souboru pomocí Sikuli

Níže uvedený kód vysvětluje použití Sikuli pro nahrávání souborů v Chromu.

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 Vysvětlení

Krok 1) První příkaz zahrnuje nastavení cesty ke spustitelnému ovladači pro chrome.

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

⚠️ Poznámka k verzi: Selenium 4 řeší binární soubor ovladače pomocí Selenium Manager, takže tento řádek je nyní volitelný. Zůstane zachován tak, jak jej napsal zdroj.

Krok 2) Použijte screengrab nástroj jako např Snipping Tool pořídit snímky obrazovky vyskakovacího okna „FileTextBox' a tlačítko 'Otevřít', jak je uvedeno níže.

Snipping Tool výběr nad Windows textové pole pro zadání souboru ve vyskakovacím okně pro nahrávání

Takto by měl váš snímek obrazovky vypadat:

Zachycený text souboruBox a referenční obrázky OpenButton používané skriptem Sikuli

Obrázky pro textové pole pro zadávání souborů systému Windows a tlačítko Otevřít jsou uloženy v 'FileTextBox.PNG' a 'OpenButton.PNG'.

Příklad: Pokud chcete automatizovat operaci otevírání poznámkového bloku, musíte uložit obrázek ikony poznámkového bloku na ploše do souboru PNG a provést na něj klikání.

V našem případě rozpozná textové pole pro zadání souboru a tlačítko Otevřít na Windows vyskakovací okno pomocí uložených obrázků. Pokud se rozlišení obrazovky změní od snímání obrazu k provedení testovacího skriptu, chování Sikuli by bylo nekonzistentní. Proto je vždy vhodné spouštět testovací skript ve stejném rozlišení, ve kterém jsou snímky pořizovány. Změna velikosti obrázků v pixelech způsobí, že Sikuli vyvolá výjimku FindFailed.

Krok 3) Další příkazy zahrnují vytvoření objektů pro třídy Screen a Pattern. Vytvořte nový objekt obrazovky. Nastavte cestu k souboru, který chcete nahrát, jako parametr do objektu Vzor.

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

Krok 4) Níže uvedené příkazy zahrnují otevření prohlížeče Chrome pomocí URL aplikace pro nahrávání demo souborů: https://demo.guru99.com/test/image_upload/index.php

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

Krok 5) Klikněte na tlačítko vybrat soubor pomocí níže uvedeného příkazu

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

Krok 6) Počkejte, až se objeví vyskakovací okno. Metoda čekání se používá ke zpracování zpoždění spojeného s otevřením okna, které se objeví po kliknutí na tlačítko procházet.

s.wait(fileInputTextBox, 20);

Krok 7) Zadejte cestu k souboru do textového pole vstupního souboru a klikněte na tlačítko Otevřít

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

Krok 8) Zavřete prohlížeč

driver.close();

Výstup

Zpočátku skript otevře prohlížeč Chrome

Prohlížeč Chrome se na začátku běhu otevřel na stránce pro nahrání demo souboru.

Kliknutím na tlačítko „Vybrat soubor“ se zobrazí vyskakovací okno se souborem systému Windows. Zadá data do textového pole File Input a klikne na tlačítko 'Otevřít'

Windows vyskakovací okno se souborem, kde je cesta k souboru zadána do textového pole pro zadání souboru

Po dokončení nahrávání souboru a zavření prohlížeče se zobrazí obrazovka níže

Ukázková stránka potvrzující dokončení nahrávání těsně před zavřením prohlížeče

Protože porovnávání závisí na pixelech, je třeba znovu zachytit každý referenční obrázek při každé změně stylu rozhraní. Tato křehkost je důvodem, proč týmy vyhrazují Sikuli pro vyskakovací okna. jednoduchá manipulace se soubory WebDriver nemůže dosáhnout.

Nejčastější dotazy

Referenční obrázek se na obrazovce neshodoval. Obvyklými příčinami jsou odlišné rozlišení, změněné měřítko obrázku, upravený motiv nebo prvek, který ještě není viditelný. Znovu zachyťte obrázek s rozlišením běhu nebo nižší podobností.

Selenium Řídí DOM prohlížeče pomocí lokátorů. Sikuli prochází obrazovku pomocí snímků obrazovky, takže se dostane k nativním dialogům, které DOM nikdy nezobrazuje. Tyto dva prvky se používají společně.

Ano. Prohlásit com.sikulix:sikulixapi jako závislost a Maven používá stejné API, keeping verze v souboru sestavení, nikoli Eclipse vybudovat cestu.

Ano, SikuliX běží na Windows, Linux a macOSReferenční obrázky mezi nimi nejsou přenositelné, protože se liší dekorace a fonty, takže každá platforma potřebuje své vlastní snímky.

Strojové učení toleruje změny barev, měřítka a tématu, které porovnávání pixelů nedokáže, a dokáže najít ovládací prvek podle jeho označení. To snižuje úsilí potřebné k opětovnému zachycení po redesignu.

GitHub Copilot volání metod Screen a Pattern a nastavení WebDriveru kolem nich. Nedokáže zachytit soubory PNG, proto je nutné ověřit každou vygenerovanou cestu k obrázku.

Párování se přeruší při změně stylu rozhraní nebo rozlišení, běží pomaleji než automatizace DOM a méně jasně hlásí chyby. Hodí se pro rozhraní, která se mění jen zřídka.

Původní výzkumný projekt Sikuli není, ale jeho nástupce SikuliX je a publikuje zde použitý artefakt sikulixapi. Články citující JAR soubory v prostém sikuli-scriptu popisují dřívější řádek.

Shrňte tento příspěvek takto: