Sikuli Tutorial for Selenium Automatizálás

⚡ Okos összefoglaló

A Sikuli automatizálja a grafikus felületet azáltal, hogy a helymeghatározók helyett a tárolt képernyőképeket ismeri fel, ami lehetővé teszi a Selenium tesztvezetés Windows felugró ablakok, natív fájlpárbeszédablakok és Flash objektumok, amelyeket a WebDriver önmagában nem tud elérni.

  • 🔘 Alapötlet: Minden elem PNG formátumban tárolódik, és a Sikuli a képernyőn lévő pixelek egyeztetésével találja meg azokat.
  • ☑️ Beállítás: Adjuk hozzá a SikuliX API JAR a Java építs utat mellé Selenium JAR-ok.
  • Képernyő osztálya: Kattintás, dupla kattintás, gépelés, egérrel való pozicionálás és keresés funkciót kínál, mindegyikhez egy kép neve rendelődik.
  • 🧪 Minta osztály: Egy kép elérési útját körbefutja, és a similar() és exact() függvények segítségével hangolja az egyezést.
  • 🇧🇷 Működő példa: Egy Chrome teszt során a Fájl kiválasztása gombra kattint, majd a Sikuli beírja az elérési utat, és a Megnyitás gombra kattint.
  • 🇧🇷 Korlátozás: A felbontás vagy a pixelméret változása megszakítja az egyezést, és FindFailed hibát okoz.

Sikuli Tutorial for Selenium Automatizálás

Miben van Sikuli? Selenium?

Sikuli egy nyílt forráskódú grafikus felhasználói felület alapú tesztautomatizálási eszköz. Főleg weblapok elemeivel való interakcióra és ablak alapú felugró ablakok kezelésére használják. A Sikuli az „Image Recognition” és a „Control GUI” technikát használja a weboldalak elemeivel és az ablakok előugró ablakaival való interakcióhoz. A Sikuliban az összes webelem képként készül, és a projekten belül tárolódik.

⚠️ Elnevezési megjegyzés: a projektet ma is fenntartják SikuliX, a Maven Centralon jelent meg, mint com.sikulix:sikulixapiAz alábbi osztálynevek változatlanok.

Hogyan kell használni a Sikuli-t Selenium Webdriver

A Sikuli integrálható a következőkkel: Selenium WebDriver a Sikuli JAR fájl használatával, az alábbi két lépésben.

1. lépés) Letöltés a Sikuli JAR fájlt az alábbiak közül URL, és pltracMásold át a ZIP fájl tartalmát egy mappába.

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

Step 2) Hozzon létre egy új JAVA projektet Eclipse és add hozzá a JAR fájlt a build path-hez, valamint a szelén jar fájlokat a jobb gombbal a projektre kattintva -> Build Path -> Configure Build Path menüpontban, az alábbiak szerint.

Sikuli JAR fájl hozzáadva a Java útvonal építése Eclipse Építési útvonal konfigurálása

Miután hozzáadtad a JAR fájlt a projekt build path-jához, a Sikuli által biztosított osztályok használhatók. Egy Maven projekt ugyanezt az artefaktust deklarálhatja függőségként is.

Képernyőóra Sikuliban

A Screen osztály az alaposztály a Sikuli által biztosított összes metódushoz. A Screen osztály előre definiált metódusokat tartalmaz a képernyő elemein gyakran végrehajtott műveletekhez, mint például a kattintás, dupla kattintás, szövegdobozba való bemenet, egérmutató stb. Az alábbiakban a Screen osztály által biztosított gyakran használt metódusok listája látható.

Módszer Leírás Szintaxis
Kattints Ezzel a módszerrel egy elemre kattintanak a képernyőn, paraméterként a kép nevét használva.

Képernyő s = new Screen();

s.click("QA.png");

doubleClick Ezzel a módszerrel duplán kattintanak egy elemre. Paraméterként elfogadja a kép nevét.

Képernyő s = new Screen();

