TestNG Słuchacze w Selenium

⚡ Inteligentne podsumowanie

Słuchacze w Selenium WebDriver to TestNG Interfejsy przechwytujące zdarzenia testowe w celu dostosowania dzienników, raportów i działań po awarii. W tym artykule wyjaśniono metody ITestListener i opisano działanie obiektu uruchomieniowego. Java przykład i wyjaśnia, jak Selenium Wersja 4 zastąpiła przestarzałą wersję WebDriverEventListener.

  • Co robią słuchacze: Subskrybują TestNG zdarzenia takie jak start, zaliczenie, niepowodzenie i pominięcie służą do rejestrowania zdarzeń lub raportowania.
  • 🧩 Dwanaście interfejsów: TestNG dostarcza interfejsy takie jak ITestListener, ISuiteListener, IReporter, IInvokedMethodListener i IAnnotationTransformer umożliwiające szczegółową kontrolę.
  • 🛠️. Dwa tryby okablowania: Dołącz obiekt nasłuchujący za pomocą adnotacji @Listeners do pojedynczej klasy lub zarejestruj go jednorazowo w pliku testng.xml dla każdego pakietu.
  • 🚀 Selenium 4 Aktualizacja: EventFiringWebDriver jest przestarzały; nowoczesny interfejs WebDriverListener plus EventFiringDecorator obsługuje teraz haki zdarzeń na poziomie WebDriver.
  • 🤖 Kąt AI: Słuchacze wspomagani przez sztuczną inteligencję mogą automatycznie klasyfikować awarie, dołączać inteligentne zrzuty ekranu i przesyłać w czasie rzeczywistym sygnały dotyczące niestabilnych testów do paneli CI.

TestNG Słuchacze w Selenium

Selenium Skrypty WebDriver często muszą reagować na zdarzenia testowe, takie jak pomyślna asercja, błędny lokalizator lub pominięty krok. Nasłuchiwacze to umożliwiają. Ogólnie rzecz biorąc, Selenium projekty opierają się na dwóch rodzinach słuchaczy:

  1. Słuchacze WebDrivera
  2. TestNG Słuchacze

W tym samouczku skupimy się na TestNG Słuchacze z uwagą na temat zmian, jakie zaszły w przypadku słuchaczy na poziomie WebDriver Selenium 4.x.

Czym jest słuchacz w TestNG?

Nasłuchiwacz to interfejs, który modyfikuje domyślne zachowanie TestNGJak sama nazwa wskazuje, słuchacze „nasłuchują” zdarzeń zdefiniowanych w Selenium Skrypt i odpowiednio zareaguj. Używasz ich, implementując odpowiedni interfejs Listener i rejestrując go w swojej klasie testowej lub zestawie. Listener pozwala na dostosowanie TestNG raporty, dołączaj zrzuty ekranu i generuj uporządkowane dzienniki.

Rodzaje słuchaczy w TestNG

TestNG dostarcza rodzinę interfejsów nasłuchujących, a każdy z nich jest przeznaczony dla innego etapu cyklu życia testów.

Poniżej znajdują się powszechnie używane TestNG słuchacze:

  1. IAdnotacja Transformator
  2. IAdnotacja Transformator2
  3. IKonfigurowalny
  4. IConfigurationListener
  5. IExecutionLister
  6. I do gotowania
  7. IInvokedMethodListener
  8. IInvokedMethodListener2
  9. ImethodInterceptor
  10. IReporter
  11. ISuiteListener
  12. Odbiornik ITtestów

Te interfejsy są używane w Selenium aby generować dzienniki lub dostosowywać TestNG raporty. W tym samouczku wdrożymy Odbiornik ITtestów.

Odbiornik ITtestów udostępnia następujące metody:

  • onStart – wywoływane przy rozpoczęciu dowolnego testu.
  • onTestSuccess – wywoływane, gdy test zakończy się pomyślnie.
  • onTestFailure – wywoływane, gdy test się nie powiedzie.
  • onTestSkipped – wywoływane, gdy test zostanie pominięty.
  • onTestFailedButWithinSuccessPercentage – wywoływane, gdy test się nie powiedzie, ale mieści się w procentach powodzenia.
  • onFinish – wywoływane po wykonaniu wszystkich testów w klasie.

Scenariusz testowy

W tym scenariuszu testowym zautomatyzujemy proces logowania i wdrożymy Odbiornik ITtestów przeciwko temu.

  1. Premiera Firefox i otwórz witrynę https://demo.guru99.com/V4/

Logowanie do scenariusza testowego URL

  1. Zaloguj się do aplikacji.

Formularz logowania do scenariusza testowego

Kroki tworzenia TestNG Słuchacz

W powyższym scenariuszu testowym wdrożymy Listener krok po kroku.

Krok 1) Utwórz klasę o nazwie Test słuchacza który realizuje Odbiornik ITtestów. Najedź kursorem na czerwone podkreślenie i Eclipse zaproponuje dwa szybkie rozwiązania, jak pokazano poniżej:

Eclipse szybka poprawka do dodawania niezaimplementowanych metod

Kliknij „Dodaj niezaimplementowane metody”. Do kodu zostanie dodanych wiele metod szczątkowych (bez treści), podobnie jak tutaj:

pakiet Słuchacz_Demo;

importować org.testng.ITestContext;
importować org.testng.ITestListener;
importować org.testng.ITestResult;

Klasa publiczna Test słuchacza narzędzia Odbiornik ITtestów {

@Nadpisanie
publiczna nieważność onFinish(Kontekst testowy arg0) {
// TODO Automatycznie wygenerowany szczątkowy element metody
}

@Nadpisanie
publiczna nieważność onStart(Kontekst testowy arg0) {
// TODO Automatycznie wygenerowany szczątkowy element metody
}

@Nadpisanie
publiczna nieważność onTestFailedButWithinSuccessPercentage(Wynik testu ITestResult arg0) {
// TODO Automatycznie wygenerowany szczątkowy element metody
}

@Nadpisanie
publiczna nieważność onTestFailure(Wynik testu ITestResult arg0) {
// TODO Automatycznie wygenerowany szczątkowy element metody
}

@Nadpisanie
publiczna nieważność onTestSkipped(Wynik testu ITestResult arg0) {
// TODO Automatycznie wygenerowany szczątkowy element metody
}

@Nadpisanie
publiczna nieważność onTestStart(Wynik testu ITestResult arg0) {
// TODO Automatycznie wygenerowany szczątkowy element metody
}

@Nadpisanie
publiczna nieważność onTestSuccess(Wynik testu ITestResult arg0) {
// TODO Automatycznie wygenerowany szczątkowy element metody
}
}

Teraz zmodyfikujmy Test słuchacza klasa. W szczególności wypełnimy następujące metody: onTestFailure, onTestSkipped, onTestStart, onTestSuccess.

Zmiana jest prosta: każda metoda wyświetla nazwę testu, dzięki czemu konsola wyraźnie pokazuje status testu (zaliczony, niezaliczony lub pominięty).

Po modyfikacji kod wygląda następująco:

pakiet Słuchacz_Demo;

importować org.testng.ITestContext;
importować org.testng.ITestListener;
importować org.testng.ITestResult;

Klasa publiczna Test słuchacza narzędzia Odbiornik ITtestów {

@Nadpisanie
publiczna nieważność onFinish(Kontekst testowy Wynik) {
}

@Nadpisanie
publiczna nieważność onStart(Kontekst testowy Wynik) {
}

@Nadpisanie
publiczna nieważność onTestFailedButWithinSuccessPercentage(Wynik testu ITestResult Wynik) {
}

// Ta metoda jest wywoływana, gdy przypadek testowy zakończy się niepowodzeniem.
@Nadpisanie
publiczna nieważność onTestFailure(Wynik testu ITestResult Wynik) {
System.out.println(„Nazwa nieudanego przypadku testowego to:” + Wynik.getName());
}

// Ta metoda jest wywoływana, gdy przypadek testowy zostanie pominięty.
@Nadpisanie
publiczna nieważność onTestSkipped(Wynik testu ITestResult Wynik) {
System.out.println(„Nazwa pominiętego przypadku testowego to:” + Wynik.getName());
}

// Ta metoda jest wywoływana, gdy rozpoczyna się przypadek testowy.
@Nadpisanie
publiczna nieważność onTestStart(Wynik testu ITestResult Wynik) {
System.out.println(Result.getName() + „rozpoczęto przypadek testowy”);
}

// Ta metoda jest wywoływana, gdy przypadek testowy zostanie zaliczony.
@Nadpisanie
publiczna nieważność onTestSuccess(Wynik testu ITestResult Wynik) {
System.out.println(„Nazwa zaliczonego przypadku testowego to:” + Wynik.getName());
}
}

Krok 2) Utwórz inną klasę o nazwie Przypadki testowe do automatyzacji logowania. Selenium wykona tę klasę, aby zalogować się do witryny demonstracyjnej.

pakiet Słuchacz_Demo;

importować org.openqa.selenium.By;
importować org.openqa.selenium.WebDriver;
importować org.openqa.selenium.firefox.FirefoxKierowcy;
importować org.testng.Assert;
importować org.testng.annotations.Nasłuchiwacze;
importować org.testng.adnotacje.Test;

Klasa publiczna Przypadki testowe {
Sterownik sieciowy kierowca = nowych FirefoxKierowca();

// Test zaprojektowany tak, aby zaliczyć, w celu weryfikacji powodzenia nasłuchiwania.
@Test
publiczna nieważność Zaloguj() {
sterownik.get(„https://demo.guru99.com/V4/”);
driver.findElement(By.name(„płyn”)).wyślijKlucze(„mngr34926”);
driver.findElement(By.name("Hasło")).wyślijKlucze(„amUpenu”);
driver.findElement(By.name(„btnLogin”)).trzask();
}

// Wymuszone niepowodzenie testu w celu weryfikacji nasłuchiwacza błędów.
@Test
publiczna nieważność TestToFail() {
System.out.println(„Ta metoda testowania zawodzi”);
Assert.assertTrue(fałszywy);
}
}

Krok 3) Następnie dołącz tego słuchacza do naszej klasy testowej Przypadki testoweIstnieją dwa sposoby połączenia klasy z interfejsem nasłuchującym.

Pierwszym sposobem jest użycie @Słuchacze adnotacja, jak pokazano poniżej:

@Listeners(Listener_Demo.ListenerTest.class)

Dodajemy tę adnotację powyżej Przypadki testowe Klasa. Klasa wygląda wtedy tak:

pakiet Słuchacz_Demo;

importować org.openqa.selenium.By;
importować org.openqa.selenium.WebDriver;
importować org.openqa.selenium.firefox.FirefoxKierowcy;
importować org.testng.Assert;
importować org.testng.annotations.Nasłuchiwacze;
importować org.testng.adnotacje.Test;

@Listeners(Listener_Demo.ListenerTest.class)
Klasa publiczna Przypadki testowe {
Sterownik sieciowy kierowca = nowych FirefoxKierowca();

// Test sprawdzający zaliczenie, w celu weryfikacji powodzenia nasłuchiwania.
@Test
publiczna nieważność Zaloguj() {
sterownik.get(„https://demo.guru99.com/V4/”);
driver.findElement(By.name(„płyn”)).wyślijKlucze(„mngr34926”);
driver.findElement(By.name("Hasło")).wyślijKlucze(„amUpenu”);
driver.findElement(By.name(„btnLogin”)).trzask();
}

// Wymuszone niepowodzenie testu w celu weryfikacji nasłuchiwacza błędów.
@Test
publiczna nieważność TestToFail() {
System.out.println(„Ta metoda testowania zawodzi”);
Assert.assertTrue(fałszywy);
}
}

Struktura projektu wygląda następująco:

TestNG Struktura projektu słuchacza

Krok 4) Wykonaj Przypadki testowe Klasa. Metody wewnątrz Test słuchacza są wywoływane automatycznie na podstawie zachowania metod oznaczonych adnotacją @Test.

Krok 5) Sprawdź dane wyjściowe wyświetlone w konsoli.

Moc wyjściowa Przypadki testowe wygląda jak:

TestNG Wyjście konsoli nasłuchującej

[TestNG] Działanie:
C:\Użytkownicy\gauravn\AppData\Local\Temp\testng-eclipse–1058076918\testng-customsuite.xml

Rozpoczęto przypadek testowy logowania
Nazwa zaliczonego przypadku testowego to: Login
Rozpoczęto przypadek testowy TestToFail
Ta metoda testowania nie działa
Nazwa nieudanego przypadku testowego to: TestToFail
ZATWIERDZONO: Zaloguj się
NIEPOWODZENIE: TestToFail
java.lang.AssertionError: oczekiwano [prawda], ale znaleziono [fałsz]

Korzystanie z obiektu nasłuchującego dla wielu klas

Jeżeli projekt ma wiele klas testowych, dodanie @Słuchacze adnotacje do każdego z nich stają się uciążliwe i podatne na błędy.

W takim przypadku utwórz testng.xml plik i zarejestruj tam słuchacza tylko raz.

znacznik słuchaczy testng.xml dla wielu klas

Ten nasłuchiwacz jest następnie stosowany w całym zestawie testów, niezależnie od liczby klas. Po uruchomieniu pliku XML nasłuchiwacz jest uruchamiany dla każdej klasy zadeklarowanej w zestawie, a w ramach tego samego znacznika można połączyć dowolną liczbę klas nasłuchiwaczy.

WebDriverListener w Selenium 4 kontra przestarzały EventFiringWebDriver

Kompletujemy wszystkie dokumenty (wymagana jest kopia paszportu i XNUMX zdjęcia) potrzebne do TestNG Słuchacze reagują na zdarzenia cyklu życia testu, słuchacze WebDriver reagują na działania sterownika przeglądarki, takie jak kliknięcie, nawigacja lub wywołanie findElement. Selenium 3 typowe podejście było takie, Nasłuchiwacz zdarzeń WebDriver interfejs podłączony przewodowo EventFiringWebDriver. Oba są przestarzałe w Selenium 4.x.

Nowoczesną alternatywą jest WebDriverListener interfejs połączony z Dekorator zdarzeń:

importować org.openqa.selenium.WebDriver;
importować org.openqa.selenium.chrome.ChromeDriver;
importować org.openqa.selenium.support.events.EventFiringDecorator;
importować org.openqa.selenium.support.events.WebDriverListener;

Klasa publiczna LoggingListener narzędzia WebDriverListener {
@Nadpisanie
publiczna nieważność przedPobraniem(Sterownik sieciowy sterownik, ciąg url) {
System.out.println(„Nawigacja do” + url);
}
}

Sterownik sieciowy surowy = nowych Sterownik Chrome();
Sterownik sieciowy kierowca = nowych Dekorator zdarzeń<>(nowych LoggingListener()).decorate(raw);

Dekorator może opakować dowolny WebDriver, WebElement lub Alert, co jest bardziej elastyczne niż stary wrapper wyzwalający zdarzenia. Użyj WebDriverListener dla obserwowalności po stronie przeglądarki i TestNG Odbiornik ITtestów do raportowania na poziomie pakietu.

Słuchacze wspomagani przez sztuczną inteligencję: inteligentniejsze rejestry i selekcja awarii

Nowoczesne technologie Selenium Zespoły coraz częściej podłączają usługi AI do swoich odbiorników, aby sygnały CI były bardziej użyteczne. onTestFailure, nasłuchiwacz wspomagany przez sztuczną inteligencję może uchwycić migawkę DOM i zrzut ekranu, wysłać je do modelu, który zwraca prawdopodobny klaster przyczyny źródłowej i zapisać tag z powrotem do TestNG raportu lub narzędzia takiego jak ReportPortal.

Typowe wzorce napędzane przez sztuczną inteligencję obejmują:

  • Wykrywanie niestabilnych testów: Słuchacze przekazują osie czasu zaliczenia/niezaliczenia do modelu, który klasyfikuje awarię jako niestabilną, związaną ze środowiskiem lub rzeczywistą regresją.
  • Inteligentne zrzuty ekranu: Modele komputerowego widzenia przycinają, opisują i różnicują zrzuty ekranu interfejsu użytkownika, dzięki czemu recenzenci widzą zmieniony obszar zamiast całego zrzutu strony.
  • Lokalizatory samonaprawiające: A WebDriverListener haczyki przedZnalezieniemElementu i prosi pomocnika AI o zasugerowanie alternatywnego lokalizatora, gdy lokalizator główny wyrzuci Wyjątek NoSuchElement.
  • Podsumowania w języku naturalnym: An IReporter wdrożenie przekazuje wyniki do LLM, który z kolei tworzy podsumowanie składające się z jednego akapitu.

