Poradnik Sikuli dla Selenium Automatyzacja

⚡ Inteligentne podsumowanie

Sikuli automatyzuje interfejs graficzny, rozpoznając zapisane zrzuty ekranu zamiast lokalizatorów, co pozwala Selenium przetestuj jazdę próbną Windows wyskakujące okienka, okna dialogowe plików natywnych i obiekty Flash, do których sam WebDriver nie jest w stanie dotrzeć.

  • 🔘 Główna idea: Każdy element jest zapisywany jako plik PNG, a Sikuli odnajduje go poprzez dopasowywanie pikseli na ekranie.
  • Konfiguracja: Dodaj SikuliX API JAR do Java zbuduj ścieżkę obok Selenium Pliki JAR.
  • Klasa ekranu: Zapewnia kliknięcia, dwukrotne kliknięcia, wpisywanie, najechanie kursorem i znalezienie, przy czym każda z tych opcji przyjmuje nazwę obrazu.
  • 🧪 Klasa wzorca: Owija ścieżkę obrazu i dostraja dopasowanie za pomocą similar() i exact().
  • 🛠️. Przykład rozwiązania: W teście Chrome kliknij Wybierz plik, następnie Sikuli wpisuje ścieżkę i klika Otwórz.
  • ⚙️ Ograniczenie: Zmiana rozdzielczości lub rozmiaru piksela powoduje przerwanie dopasowywania i wywołuje błąd FindFailed.

Poradnik Sikuli dla Selenium Automatyzacja

W czym jest Sikuli Selenium?

Sikuli jest narzędziem do automatyzacji testów opartym na otwartym kodzie źródłowym GUI. Jest głównie używane do interakcji z elementami stron internetowych i obsługi okien pop-up. Sikuli wykorzystuje technikę „Image Recognition” i „Control GUI” do interakcji z elementami stron internetowych i okien pop-up. W Sikuli wszystkie elementy internetowe są traktowane jako obrazy i przechowywane w projekcie.

⚠️ Notatka dotycząca nazewnictwa: projekt jest utrzymywany do dziś jako SikuliX, opublikowano na Maven Central jako com.sikulix:sikulixapi. Nazwy klas poniżej pozostają niezmienione.

Jak używać Sikuli z Selenium Sterownik internetowy

Sikuli można zintegrować z Selenium WebDriver wykorzystujący plik JAR Sikuli w dwóch poniższych krokach.

Krok 1) Pobierz plik JAR Sikuli poniżej URLi nptracPrzenieś zawartość pliku ZIP do folderu.

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

Krok 2) Utwórz nowy projekt JAVA w Eclipse i dodaj plik JAR do ścieżki kompilacji, wraz z plikami jar Selenium, klikając prawym przyciskiem myszy na projekcie -> Ścieżka kompilacji -> Konfiguruj ścieżkę kompilacji, jak pokazano poniżej.

Dodano plik JAR Sikuli Java zbuduj ścieżkę w Eclipse Skonfiguruj ścieżkę kompilacji

Po dodaniu pliku JAR do ścieżki kompilacji projektu można korzystać z klas udostępnionych przez Sikuli. Projekt Maven może zadeklarować ten sam artefakt jako zależność.

Zajęcia ekranowe w Sikuli

Klasa Screen jest klasą bazową dla wszystkich metod udostępnianych przez Sikuli. Klasa Screen zawiera predefiniowane metody dla wszystkich typowych operacji wykonywanych na elementach ekranu, takich jak kliknięcie, dwukrotne kliknięcie, wprowadzanie danych do pola tekstowego, najechanie kursorem myszy itp. Poniżej znajduje się lista najczęściej używanych metod udostępnianych przez klasę Screen.

Metoda wykonania OPIS Składnia
Kliknij Ta metoda służy do kliknięcia elementu na ekranie przy użyciu nazwy obrazu jako parametru.

Ekran s = nowy ekran();

s.click(“QA.png”);

podwójne kliknięcie Ta metoda jest używana do dwukrotnego kliknięcia na elemencie. Akceptuje nazwę obrazu jako parametr.

Ekran s = nowy ekran();

s.doubleClick(“QA.png”);

Typ Ta metoda służy do podawania wartości wejściowej do elementu. Akceptuje nazwę obrazu i tekst do przesłania jako parametry.

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

Wahać się Ta metoda służy do najechania kursorem na element. Akceptuje nazwę obrazu jako parametr.

s.hover(“QA.png”);

Znajdź Metodą tą można znaleźć konkretny element na ekranie. Akceptuje nazwę obrazu jako parametr.

s.find(“QA.png”);

Zajęcia ze wzorami w Sikuli

Podczas gdy Screen działa na zwykłej nazwie obrazu, klasa Pattern służy do skojarzenia pliku obrazu z dodatkowymi atrybutami w celu jednoznacznej identyfikacji elementu. Jako parametr przyjmuje ścieżkę do obrazu.

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

Poniżej przedstawiono najczęściej używane metody klasy Pattern.

Metoda wykonania OPIS Składnia
pobierzNazwęPliku Zwraca nazwę pliku zawartą w obiekcie Pattern.

Wzorzec p = nowy Wzorzec(“D:\Demo\QA.png”);

String nazwa pliku = p.getFileName();

podobny Ta metoda zwraca nowy obiekt Pattern z podobieństwem ustawionym na określoną wartość. Jako parametr przyjmuje wartość podobieństwa od 0 do 1. Sikuli szuka wszystkich elementów mieszczących się w określonym zakresie podobieństwa i zwraca nowy obiekt wzorca.

Wzór p1 = p.podobny(0.7f);

Dokładny Ta metoda zwraca nowy obiekt wzorca z podobieństwem ustawionym na 1. Wyszukuje tylko dokładne dopasowanie określonego elementu.

Wzór p1 = p.exact();

Code Przykład przesyłania plików za pomocą Sikuli

Poniższy kod wyjaśnia, jak używać Sikuli do przesyłania plików w przeglądarce Chrome.

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 Wyjaśnienie

Krok 1) Pierwsza instrukcja dotyczy ustawienia ścieżki pliku wykonywalnego sterownika dla Chrome.

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

⚠️ Uwaga dotycząca wersji: Selenium 4 rozwiązuje plik binarny sterownika poprzez Selenium Menedżerze, więc ta linia jest teraz opcjonalna. Jest zachowana w takiej formie, w jakiej została napisana przez źródło.

Krok 2) Użyj narzędzia do zrzutu ekranu, takiego jak Snipping Tool aby wykonać zrzuty ekranu okna popup 'FileTextBox' i przycisk 'Otwórz', jak poniżej.

Snipping Tool wybór ponad Windows pole tekstowe wprowadzania pliku w oknie podręcznym przesyłania

Oto jak powinien wyglądać Twój zrzut ekranu:

Przechwycony plik tekstowyBox i obrazy referencyjne OpenButton używane przez skrypt Sikuli

Obrazy dla pola tekstowego wprowadzania pliku systemu Windows i przycisku otwierania są przechowywane w folderze „FileText”Box.PNG” i „OpenButton.PNG”.

Przykład: Jeśli chcesz zautomatyzować operację otwierania Notatnika, musisz zapisać obraz ikony Notatnika na pulpicie w pliku PNG i kliknąć go.

W naszym przypadku rozpoznaje pole tekstowe wprowadzania pliku i przycisk Otwórz na Windows popup używający zapisanych obrazów. Jeśli rozdzielczość ekranu zmienia się od przechwytywania obrazu do wykonywania skryptu testowego, zachowanie Sikuli byłoby niespójne. Dlatego zawsze zaleca się uruchamianie skryptu testowego w tej samej rozdzielczości, w której przechwytywane są obrazy. Zmiana rozmiaru pikseli obrazów spowoduje, że Sikuli zgłosi wyjątek FindFailed.

Krok 3) Kolejne instrukcje obejmują utworzenie obiektów dla klas Screen i Pattern. Utwórz nowy obiekt ekranowy. Ustaw ścieżkę pliku, który chcesz przesłać jako parametr do obiektu Pattern.

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

Krok 4) Poniższe oświadczenia dotyczą otwierania przeglądarki Chrome za pomocą URL aplikacji demonstracyjnej do przesyłania plików: 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) Kliknij przycisk wybierz plik, korzystając z poniższej instrukcji

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

Krok 6) Poczekaj na pojawienie się okna pop-up. Metoda wait jest używana do obsługi opóźnienia związanego z otwieraniem okien pop-up po kliknięciu przycisku przeglądania.

s.wait(fileInputTextBox, 20);

Krok 7) Wpisz ścieżkę pliku w polu tekstowym pliku wejściowego i kliknij przycisk Otwórz

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

Krok 8) Zamknij przeglądarkę

driver.close();

Wydajność

Początkowo skrypt otwiera przeglądarkę Chrome

Na początku uruchomienia przeglądarka Chrome otworzyła się na stronie przesyłania pliku demonstracyjnego

Kliknij przycisk „Wybierz plik”, pojawi się okno dialogowe pliku Windows. Wprowadź dane do pola tekstowego „Wprowadź plik” i kliknij przycisk „Otwórz”

Windows wyskakujące okienko z ścieżką do pliku wpisaną w polu tekstowym wprowadzania pliku

Poniższy ekran jest wyświetlany po zakończeniu przesyłania pliku i zamknięciu przeglądarki

Strona demonstracyjna potwierdzająca zakończenie przesyłania tuż przed zamknięciem przeglądarki

Ponieważ dopasowanie zależy od pikseli, przechwyć ponownie każdy obraz referencyjny za każdym razem, gdy zmieniasz styl interfejsu. Ta kruchość jest powodem, dla którego zespoły rezerwują Sikuli na potrzeby wyskakujących okienek. prosta obsługa plików WebDriver nie można dotrzeć.

FAQ

Obraz referencyjny nie został dopasowany na ekranie. Typowymi przyczynami są inna rozdzielczość, przeskalowany obraz, zmieniony motyw lub element, który nie jest jeszcze widoczny. Przechwyć ponownie w rozdzielczości roboczej lub przy niższym podobieństwie.

Selenium Steruje DOM przeglądarki za pomocą lokalizatorów. Sikuli steruje ekranem za pomocą zrzutów ekranu, dzięki czemu dociera do natywnych okien dialogowych, których DOM nigdy nie udostępnia. Oba te elementy są używane razem.

Tak. Zadeklaruj com.sikulix:sikulixapi jako zależność i Maven pobiera to samo API, keeping wersja w pliku kompilacji, a nie Eclipse ścieżka kompilacji.

Tak, SikuliX biegnie dalej Windows, Linux i macOSObrazów referencyjnych nie da się przenosić między platformami, ponieważ dekoracje i czcionki różnią się, więc każda platforma wymaga własnych przechwytów.

Mechanizmy dopasowujące uczenia maszynowego tolerują zmiany koloru, skali i motywu, których nie potrafi porównywać pikseli, i potrafią znaleźć kontrolkę po jej etykiecie. To zmniejsza konieczność ponownego przechwytywania danych po przeprojektowaniu.

Drugi pilot GitHub Wywołania ekranów i wzorów oraz konfiguracja WebDrivera wokół nich. Nie może przechwycić plików PNG, dlatego należy sprawdzić każdą ścieżkę do wygenerowanego obrazu.

Dopasowanie ulega awarii po zmianie stylu interfejsu lub rozdzielczości, działa wolniej niż automatyzacja DOM i mniej przejrzyście raportuje błędy. Jest to rozwiązanie odpowiednie dla interfejsów, które zmieniają się rzadko.

Oryginalny projekt badawczy Sikuli nie istnieje, ale jego następca SikuliX jest i publikuje artefakt sikulixapi użyty tutaj. Artykuły cytujące zwykłe pliki JAR sikuli-script opisują wcześniejszą linię.

Podsumuj ten post następująco: