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ć.
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.
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.
Oto jak powinien wyglądać Twój zrzut ekranu:
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
Kliknij przycisk „Wybierz plik”, pojawi się okno dialogowe pliku Windows. Wprowadź dane do pola tekstowego „Wprowadź plik” i kliknij przycisk „Otwórz”
Poniższy ekran jest wyświetlany po zakończeniu przesyłania pliku i zamknięciu 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ć.