s.doubleClick("QA.png");

típus Ez a módszer arra szolgál, hogy bemeneti értéket adjon egy elemnek. Paraméterként elfogadja a kép nevét és a küldendő szöveget.

s.type("QA.png","SZÖVEG");

lebeg Ez a módszer arra szolgál, hogy az egérmutatót egy elem fölé vigye. Paraméterként elfogadja a kép nevét.

s.hover("QA.png");

Találjon Ez a módszer egy adott elem megkeresésére szolgál a képernyőn. Paraméterként elfogadja a kép nevét.

s.find("QA.png");

Mintaóra Sikuliban

Ahol a Screen egy egyszerű képnévre reagál, a Pattern osztály további attribútumokkal társítja a képfájlt az elem egyedi azonosítása érdekében. Paraméterként a kép elérési útját veszi igénybe.

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

Az alábbiak a Pattern osztály leggyakrabban használt metódusai.

Módszer Leírás Szintaxis
getFileName A Pattern objektumban található fájlnevet adja vissza.

Pattern p = new Pattern("D:\Demo\QA.png");

String fájlnév = p.getFileName();

hasonló Ez a módszer egy új Pattern objektumot ad vissza, amelynek hasonlósága egy megadott értékre van beállítva. Paraméterként elfogadja a 0 és 1 közötti hasonlósági értéket. A Sikuli megkeresi az összes olyan elemet, amely a megadott hasonlósági tartományba esik, és egy új mintaobjektumot ad vissza.

minta p1 = p.hasonló(0.7f);

Pontos Ez a metódus egy új mintaobjektumot ad vissza, amelynek hasonlósága 1-re van állítva. Csak a megadott elem pontos egyezését keresi.

Minta p1 = p.pontos();

Code Példa fájlfeltöltésre Sikuli használatával

Az alábbi kód a Sikuli használatát ismerteti fájlfeltöltéshez Chrome-ban.

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 Magyarázat

Step 1) Az első utasítás magában foglalja az illesztőprogram végrehajtható elérési útjának beállítását a chrome számára.

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

⚠️ Verzió megjegyzés: Selenium 4 feloldja a meghajtó bináris fájlját a következőn keresztül: Selenium Manager, így ez a sor mostantól opcionális. Úgy marad, ahogyan a forrás írta.

Step 2) Használjon képernyőfogó eszközt, mint pl Snipping Tool képernyőképek készítéséhez a Windows felugró 'FileTextBox„és a „Megnyitás” gombra, az alábbiak szerint.

Snipping Tool kiválasztás a Windows fájlbeviteli szövegmező a feltöltési felugró ablakban

Így kell kinéznie a képernyőképednek:

Rögzített fájlszövegBox és a Sikuli szkript által használt OpenButton referenciaképek

A Windows fájlbeviteli szövegmező és a megnyitás gomb képei a „FileText” mappában tárolódnakBox.PNG” és „OpenButton.PNG”.

Példa: Ha automatizálni szeretné a jegyzettömb megnyitásának műveletét, akkor el kell mentenie a jegyzettömb asztali ikonjának képét egy PNG-fájlba, és kattintásos műveletet kell végrehajtania rajta.

Esetünkben felismeri a fájlbeviteli szövegmezőt és a Megnyitás gombot a Windows felugró ablak a tárolt képek segítségével. Ha a képernyő felbontása képrögzítésről teszt szkript-végrehajtásra változik, a Sikuli viselkedése következetlen lenne. Ezért mindig tanácsos a tesztszkriptet ugyanazzal a felbontással futtatni, mint a képek rögzítése. A képek pixelméretének megváltoztatása azt eredményezi, hogy Sikuli FindFailed kivételt dob.

Step 3) A következő utasítások a Screen és Pattern osztályokhoz tartozó objektumok létrehozását tartalmazzák. Hozzon létre egy új képernyőobjektumot. Állítsa be a feltölteni kívánt fájl elérési útját paraméterként a Pattern objektumhoz.

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

Step 4) Az alábbi állítások a Chrome böngésző megnyitását jelentik a következővel: URL egy demó fájl feltöltési alkalmazásról: https://demo.guru99.com/test/image_upload/index.php

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

Step 5) Kattintson a fájl kiválasztása gombra az alábbi utasítás segítségével

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

Step 6) Várja meg, amíg megjelenik a felugró ablak. A Várakozás módszerrel kezeljük a Tallózás gombra kattintás után felugró ablakok megnyitásához kapcsolódó késleltetést.

s.wait(fileInputTextBox, 20);

Step 7) Írja be a fájl elérési útját a beviteli fájl szövegmezőjébe, és kattintson a Megnyitás gombra

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

Step 8) Zárja be a böngészőt

driver.close();

teljesítmény

Kezdetben a szkript megnyitja a Chrome böngészőt

A Chrome böngésző a futtatás elején megnyitotta a demófájl feltöltési oldalát

A „Fájl kiválasztása” gombra kattintva megjelenik a Windows fájl felugró ablaka. Beírja az adatokat a Fájlbevitel szövegmezőbe, és rákattint a „Megnyitás” gombra

Windows fájl felugró ablak, a fájl elérési útját beírva a Fájlbeviteli szövegmezőbe

Az alábbi képernyő jelenik meg, miután a fájl feltöltése befejeződött, és bezárja a böngészőt

Demóoldal, amely megerősíti a feltöltés befejezését közvetlenül a böngésző bezárása előtt

Mivel az illesztés a pixelektől függ, minden referenciaképet újra kell rögzíteni, amikor a felületet újratervezik. Ez a törékenység az oka annak, hogy a csapatok a Sikulit felugró ablakokhoz tartják fenn. egyszerű WebDriver fájlkezelés nem érheti el.

GYIK

A referenciakép nem egyezett a képernyőn. A leggyakoribb okok az eltérő felbontás, az átméretezett kép, az átformált téma vagy az elem még nem látható. Újrarögzítés futtatási felbontásban vagy alacsonyabb hasonlósággal.

Selenium A böngésző DOM-ját lokátorokon keresztül vezérli. A Sikuli képernyőképeken keresztül vezérli a képernyőt, így olyan natív párbeszédablakokat ér el, amelyeket a DOM soha nem mutat. A kettőt együtt használja.

Igen. Nyilatkozat com.sikulix:sikulixapi függőségként, és a Maven ugyanazt az API-t húzza le, keeping a build fájlban található verzió, nem pedig egy Eclipse építési útvonal.

Igen, SikuliX fut Windows, Linux és macOSA referenciaképek nem hordozhatók közöttük, mivel a dekorációk és a betűtípusok eltérőek, így minden platformnak saját rögzítésre van szüksége.

A gépi tanuláson alapuló illesztők olyan szín-, méretarány- és témabeli eltolódásokat tolerálnak, amelyeket a pixel-összehasonlítás nem tud, és a vezérlőket a címkéjük alapján tudják megtalálni. Ez csökkenti az újratervezés utáni újrakeresési munkát.

GitHub másodpilóta A Screen és Pattern hívásokat, valamint a hozzájuk tartozó WebDriver beállítást tervezi. Nem tudja rögzíteni a PNG fájlokat, ezért minden generált kép elérési útját ellenőriz.

Az illesztés megszakad, ha a felület stílusa megváltozik, vagy a felbontás változik, lassabban fut, mint a DOM automatizálás, és kevésbé egyértelműen jelzi a hibákat. Azokhoz a felületekhez illik, amelyek ritkán változnak.

Az eredeti Sikuli kutatási projekt nem az, de annak utódja SikuliX és közzéteszi az itt használt sikulixapi műterméket. Az egyszerű sikuli-írásos JAR fájlokat idéző ​​cikkek a korábbi sort írják le.

Foglald össze ezt a bejegyzést a következőképpen: