TestNG Lyttere ind Selenium
⚡ Smart opsummering
Lyttere ind Selenium WebDriver er TestNG grænseflader, der opfanger testhændelser for at tilpasse logfiler, rapporter og handlinger efter fejl. Denne artikel forklarer ITestListener-metoder og gennemgår en kørbar Java eksempel, og forklarer hvordan Selenium 4 erstattede den forældede WebDriverEventListener.

Selenium WebDriver-scripts skal ofte reagere på testhændelser såsom en bestået assertion, en mislykket locator eller et sprunget trin over. Listeners gør det muligt. Generelt set, Selenium Projekter er afhængige af to lytterfamilier:
- WebDriver-lyttere
- TestNG lyttere
I denne tutorial vil vi fokusere på TestNG Lyttere, med en note om hvordan lyttere på WebDriver-niveau ændrede sig i Selenium 4.x.
Hvad er en lytter i TestNG?
En lytter er en grænseflade, der ændrer standardadfærden for TestNGSom navnet antyder, "lytter" lyttere til begivenheder defineret i en Selenium script og reagere i overensstemmelse hermed. Du bruger dem ved at implementere den relevante Listener-grænseflade og registrere den på din testklasse eller -suite. Listeners giver dig mulighed for at tilpasse TestNG rapporter, vedhæft skærmbilleder og udsend strukturerede logfiler.
Typer af lyttere i TestNG
TestNG leverer en familie af lyttergrænseflader, og hver enkelt er målrettet mod et forskelligt stadie i testlivscyklussen.
Nedenfor er de almindeligt anvendte TestNG lyttere:
- IAnotationTransformer
- IAnotationTransformer2
- IKonfigurerbar
- IConfigurationListener
- IExecutionListener
- IHookable
- IInvokedMethodListener
- IIinvokedMethodListener2
- ImethodInterceptor
- IR-rapporter
- ISuiteListener
- ITestListener
Disse grænseflader bruges i Selenium at generere logfiler eller tilpasse TestNG rapporter. I denne vejledning vil vi implementere ITestListener.
ITestListener afslører følgende metoder:
- onStart – kaldes når en test starter.
- onTestSuccess – kaldes når en test er bestået.
- onTestFailure – kaldes når en test mislykkes.
- onTestSpringt Over – kaldes, når en test springes over.
- ved testmislykket, men inden for succesprocent – kaldes når en test fejler, men er inden for succesprocenten.
- ved afslutning – kaldes efter at alle tests i klassen er udført.
Testscenarie
I dette testscenarie vil vi automatisere loginprocessen og implementere ITestListener imod det.
- Launch Firefox og åbne siden https://demo.guru99.com/V4/
- Log ind på applikationen.
Trin til at oprette en TestNG Lytter
I testscenariet ovenfor implementerer vi Listener trin for trin.
Trin 1) Opret en klasse kaldet Lyttertest der implementerer ITestListenerHold musen over den røde understregning, og Eclipse vil foreslå to hurtige løsninger, som vist nedenfor:
Klik på “Tilføj ikke-implementerede metoder”. Flere stub-metoder (uden en brødtekst) tilføjes til din kode, svarende til dette:
importere org.testng.ITestKontekst;
importere org.testng.ITestListener;
importere org.testng.ITestResult;
offentlig klasse Lyttertest redskaber ITestListener {
@Tilsidesæt
offentligt tomrum vedFærdig(ITestContext argument0) {
// TODO Autogenereret metodestub
}
@Tilsidesæt
offentligt tomrum vedStart(ITestContext argument0) {
// TODO Autogenereret metodestub
}
@Tilsidesæt
offentligt tomrum vedTestMislykkedesMenIndenforSuccesProcentdel(ITestresultat argument0) {
// TODO Autogenereret metodestub
}
@Tilsidesæt
offentligt tomrum vedTestFejl(ITestresultat argument0) {
// TODO Autogenereret metodestub
}
@Tilsidesæt
offentligt tomrum vedTestSpringt Over(ITestresultat argument0) {
// TODO Autogenereret metodestub
}
@Tilsidesæt
offentligt tomrum vedTestStart(ITestresultat argument0) {
// TODO Autogenereret metodestub
}
@Tilsidesæt
offentligt tomrum vedTestSucces(ITestresultat argument0) {
// TODO Autogenereret metodestub
}
}
Lad os nu ændre Lyttertest klasse. Vi vil især udfylde følgende metoder: vedTestFejl, vedTestSpringt Over, vedTestStartog vedTestSucces.
Ændringen er enkel: hver metode udskriver navnet på testen, så konsollen tydeligt viser status for bestået, ikke bestået og springet over.
Efter ændringen ser koden således ud:
importere org.testng.ITestKontekst;
importere org.testng.ITestListener;
importere org.testng.ITestResult;
offentlig klasse Lyttertest redskaber ITestListener {
@Tilsidesæt
offentligt tomrum vedFærdig(ITestContext Resultat) {
}
@Tilsidesæt
offentligt tomrum vedStart(ITestContext Resultat) {
}
@Tilsidesæt
offentligt tomrum vedTestMislykkedesMenIndenforSuccesProcentdel(ITestresultat Resultat) {
}
// Når en testcase fejler, kaldes denne metode.
@Tilsidesæt
offentligt tomrum vedTestFejl(ITestresultat Resultat) {
System.out.println("Navnet på den mislykkede testcase er:" + Resultat.getNavn());
}
// Når en testcase springes over, kaldes denne metode.
@Tilsidesæt
offentligt tomrum vedTestSpringt Over(ITestresultat Resultat) {
System.out.println("Navnet på den oversprungne testcase er:" + Resultat.getNavn());
}
// Når en testcase starter, kaldes denne metode.
@Tilsidesæt
offentligt tomrum vedTestStart(ITestresultat Resultat) {
System.out.println(Resultat.getNavn() + "Testcase startet");
}
// Når en testcase består, kaldes denne metode.
@Tilsidesæt
offentligt tomrum vedTestSucces(ITestresultat Resultat) {
System.out.println("Navnet på den beståede testcase er:" + Resultat.getNavn());
}
}
Trin 2) Opret en anden klasse kaldet TestCases til automatisering af login. Selenium vil udføre denne klasse for at logge ind på demosiden.
importere org.openqa.selenium.By;
importere org.openqa.selenium.WebDriver;
importere org.openqa.selenium.firefox.FirefoxChauffører;
importere org.testng.Assert;
importere org.testng.annotations.Lyttere;
importere org.testng.annotations.Test;
offentlig klasse TestCases {
webdriver chauffør = ny FirefoxChauffør();
// Test designet til at bestå, for at verificere succesen med lytteren.
@Prøve
offentligt tomrum Log ind() {
chauffør.get("https://demo.guru99.com/V4/");
driver.findElement(Efter.navn("uid")).sendNøgler("mngr34926");
driver.findElement(Efter.navn("Adgangskode")).sendNøgler("amUpenu");
driver.findElement(Efter.navn("btnLogin")).klik();
}
// Tvungen mislykket test for at verificere den fejlbehæftede lytter.
@Prøve
offentligt tomrum TestTilFejl() {
System.out.println("Denne testmetode mislykkes");
Assert.assertTrue(falsk);
}
}
Trin 3) Dernæst skal du vedhæfte denne lytter til vores testklasse TestCasesDer er to måder at forbinde en klasse til en lyttergrænseflade.
Den første måde er at bruge @Lyttere annotering, som vist nedenfor:
Vi tilføjer denne anmærkning ovenfor TestCases klasse. Klassen ser så sådan ud:
importere org.openqa.selenium.By;
importere org.openqa.selenium.WebDriver;
importere org.openqa.selenium.firefox.FirefoxChauffører;
importere org.testng.Assert;
importere org.testng.annotations.Lyttere;
importere org.testng.annotations.Test;
@Listeners(Listener_Demo.ListenerTest.class)
offentlig klasse TestCases {
webdriver chauffør = ny FirefoxChauffør();
// Test for at bestå, for at verificere at lytteren er vellykket.
@Prøve
offentligt tomrum Log ind() {
chauffør.get("https://demo.guru99.com/V4/");
driver.findElement(Efter.navn("uid")).sendNøgler("mngr34926");
driver.findElement(Efter.navn("Adgangskode")).sendNøgler("amUpenu");
driver.findElement(Efter.navn("btnLogin")).klik();
}
// Tvungen mislykket test for at verificere den fejlbehæftede lytter.
@Prøve
offentligt tomrum TestTilFejl() {
System.out.println("Denne testmetode mislykkes");
Assert.assertTrue(falsk);
}
}
Projektstrukturen ser således ud:
Trin 4) Udfør TestCases klasse. Metoder indeni Lyttertest kaldes automatisk baseret på opførslen af metoder kommenteret med @Prøve.
Trin 5) Bekræft outputtet, der vises i konsollen.
Udgangen af TestCases ligner:
C:\Brugere\gauravn\AppData\Lokal\Temp\testng-eclipse–1058076918\testng-customsuite.xml
Login-testcase startet
Navnet på den beståede testcase er: Login
TestToFail-testcase startet
Denne testmetode mislykkes
Navnet på den mislykkede testcase er: TestToFail
GODKENDT: Log ind
MISSLYKKET: TestTilMislykket
java.lang.AssertionError: forventet [sand] men fundet [falsk]
Brug af en lytter til flere klasser
Hvis et projekt har mange testklasser, tilføjes @Lyttere annotering til hver enkelt bliver besværlig og fejlbehæftet.
I så fald skal du oprette en testng.xml filen og registrer lytteren der én gang.
Denne lytter anvendes derefter på tværs af hele testpakken uanset antallet af klasser. Når du kører XML-filen, aktiveres lytteren for hver klasse, der er deklareret i pakken, og du kan kæde et hvilket som helst antal lytterklasser sammen inden for det samme tag.
WebDriverListener i Selenium 4 vs. den udfasede EventFiringWebDriver
Mens TestNG Listenere reagerer på testlivscyklushændelser, WebDriver-listere reagerer på browser-driver-handlinger såsom et klik, en navigation eller et findElement-kald. Selenium 3 Den typiske fremgangsmåde var WebDriverHændelseslytter grænseflade forbundet via kabel EventFiringWebDriverBegge er udfaset i Selenium 4.x.
Den moderne erstatning er WebDriverListener grænseflade kombineret med BegivenhedFyringDekoratør:
importere org.openqa.selenium.chrome.ChromeDriver;
importere org.openqa.selenium.support.events.EventFiringDecorator;
importere org.openqa.selenium.support.events.WebDriverListener;
offentlig klasse Logføringslytter redskaber WebDriverListener {
@Tilsidesæt
offentligt tomrum førGet(webdriver driver, String url) {
System.out.println("Navigering til" + url);
}
}
webdriver rå = ny ChromeDriver();
webdriver chauffør = ny BegivenhedFyringDekoratør<>(ny LoggingListener()).dekorere(raw);
Dekoratoren kan ombryde enhver WebDriver, WebElement eller Alert, hvilket er mere fleksibelt end den gamle event-firing wrapper. WebDriverListener for observerbarhed på browsersiden og TestNG ITestListener til rapportering på suite-niveau.
AI-drevne lyttere: Smartere logfiler og fejlsortering
Moderne Selenium Teams tilslutter i stigende grad AI-tjenester til deres lyttere for at gøre CI-signaler mere brugbare. vedTestFejl, kan en AI-assisteret lytter optage et DOM-snapshot plus et skærmbillede, sende dem til en model, der returnerer en sandsynlig rodårsagsklynge, og skrive et tag tilbage i TestNG rapport eller et værktøj som ReportPortal.
Almindelige AI-drevne mønstre inkluderer:
- Flaky-test detektion: Lyttere videresender tidslinjer for beståede/fejlede resultater til en model, der klassificerer en fejl som ustabil, miljømæssig eller en reel regression.
- Smarte skærmbilleder: Computervision-modeller beskærer, annoterer og differentierer skærmbilleder af brugergrænsefladen, så korrekturlæsere ser det ændrede område i stedet for en fuldsidet dump.
- Selvreparerende lokaliseringsanordninger: A WebDriverListener kroge førFindElement og beder en AI-hjælper om at foreslå en alternativ lokator, når den primære kaster NoSuchElementException.
- Resuméer i naturligt sprog: An IR-rapporter Implementeringen føder suite-resultaterne ind i en LLM, der producerer et stående resumé på et afsnit.
Lytterlaget er det reneste sted at injicere disse hooks, fordi det holder sig ude af testlogikken og anvendes ensartet på tværs af serien.
Resumé
Lyttere skal generere logfiler eller tilpasse TestNG rapporterer i Selenium WebDriver.
- TestNG tilbyder mange lyttergrænseflader; vælg den, der matcher den begivenhed, du er interesseret i.
- Lyttere er grænseflader, der bruges i Selenium WebDriver-scripts til at reagere på testlivscyklushændelser.
- Vejledningen demonstrerede ITestListener med en bestået og en ikke-bestået prøve.
- Du kan tilknytte en lytter med @Lyttere eller registrer det én gang i testng.xml for hele suiten.
- Selenium 4.x erstatter EventFiringWebDriver med WebDriverListener + BegivenhedFyringDekoratør for hændelser på WebDriver-niveau.






