TestNG Lyttere inn Selenium
โก Smart oppsummering
Lyttere inn Selenium WebDriver er TestNG grensesnitt som fanger opp testhendelser for รฅ tilpasse logger, rapporter og handlinger etter feil. Denne artikkelen forklarer ITestListener-metoder, gรฅr gjennom en kjรธrbar Java eksempel, og forklarer hvordan Selenium 4 erstattet den utdaterte WebDriverEventListener.

Selenium WebDriver-skript mรฅ ofte reagere pรฅ testhendelser som en godkjent pรฅstand, en mislykket locator eller et hoppet trinn. Lyttere gjรธr det mulig. Generelt sett, Selenium prosjekter er avhengige av to lytterfamilier:
- WebDriver-lyttere
- TestNG lyttere
I denne veiledningen vil vi fokusere pรฅ TestNG Lyttere, med et notat om hvordan lyttere pรฅ WebDriver-nivรฅ endret seg i Selenium 4.x.
Hva er en lytter i TestNG?
En lytter er et grensesnitt som endrer standardoppfรธrselen til TestNGSom navnet antyder, ยซlytterยป lyttere til hendelser definert i en Selenium skript og reagere deretter. Du bruker dem ved รฅ implementere det relevante lyttergrensesnittet og registrere det i testklassen eller -pakken din. Lyttere lar deg tilpasse TestNG rapporter, legge ved skjermbilder og sende ut strukturerte logger.
Typer av lyttere i TestNG
TestNG sender en familie av lyttergrensesnitt, og hvert av dem er rettet mot et annet trinn i testlivssyklusen.
Nedenfor er de vanlig brukte TestNG lyttere:
- IAnotasjonTransformer
- IAnotasjonTransformer2
- IKonfigurerbar
- IConfigurationListener
- IExecutionListener
- IHookable
- IIinvokedMethodListener
- IIinvokedMethodListener2
- ImethodInterceptor
- IReporter
- ISuiteListener
- ITestListener
Disse grensesnittene brukes i Selenium for รฅ generere logger eller tilpasse TestNG rapporter. I denne veiledningen skal vi implementere ITestListener.
ITestListener avslรธrer fรธlgende metoder:
- pรฅStart โ kalles nรฅr en test starter.
- pรฅTestSuksess โ ringes nรฅr en test er bestรฅtt.
- vedTestfeil โ kalles nรฅr en test mislykkes.
- pรฅTestHoppet over โ kalles nรฅr en prรธve blir hoppet over.
- pรฅTestMislykketMenInnenforSuksessProsent โ kalles nรฅr en test mislykkes, men er innenfor suksessprosenten.
- pรฅFerdig โ kalles etter at alle testene i klassen er utfรธrt.
Testscenario
I dette testscenarioet vil vi automatisere innloggingsprosessen og implementere ITestListener imot det.
- Start Firefox og รฅpne siden https://demo.guru99.com/V4/
- Logg inn i applikasjonen.
Trinn for รฅ lage en TestNG lytteren
For testscenarioet ovenfor vil vi implementere lytteren trinn for trinn.
Trinn 1) Opprett en klasse kalt Lyttertest som implementerer ITestListenerHold musepekeren over den rรธde understrekingen og Eclipse vil foreslรฅ to raske lรธsninger, som vist nedenfor:
Klikk pรฅ ยซLegg til uimplementerte metoderยป. Flere stub-metoder (uten brรธdtekst) legges til i koden din, omtrent slik:
importere org.testng.ITestContext;
importere org.testng.ITestListener;
importere org.testng.ITestResult;
offentlig klasse Lyttertest redskaper ITestListener {
@Overstyring
offentlig ugyldighet vedFerdig(ITestContext arg0) {
// TODO Automatisk generert metodestub
}
@Overstyring
offentlig ugyldighet pรฅStart(ITestContext arg0) {
// TODO Automatisk generert metodestub
}
@Overstyring
offentlig ugyldighet vedTestMislykketMenInnenforSuksessProsent(ITestresultat arg0) {
// TODO Automatisk generert metodestub
}
@Overstyring
offentlig ugyldighet vedTestFeil(ITestresultat arg0) {
// TODO Automatisk generert metodestub
}
@Overstyring
offentlig ugyldighet pรฅTestHoppetOver(ITestresultat arg0) {
// TODO Automatisk generert metodestub
}
@Overstyring
offentlig ugyldighet vedTestStart(ITestresultat arg0) {
// TODO Automatisk generert metodestub
}
@Overstyring
offentlig ugyldighet vedTestSuksess(ITestresultat arg0) {
// TODO Automatisk generert metodestub
}
}
La oss nรฅ endre Lyttertest klasse. Vi vil spesielt fylle ut fรธlgende metoder: ved testfeil, pรฅTestHoppet over, ved teststartog pรฅTestSuksess.
Endringen er enkel: hver metode skriver ut navnet pรฅ testen, slik at konsollen tydelig viser status for bestรฅtt, ikke bestรฅtt og hoppet over.
Etter modifisering ser koden slik ut:
importere org.testng.ITestContext;
importere org.testng.ITestListener;
importere org.testng.ITestResult;
offentlig klasse Lyttertest redskaper ITestListener {
@Overstyring
offentlig ugyldighet vedFerdig(ITestContext Resultat) {
}
@Overstyring
offentlig ugyldighet pรฅStart(ITestContext Resultat) {
}
@Overstyring
offentlig ugyldighet vedTestMislykketMenInnenforSuksessProsent(ITestresultat Resultat) {
}
// Nรฅr et testtilfelle feiler, kalles denne metoden.
@Overstyring
offentlig ugyldighet vedTestFeil(ITestresultat Resultat) {
System.out.println(ยซNavnet pรฅ den mislykkede testtilfellet er:ยป + Resultat.getName());
}
// Nรฅr en testtilfelle hoppes over, kalles denne metoden.
@Overstyring
offentlig ugyldighet pรฅTestHoppetOver(ITestresultat Resultat) {
System.out.println(ยซNavnet pรฅ testtilfellet som ble hoppet over er:ยป + Resultat.getName());
}
// Nรฅr en testcase starter, kalles denne metoden.
@Overstyring
offentlig ugyldighet vedTestStart(ITestresultat Resultat) {
System.out.println(Resultat.getName() + "Testtilfelle startet");
}
// Nรฅr en testtilfelle bestรฅr, kalles denne metoden.
@Overstyring
offentlig ugyldighet vedTestSuksess(ITestresultat Resultat) {
System.out.println(ยซNavnet pรฅ den bestรฅtte testcasen er:ยป + Resultat.getName());
}
}
Trinn 2) Opprett en annen klasse som heter Testtilfeller for automatisering av innlogging. Selenium vil kjรธre denne klassen for รฅ logge inn pรฅ demosiden.
importere org.openqa.selenium.By;
importere org.openqa.selenium.WebDriver;
importere org.openqa.selenium.firefox.FirefoxDrivere;
importere org.testing.Assert;
importere org.testing.annotations.Lyttere;
importere org.testng.annotations.Test;
offentlig klasse Testtilfeller {
webdriver sjรฅfรธr = nytt FirefoxDriver();
// Test designet for รฅ bestรฅ, for รฅ bekrefte suksesslytteren.
@Test
offentlig ugyldighet Logg inn() {
sjรฅfรธr.get("https://demo.guru99.com/V4/");
driver.finnElement(Etter.navn(ยซuidยป)).sendKeys(ยซmngr34926ยป);
driver.finnElement(Etter.navn("Passord")).sendKeys(ยซamUpenuยป);
driver.finnElement(Etter.navn(ยซbtnLoginยป)).klikk();
}
// Tvangsfeiltest for รฅ bekrefte feillytteren.
@Test
offentlig ugyldighet TestTilFeil() {
System.out.println(ยซDenne testmetoden mislykkesยป);
Assert.assertTrue(falsk);
}
}
Trinn 3) Deretter knytter du denne lytteren til testklassen vรฅr TesttilfellerDet finnes to mรฅter รฅ koble en klasse til et lyttergrensesnitt pรฅ.
Den fรธrste mรฅten er รฅ bruke @Lyttere annotering, som vist nedenfor:
Vi legger til denne merknaden ovenfor Testtilfeller klasse. Klassen ser da slik ut:
importere org.openqa.selenium.By;
importere org.openqa.selenium.WebDriver;
importere org.openqa.selenium.firefox.FirefoxDrivere;
importere org.testing.Assert;
importere org.testing.annotations.Lyttere;
importere org.testng.annotations.Test;
@Listeners(Listener_Demo.ListenerTest.class)
offentlig klasse Testtilfeller {
webdriver sjรฅfรธr = nytt FirefoxDriver();
// Test for รฅ bestรฅ, for รฅ bekrefte at lytteren var vellykket.
@Test
offentlig ugyldighet Logg inn() {
sjรฅfรธr.get("https://demo.guru99.com/V4/");
driver.finnElement(Etter.navn(ยซuidยป)).sendKeys(ยซmngr34926ยป);
driver.finnElement(Etter.navn("Passord")).sendKeys(ยซamUpenuยป);
driver.finnElement(Etter.navn(ยซbtnLoginยป)).klikk();
}
// Tvangsfeiltest for รฅ bekrefte feillytteren.
@Test
offentlig ugyldighet TestTilFeil() {
System.out.println(ยซDenne testmetoden mislykkesยป);
Assert.assertTrue(falsk);
}
}
Prosjektstrukturen ser slik ut:
Trinn 4) Utfรธr Testtilfeller klasse. Metoder inni Lyttertest kalles automatisk basert pรฅ oppfรธrselen til metoder som er kommentert med @Test.
Trinn 5) Bekreft utdataene som vises i konsollen.
Resultatet av Testtilfeller ser ut som:
C:\Brukere\gauravn\AppData\Lokal\Temp\testng-eclipseโ1058076918\testng-customsuite.xml
Testtilfelle for pรฅlogging startet
Navnet pรฅ den bestรฅtte testcasen er: Logg inn
TestToFail-testtilfelle startet
Denne metoden for รฅ teste mislykkes
Navnet pรฅ testtilfellet som mislyktes er: TestToFail
GODKJENT: Logg inn
MISLYKKET: TestTilMislykket
java.lang.AssertionError: forventet [true] men funnet [false]
Bruke en lytter for flere klasser
Hvis et prosjekt har mange testklasser, legges det til @Lyttere annotering til hver enkelt blir tungvint og utsatt for feil.
I sรฅ fall, opprett en testng.xml filen og registrer lytteren der รฉn gang.
Denne lytteren brukes deretter pรฅ tvers av hele testpakken uavhengig av antall klasser. Nรฅr du kjรธrer XML-filen, utlรธses lytteren for hver klasse som er deklarert i pakken, og du kan kjede sammen et hvilket som helst antall lytterklasser innenfor samme tag.
WebDriverListener i Selenium 4 vs. den utdaterte EventFiringWebDriver
Samtidig som TestNG Lyttere reagerer pรฅ hendelser i testens livssyklus, mens WebDriver-lyttere reagerer pรฅ handlinger fra nettleserdriveren, som et klikk, en navigasjon eller et findElement-kall. Selenium 3 Den typiske tilnรฆrmingen var WebDriverHendelseslytter grensesnitt kablet gjennom HendelsesutlรธsingWebDriverBegge er utdatert i Selenium 4.x.
Den moderne erstatningen er WebDriverLytter grensesnitt kombinert med HendelseAvfyringDekoratรธr:
importere org.openqa.selenium.chrome.ChromeDriver;
importere org.openqa.selenium.support.events.EventFiringDecorator;
importere org.openqa.selenium.support.events.WebDriverListener;
offentlig klasse LoggingListner redskaper WebDriverLytter {
@Overstyring
offentlig ugyldighet fรธrGet(webdriver driver, String url) {
System.out.println("Navigerer til" + nettadresse);
}
}
webdriver rรฅ = nytt ChromeDriver();
webdriver sjรฅfรธr = nytt HendelseAvfyringDekoratรธr<>(nytt LoggingListener()).dekorere(raw);
Dekoratoren kan pakke inn en hvilken som helst WebDriver, WebElement eller Alert, noe som er mer fleksibelt enn den gamle hendelsesutlรธsende wrapperen. WebDriverLytter for observerbarhet pรฅ nettlesersiden og TestNG ITestListener for rapportering pรฅ suite-nivรฅ.
AI-drevne lyttere: Smartere logger og feilsortering
Moderne Selenium Team kobler i รธkende grad AI-tjenester til lytterne sine for รฅ gjรธre CI-signaler mer handlingsrettede. ved testfeil, kan en AI-assistert lytter ta et DOM-รธyeblikksbilde pluss et skjermbilde, sende dem til en modell som returnerer en sannsynlig rotรฅrsaksklynge, og skrive en tag tilbake i TestNG rapport eller et verktรธy som ReportPortal.
Vanlige AI-drevne mรธnstre inkluderer:
- Deteksjon av flaky-test: Lyttere videresender tidslinjer for bestรฅtt/feil til en modell som klassifiserer en feil som ustabil, miljรธmessig eller en reell regresjon.
- Smarte skjermbilder: Datasynsmodeller beskjรฆrer, kommenterer og endrer skjermbilder av brukergrensesnittet, slik at anmelderne ser det endrede omrรฅdet i stedet for en helsides dump.
- Selvreparerende lokaliseringsverktรธy: A WebDriverLytter kroker fรธrFinnElement og ber en AI-hjelper om รฅ foreslรฅ en alternativ lokator nรฅr den primรฆre kaster NoSuchElementException.
- Sammendrag pรฅ naturlig sprรฅk: An IReporter Implementeringen mater suite-resultatene inn i en LLM som produserer et stรฅende sammendrag pรฅ ett avsnitt.
Lytterlaget er det reneste stedet รฅ injisere disse krokene fordi det holder seg utenfor testlogikken og gjelder jevnt over hele suiten.
Sammendrag
Lyttere er pรฅlagt รฅ generere logger eller tilpasse TestNG rapporterer i Selenium WebDriver.
- TestNG tilbyr mange lyttergrensesnitt; velg det som passer til hendelsen du bryr deg om.
- Lyttere er grensesnitt som brukes i Selenium WebDriver-skript for รฅ reagere pรฅ hendelser i testens livssyklus.
- Veiledningen demonstrerte ITestListener med en bestรฅtt og en ikke-bestรฅtt prรธve.
- Du kan koble til en lytter med @Lyttere eller registrer den รฉn gang i testng.xml for hele suiten.
- Selenium 4.x erstatter HendelsesutlรธsingWebDriver med WebDriverLytter + HendelseAvfyringDekoratรธr for hendelser pรฅ WebDriver-nivรฅ.