Warstwa nasłuchująca jest najczystszym miejscem do wstrzykiwania tych haków, ponieważ nie wpływa ona na logikę testu i jest stosowana jednolicie w całym zestawie.

Podsumowanie

Odbiorniki są wymagane do generowania dzienników lub dostosowywania TestNG raporty w Selenium Sterownik sieciowy.

  • TestNG oferuje wiele interfejsów nasłuchujących; wybierz ten, który odpowiada zdarzeniu, które Cię interesuje.
  • Słuchacze to interfejsy używane w Selenium Skrypty WebDriver reagujące na zdarzenia cyklu życia testu.
  • Pokazano w samouczku Odbiornik ITtestów z wynikiem pozytywnym i negatywnym testu.
  • Możesz dołączyć słuchacza za pomocą @Słuchacze lub zarejestruj go raz testng.xml za cały apartament.
  • Selenium 4.x zastępuje EventFiringWebDriver w WebDriverListener + Dekorator zdarzeń dla zdarzeń na poziomie WebDriver.

FAQ

Nasłuchiwacz to interfejs, który subskrybuje zdarzenia generowane podczas Selenium testowe uruchomienie. TestNG Słuchacze reagują na zdarzenia cyklu życia testu, takie jak start, zaliczenie, niepowodzenie i pominięcie. Słuchacze WebDriver reagują na zdarzenia sterownika przeglądarki, takie jak kliknięcia, nawigacje i wywołania findElement.

ITestListener uruchamia poszczególne metody @Test i udostępnia onTestStart, onTestSuccess, onTestFailure, onTestSkipped i onFinish. ISuiteListener uruchamia się tylko dwa razy na zestaw metod, z onStart i onFinish, co czyni go idealnym do konfiguracji na poziomie zestawu, na przykład do otwierania pliku raportu.

Możesz zarejestrować A TestNG słuchacza na dwa sposoby: dodaj adnotację @Listeners(MyListener.class) nad klasą testową lub zadeklaruj Tag w pliku testng.xml. Podejście oparte na XML stosuje nasłuchiwacz do każdej klasy w zestawie bez modyfikowania kodu źródłowego.

EventFiringWebDriver i WebDriverEventListener są przestarzałe w Selenium 4.x. Zalecanym zamiennikiem jest interfejs WebDriverListener w połączeniu z EventFiringDecorator, który może opakowywać instancje WebDriver, WebElement lub Alert i oferuje czystsze punkty zaczepienia, takie jak beforeGet i afterClick.

Użyj IReporter, gdy chcesz wygenerować niestandardowy raport po zakończeniu działania pakietu, taki jak podsumowanie HTML lub JSON. Użyj IInvokedMethodListener, gdy potrzebujesz hooka przed i po każdej metodzie testowej, w tym metodach konfiguracyjnych, takich jak @BeforeMethod i @AfterMethod.

Modele AI mogą wzbogacać dane wyjściowe nasłuchiwacza, oznaczając każdy wpis w dzienniku poziomem ważności, generując opisy kroków w języku naturalnym i grupując powiązane awarie. W ramach onTestFailure usługa AI może analizować zrzut ekranu i stos. trace, a następnie przypisz prawdopodobną przyczynę źródłową do TestNG zgłosić.

Tak. Odbiornik może przesyłać strumieniowo historię zaliczonych/niezaliczonych błędów do usługi AI, która klasyfikuje awarię jako niestabilną, związaną ze środowiskiem lub rzeczywistą regresją. Werdykt jest zapisywany jako TestNG atrybut, dzięki czemu pulpity nawigacyjne mogą poddawać kwarantannie niestabilne testy bez konieczności przeglądania każdej czerwonej kompilacji przez człowieka.

Podsumuj ten post następująco: