TestNG Slušatelji unutra Selenium

⚡ Pametni sažetak

Slušatelji unutra Selenium WebDriver su TestNG sučelja koja presreću testne događaje kako bi prilagodila zapisnike, izvješća i radnje nakon kvara. Ovaj članak objašnjava ITestListener metode, vodi kroz izvršni Java primjer i pojašnjava kako Selenium 4 je zamijenio zastarjeli WebDriverEventListener.

  • Što slušatelji rade: Pretplatili su se na TestNG događaji poput pokretanja, prolaza, neuspjeha i preskakanja za pokretanje zapisnika ili izvještavanja o hookovima.
  • 🧩 Dvanaest sučelja: TestNG isporučuje sučelja kao što su ITestListener, ISuiteListener, IReporter, IInvokedMethodListener i IAnnotationTransformer za detaljnu kontrolu.
  • 🛠️ Dva načina ožičenja: Priložite slušača s anotacijom @Listeners na jednoj klasi ili ga registrirajte jednom unutar testng.xml za svaki paket.
  • 🚀 Selenium Ažuriranje 4: EventFiringWebDriver je zastario; moderno sučelje WebDriverListener plus EventFiringDecorator sada pokreće kuke za događaje na razini WebDrivera.
  • 🤖 Kut umjetne inteligencije: Slušači uz pomoć umjetne inteligencije mogu automatski klasificirati kvarove, priložiti pametne snimke zaslona i slati signale nestabilnog testiranja natrag na CI nadzorne ploče u stvarnom vremenu.

TestNG Slušatelji unutra Selenium

Selenium WebDriver skripte često moraju reagirati na testne događaje kao što su prošla tvrdnja, neuspjeli lokator ili preskočeni korak. Slušači to omogućuju. Općenito, Selenium projekti se oslanjaju na dvije obitelji slušatelja:

  1. WebDriver slušatelji
  2. TestNG slušatelji

U ovom tutorijalu ćemo se usredotočiti na TestNG Slušači, s napomenom o tome kako su se promijenili slušači na razini WebDrivera u Selenium 4.x.

Što je slušatelj u TestNG?

Slušač je sučelje koje mijenja zadano ponašanje TestNGKao što ime sugerira, Slušači „slušaju“ događaje definirane u Selenium skriptu i reagiraju u skladu s tim. Koristite ih implementacijom relevantnog sučelja Listener i registriranjem istog u vašoj testnoj klasi ili paketu. Listener vam omogućuje prilagodbu TestNG izvješća, priložiti snimke zaslona i generirati strukturirane zapisnike.

Vrste slušatelja u TestNG

TestNG isporučuje obitelj sučelja slušatelja, a svako od njih cilja na drugu fazu životnog ciklusa testiranja.

U nastavku su navedene uobičajeno korištene TestNG slušatelji:

  1. IAnnotationTransformer
  2. IAnotation Transformer2
  3. IKonfigurabilan
  4. IConfigurationListener
  5. IExecutionListener
  6. Zakačiv
  7. IInvokedMethodListener
  8. IIInvokedMethodListener2
  9. IMethodInterceptor
  10. IReporter
  11. ISuiteListener
  12. ITestListener

Ova sučelja se koriste u Selenium za generiranje zapisnika ili prilagodbu TestNG izvješća. U ovom vodiču implementirat ćemo ITestListener.

ITestListener otkriva sljedeće metode:

  • naPočetku – poziva se kada započne bilo koji test.
  • priUspjehuProvjere – poziva se kada test prođe.
  • pri neuspjehu testa – poziva se kada test ne uspije.
  • priPreskočenomTestu – poziva se kada se test preskoči.
  • priTestuNeuspješnoBudućeUPostotkuUspjeha – poziva se kada test ne uspije, ali je unutar postotka uspjeha.
  • na kraju – poziva se nakon što se izvrše svi testovi u klasi.

Testni scenarij

U ovom testnom scenariju, automatizirat ćemo proces prijave i implementirati ITestListener protiv toga.

  1. Lansirati Firefox i otvorite stranicu https://demo.guru99.com/V4/

Prijava u testni scenarij URL

  1. Prijavite se u aplikaciju.

Obrazac za prijavu u testni scenarij

Koraci za stvaranje a TestNG slušalac

Za gornji testni scenarij, implementirat ćemo Listener korak po korak.

Korak 1) Napravite klasu pod nazivom ListenerTest koji implementira ITestListenerZadržite pokazivač iznad crvene podcrte i Eclipse predložit će dva brza rješenja, kao što je prikazano u nastavku:

Eclipse brzo rješenje za dodavanje neimplementiranih metoda

Kliknite "Dodaj neimplementirane metode". Više stub metoda (bez tijela) dodaje se vašem kodu, slično ovome:

paket Slušatelj_Demo;

uvoz org.testng.ITestContext;
uvoz org.testng.ITestListener;
uvoz org.testng.ITestResult;

javni stalež ListenerTest provodi ITestListener {

@Preuzmi
javna praznina naZavršetku(ITestContext arg0) {
// TODO Automatski generirani stub metode
}

@Preuzmi
javna praznina naPočetku(ITestContext arg0) {
// TODO Automatski generirani stub metode
}

@Preuzmi
javna praznina naTestNeuspješanAliUnutarPostotkaUspjeha(RezultatItesta arg0) {
// TODO Automatski generirani stub metode
}

@Preuzmi
javna praznina priNeuspjehuTestiranja(RezultatItesta arg0) {
// TODO Automatski generirani stub metode
}

@Preuzmi
javna praznina priPreskočenomTestu(RezultatItesta arg0) {
// TODO Automatski generirani stub metode
}

@Preuzmi
javna praznina naPočetkuTest(RezultatItesta arg0) {
// TODO Automatski generirani stub metode
}

@Preuzmi
javna praznina priUspjehuTestiranja(RezultatItesta arg0) {
// TODO Automatski generirani stub metode
}
}

Sada modificirajmo ListenerTest razred. Posebno ćemo popuniti sljedeće metode: prilikom neuspjeha testa, pri preskočenom testu, naTestStarti prilikomUspješnogTestiranja.

Promjena je jednostavna: svaka metoda ispisuje naziv testa tako da konzola jasno prikazuje status prolaza, neuspjeha i preskakanja.

Nakon modifikacije, kod izgleda ovako:

paket Slušatelj_Demo;

uvoz org.testng.ITestContext;
uvoz org.testng.ITestListener;
uvoz org.testng.ITestResult;

javni stalež ListenerTest provodi ITestListener {

@Preuzmi
javna praznina naZavršetku(ITestContext Rezultat) {
}

@Preuzmi
javna praznina naPočetku(ITestContext Rezultat) {
}

@Preuzmi
javna praznina naTestNeuspješanAliUnutarPostotkaUspjeha(RezultatItesta Rezultat) {
}

// Kada testni slučaj ne uspije, poziva se ova metoda.
@Preuzmi
javna praznina priNeuspjehuTestiranja(RezultatItesta Rezultat) {
System.out.println("Naziv neuspjelog testnog slučaja je:" + Rezultat.uzmiNaziv());
}

// Kada se testni slučaj preskoči, poziva se ova metoda.
@Preuzmi
javna praznina priPreskočenomTestu(RezultatItesta Rezultat) {
System.out.println("Naziv preskočenog testnog slučaja je:" + Rezultat.uzmiNaziv());
}

// Kada se pokrene testni slučaj, poziva se ova metoda.
@Preuzmi
javna praznina naPočetkuTest(RezultatItesta Rezultat) {
System.out.println(Rezultat.getName() + "započet testni slučaj");
}

// Kada testni slučaj prođe, poziva se ova metoda.
@Preuzmi
javna praznina priUspjehuTestiranja(RezultatItesta Rezultat) {
System.out.println("Naziv uspješnog testnog slučaja je:" + Rezultat.uzmiNaziv());
}
}

Korak 2) Napravite još jednu klasu pod nazivom Testni slučajevi za automatizaciju prijave. Selenium izvršit će ovu klasu za prijavu na demo stranicu.

paket Slušatelj_Demo;

uvoz org.openqa.selenium.By;
uvoz org.openqa.selenium.WebDriver;
uvoz org.openqa.selenium.firefox.FirefoxVozači;
uvoz org.testng.Assert;
uvoz org.testng.annotations.Slušatelji;
uvoz org.testng.annotations.Test;

javni stalež Testni slučajevi {
webdriver vozač = novi Firefoxvozač();

// Test osmišljen za prolaz, kako bi se provjerio uspjeh slušača.
@Test
javna praznina Prijava() {
driver.get(“https://demo.guru99.com/V4/”);
driver.findElement(Po.nazivu("uid")).pošaljiKljučeve(„mngr34926“);
driver.findElement(Po.nazivu("Lozinka")).pošaljiKljučeve("amUpenu");
driver.findElement(Po.nazivu("Prijava s tipkom")).klik();
}

// Prisilno neuspješan test, radi provjere slušača neuspjeha.
@Test
javna praznina TestZaPah() {
System.out.println("Ova metoda testiranja nije uspjela");
Assert.assertTrue(lažan);
}
}

Korak 3) Zatim, priložite ovog slušača našoj testnoj klasi Testni slučajeviPostoje dva načina za povezivanje klase sa sučeljem slušatelja.

Prvi način je korištenje @Slušatelji napomena, kao što je prikazano u nastavku:

@Listeners(Listener_Demo.ListenerTest.class)

Ovu napomenu dodajemo iznad Testni slučajevi razred. Razred tada izgleda ovako:

paket Slušatelj_Demo;

uvoz org.openqa.selenium.By;
uvoz org.openqa.selenium.WebDriver;
uvoz org.openqa.selenium.firefox.FirefoxVozači;
uvoz org.testng.Assert;
uvoz org.testng.annotations.Slušatelji;
uvoz org.testng.annotations.Test;

@Listeners(Listener_Demo.ListenerTest.class)
javni stalež Testni slučajevi {
webdriver vozač = novi Firefoxvozač();

// Test za prolaz, za provjeru uspješnosti slušača.
@Test
javna praznina Prijava() {
driver.get(“https://demo.guru99.com/V4/”);
driver.findElement(Po.nazivu("uid")).pošaljiKljučeve(„mngr34926“);
driver.findElement(Po.nazivu("Lozinka")).pošaljiKljučeve("amUpenu");
driver.findElement(Po.nazivu("Prijava s tipkom")).klik();
}

// Prisilno neuspješan test, radi provjere slušača neuspjeha.
@Test
javna praznina TestZaPah() {
System.out.println("Ova metoda testiranja nije uspjela");
Assert.assertTrue(lažan);
}
}

Struktura projekta izgleda ovako:

TestNG Struktura projekta slušatelja

Korak 4) Izvršite Testni slučajevi klasa. Metode unutar ListenerTest pozivaju se automatski na temelju ponašanja metoda označenih s @Test.

Korak 5) Provjerite izlaz prikazan u konzoli.

Izlaz od Testni slučajevi izgleda kao:

TestNG Izlaz konzole slušatelja

[TestNGTrčanje:
C:\Korisnici\gauravn\AppData\Local\Temp\testng-eclipse–1058076918\testng-customsuite.xml

Započet je testni slučaj prijave
Naziv uspješnog testnog slučaja je: Prijava
Započet je testni slučaj TestToFail
Ova metoda testiranja nije uspjela
Naziv neuspjelog testnog slučaja je: TestToFail
PROŠLO: Prijava
NEUSPJEH: TestToFail
java.lang.AssertionError: očekivano [true], ali pronađeno [false]

Korištenje slušača za više klasa

Ako projekt ima mnogo testnih klasa, dodavanje @Slušatelji bilješke uz svaku od njih postaju nezgrapne i sklone pogreškama.

U tom slučaju, stvorite testng.xml podnijeti i tamo registrirati slušatelja jednom.

Oznaka slušatelja testng.xml za više klasa

Ovaj slušač se zatim primjenjuje na cijeli testni paket bez obzira na broj klasa. Kada pokrenete XML datoteku, slušač se aktivira za svaku klasu deklariranu u paketu, a možete povezati bilo koji broj klasa slušača unutar iste oznake.

WebDriverListener u Selenium 4 u odnosu na zastarjeli EventFiringWebDriver

Dok su TestNG slušači reagiraju na događaje životnog ciklusa testiranja, slušači WebDrivera reagiraju na radnje upravljačkog programa preglednika kao što su klik, navigacija ili poziv findElementa. U Selenium 3 tipičan pristup bio je Slušač događaja web-upravljačkog programa sučelje ožičeno putem WebDriver za aktiviranje događajaOba su zastarjela u Selenium 4.x.

Moderna zamjena je Slušač web upravljačkih programa sučelje u kombinaciji s Dekorater palila događaja:

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

javni stalež Slušač zapisivanja provodi Slušač web upravljačkih programa {
@Preuzmi
javna praznina prijeDohvati(webdriver upravljački program, URL niza znakova) {
System.out.println("Navigacija do" + URL);
}
}

webdriver sirovo = novi ChromeDriver();
webdriver vozač = novi Dekorater palila događaja<>(novi SlušačZapisivanja()).ukrasiti(sirovo);

Dekorator može omotati bilo koji WebDriver, WebElement ili Alert, što je fleksibilnije od starog omotača za pokretanje događaja. Koristite Slušač web upravljačkih programa za vidljivost na strani preglednika i TestNG ITestListener za izvještavanje na razini paketa.

Slušači s umjetnom inteligencijom: pametniji zapisnici i trijaža grešaka

moderna Selenium Timovi sve više uključuju AI usluge u svoje slušatelje kako bi CI signale učinili učinkovitijima. Unutra prilikom neuspjeha testa, slušač uz pomoć umjetne inteligencije može snimiti DOM snimku i snimku zaslona, ​​poslati ih modelu koji vraća vjerojatni klaster uzroka i zapisati oznaku natrag u TestNG izvješće ili alat poput ReportPortal-a.

Uobičajeni obrasci vođeni umjetnom inteligencijom uključuju:

  • Detekcija nestabilnim testom: Slušači prosljeđuju vremenske crte prolaza/neuspjeha modelu koji klasificira neuspjeh kao nestabilan, okolišni ili stvarnu regresiju.
  • Pametne snimke zaslona: Modeli računalnog vida izrezuju, dodaju bilješke i razlikuju snimke zaslona korisničkog sučelja kako bi recenzenti vidjeli promijenjeno područje umjesto ispisa cijele stranice.
  • Samoobnavljajući lokatori: A Slušač web upravljačkih programa kuke prijePronađiElement i traži od AI pomagača da predloži alternativni lokator kada primarni baci NoSuchElementException.
  • Sažeci na prirodnom jeziku: An IReporter Implementacija unosi rezultate paketa u LLM koji generira sažetak od jednog odlomka.

Sloj slušatelja je najčišće mjesto za ubrizgavanje ovih hook-ova jer ostaje izvan logike testiranja i primjenjuje se jednoliko na cijeli paket.

Rezime

Od slušatelja se traži generiranje zapisa ili prilagodba TestNG izvješća u Selenium WebDriver.

  • TestNG nudi mnogo sučelja za slušanje; odaberite ono koje odgovara događaju koji vas zanima.
  • Slušači su sučelja koja se koriste u Selenium WebDriver skripte za reagiranje na događaje životnog ciklusa testiranja.
  • U tutorijalu je prikazano ITestListener s prolaznim i nepoloženim testom.
  • Možete priložiti slušatelja s @Slušatelji ili ga registrirajte jednom u testng.xml za cijeli apartman.
  • Selenium 4.x zamjenjuje WebDriver za aktiviranje događaja sa Slušač web upravljačkih programa + Dekorater palila događaja za događaje na razini WebDrivera.

Pitanja i odgovori

Slušač je sučelje koje se pretplaćuje na događaje generirane tijekom Selenium probni rad. TestNG Slušači reagiraju na događaje životnog ciklusa testiranja kao što su pokretanje, prolaz, neuspjeh i preskakanje. Slušači WebDrivera reagiraju na događaje upravljačkog programa preglednika kao što su klikovi, navigacije i pozivi findElementa.

ITestListener se aktivira za pojedinačne @Test metode i izlaže onTestStart, onTestSuccess, onTestFailure, onTestSkipped i onFinish. ISuiteListener se aktivira samo dva puta po paketu, s onStart i onFinish, što ga čini idealnim za postavljanje na razini paketa, kao što je otvaranje datoteke izvješća.

Možete registrirati a TestNG slušatelja na dva načina: dodajte anotaciju @Listeners(MyListener.class) iznad testne klase ili deklarirajte oznaka unutar testng.xml. XML pristup primjenjuje slušača na svaku klasu u paketu bez mijenjanja izvornog koda.

EventFiringWebDriver i WebDriverEventListener su zastarjeli u Selenium 4.x. Preporučena zamjena je sučelje WebDriverListener u kombinaciji s EventFiringDecoratorom, koje može obuhvatiti instance WebDrivera, WebElementa ili Alerta i nudi čišće točke povezivanja kao što su beforeGet i afterClick.

Koristite IReporter kada želite izraditi prilagođeno izvješće nakon završetka paketa, kao što je HTML ili JSON sažetak. Koristite IInvokedMethodListener kada vam je potreban hook prije i poslije svake metode testiranja, uključujući metode konfiguracije poput @BeforeMethod i @AfterMethod.

AI modeli mogu obogatiti izlaz slušatelja označavanjem svakog unosa u dnevnik s ozbiljnošću, generiranjem opisa koraka na prirodnom jeziku i grupiranjem povezanih grešaka. Unutar onTestFailure, AI usluga može analizirati snimku zaslona i slagati trace, zatim priložite vjerojatni uzrok TestNG prijaviti.

Da. Slušač može strujati povijest prolaza/neuspjeha AI usluzi koja klasificira neuspjeh kao nestabilan, okolišni ili stvarnu regresiju. Presuda se zapisuje kao TestNG atribut, tako da nadzorne ploče mogu staviti u karantenu nestabilne testove bez ljudskog pregleda svake crvene verzije.

Sažmite ovu objavu uz: