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.

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:
- WebDriver slušatelji
- 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:
- IAnnotationTransformer
- IAnotation Transformer2
- IKonfigurabilan
- IConfigurationListener
- IExecutionListener
- Zakačiv
- IInvokedMethodListener
- IIInvokedMethodListener2
- IMethodInterceptor
- IReporter
- ISuiteListener
- 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.
- Lansirati Firefox i otvorite stranicu https://demo.guru99.com/V4/
- Prijavite se u aplikaciju.
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:
Kliknite "Dodaj neimplementirane metode". Više stub metoda (bez tijela) dodaje se vašem kodu, slično ovome:
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:
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.
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:
Ovu napomenu dodajemo iznad Testni slučajevi razred. Razred tada izgleda ovako:
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:
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:
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.
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.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.






