TestNG Ascoltatori dentro Selenium
⚡ Riepilogo intelligente
Ascoltatori dentro Selenium WebDriver sono TestNG interfacce che intercettano gli eventi di test per personalizzare log, report e azioni post-errore. Questo articolo spiega i metodi di ITestListener e illustra un esempio eseguibile. Java esempio, e chiarisce come Selenium La versione 4 ha sostituito il WebDriverEventListener, ormai obsoleto.

Selenium Gli script WebDriver spesso devono reagire a eventi di test come un'asserzione superata, un localizzatore non riuscito o un passaggio saltato. I listener rendono ciò possibile. In generale, Selenium I progetti si basano su due famiglie di ascoltatori:
- Ascoltatori WebDriver
- TestNG Gli ascoltatori
In questo tutorial ci concentreremo su TestNG Ascoltatori, con una nota su come sono cambiati gli ascoltatori a livello di WebDriver Selenium 4.x.
Che cos'è un ascoltatore in TestNG?
Un Listener è un'interfaccia che modifica il comportamento predefinito di TestNG. Come suggerisce il nome, gli ascoltatori “ascoltano” gli eventi definiti in un Selenium script e reagisci di conseguenza. Li utilizzi implementando l'interfaccia Listener pertinente e registrandola sulla tua classe o suite di test. I listener ti consentono di personalizzare TestNG genera report, allega screenshot ed emetti log strutturati.
Tipi di ascoltatori in TestNG
TestNG fornisce una famiglia di interfacce di ascolto, ognuna delle quali è destinata a una fase diversa del ciclo di vita del test.
Di seguito sono riportati quelli comunemente usati TestNG ascoltatori:
- IAnotationTransformer
- IAnnotationTransformer2
- Configurabile
- IConfigurationListener
- IExecutionListener
- Collegabile
- IInvokedMethodListener
- IInvokedMethodListener2
- ImetodoIntercettore
- Reporter
- ISuite Listener
- ITest Listener
Queste interfacce vengono utilizzate in Selenium per generare log o personalizzare TestNG report. In questo tutorial implementeremo ITest Listener.
ITest Listener espone i seguenti metodi:
- all'avvio – viene chiamata all'avvio di qualsiasi test.
- onTestSuccess – viene chiamata quando un test ha esito positivo.
- onTestFailure – Viene chiamata quando un test fallisce.
- onTestSkipped – Viene richiamata quando un test viene saltato.
- onTestFailedButWithinSuccessPercentage – Viene chiamato quando un test fallisce ma rientra nella percentuale di successo.
- onFinish – chiamata dopo l'esecuzione di tutti i test della classe.
Scenario di prova
In questo scenario di test, automatizzeremo il processo di accesso e lo implementeremo ITest Listener contro di esso.
- Lancio Firefox e aprire il sito https://demo.guru99.com/V4/
- Accedi all'applicazione.
Passaggi per creare a TestNG Ascoltatore
Per lo scenario di test sopra descritto, implementeremo il Listener passo dopo passo.
Passo 1) Crea una classe chiamata Test dell'ascoltatore che implementa ITest Listener. Passa il mouse sopra la sottolineatura rossa e Eclipse Proporrò due soluzioni rapide, come mostrato di seguito:
Fai clic su "Aggiungi metodi non implementati". Al tuo codice verranno aggiunti più metodi stub (senza corpo), in modo simile a questo:
importare org.testng.ITestContext;
importare org.testng.ITestListener;
importare org.testng.ITestResult;
classe pubblica Test dell'ascoltatore attrezzi ITest Listener {
@Oltrepassare
vuoto pubblico al termine(ITestContext arg0) {
// TODO Metodo generato automaticamente
}
@Oltrepassare
vuoto pubblico all'avvio(ITestContext arg0) {
// TODO Metodo generato automaticamente
}
@Oltrepassare
vuoto pubblico onTestFailedButWithinSuccessPercentage(Risultato del test I arg0) {
// TODO Metodo generato automaticamente
}
@Oltrepassare
vuoto pubblico onTestFailure(Risultato del test I arg0) {
// TODO Metodo generato automaticamente
}
@Oltrepassare
vuoto pubblico onTestSkipped(Risultato del test I arg0) {
// TODO Metodo generato automaticamente
}
@Oltrepassare
vuoto pubblico onTestStart(Risultato del test I arg0) {
// TODO Metodo generato automaticamente
}
@Oltrepassare
vuoto pubblico onTestSuccess(Risultato del test I arg0) {
// TODO Metodo generato automaticamente
}
}
Ora modifichiamo il Test dell'ascoltatore classe. In particolare, implementeremo i seguenti metodi: onTestFailure, onTestSkipped, onTestStarte onTestSuccess.
La modifica è semplice: ogni metodo stampa il nome del test in modo che la console mostri chiaramente lo stato di superamento, fallimento e salto.
Dopo la modifica, il codice appare così:
importare org.testng.ITestContext;
importare org.testng.ITestListener;
importare org.testng.ITestResult;
classe pubblica Test dell'ascoltatore attrezzi ITest Listener {
@Oltrepassare
vuoto pubblico al termine(ITestContext Risultato) {
}
@Oltrepassare
vuoto pubblico all'avvio(ITestContext Risultato) {
}
@Oltrepassare
vuoto pubblico onTestFailedButWithinSuccessPercentage(Risultato del test I Risultato) {
}
// Quando un caso di test fallisce, viene chiamato questo metodo.
@Oltrepassare
vuoto pubblico onTestFailure(Risultato del test I Risultato) {
System.out.println("Il nome del caso di test fallito è: " + Risultato.getNome());
}
// Quando un caso di test viene saltato, viene chiamato questo metodo.
@Oltrepassare
vuoto pubblico onTestSkipped(Risultato del test I Risultato) {
System.out.println("Il nome del caso di test saltato è: " + Risultato.getNome());
}
// Quando viene avviato un caso di test, viene chiamato questo metodo.
@Oltrepassare
vuoto pubblico onTestStart(Risultato del test I Risultato) {
System.out.println(Result.getName() + "Avviato il caso di test");
}
// Quando un caso di test ha esito positivo, viene chiamato questo metodo.
@Oltrepassare
vuoto pubblico onTestSuccess(Risultato del test I Risultato) {
System.out.println(“Il nome del caso di test superato è: “ + Risultato.getNome());
}
}
Passo 2) Crea un'altra classe chiamata Casi di test per l'automazione dell'accesso. Selenium Questa classe verrà eseguita per accedere al sito demo.
importare org.openqa.selenium.By;
importare org.openqa.selenium.WebDriver;
importare org.openqa.selenium.firefox.FirefoxAutista;
importare org.testng.Assert;
importare org.testng.annotations.Listeners;
importare org.testng.annotations.Test;
classe pubblica Casi di test {
webdriver conducente = new FirefoxGuidatore();
// Test progettato per essere superato, per verificare il successo del listener.
@Test
vuoto pubblico Login() {
driver.get(“https://demo.guru99.com/V4/”);
driver.findElement(By.name(“fluido”)).sendKeys(“mngr34926”);
driver.findElement(By.name("parola d'ordine")).sendKeys(“amUpenu”);
driver.findElement(By.name(“btnLogin”)).clic();
}
// Test forzatamente fallito, per verificare il listener degli errori.
@Test
vuoto pubblico TestToFail() {
System.out.println(“Questo metodo di test fallisce”);
Assert.assertTrue(falso);
}
}
Passo 3) Successivamente, collega questo listener alla nostra classe di test. Casi di testEsistono due modi per collegare una classe a un'interfaccia listener.
Il primo modo è usare il @Ascoltatori annotazione, come mostrato di seguito:
Aggiungiamo questa annotazione sopra il Casi di test classe. La classe si presenta quindi in questo modo:
importare org.openqa.selenium.By;
importare org.openqa.selenium.WebDriver;
importare org.openqa.selenium.firefox.FirefoxAutista;
importare org.testng.Assert;
importare org.testng.annotations.Listeners;
importare org.testng.annotations.Test;
@Listeners(Listener_Demo.ListenerTest.class)
classe pubblica Casi di test {
webdriver conducente = new FirefoxGuidatore();
// Test da superare, per verificare il listener di successo.
@Test
vuoto pubblico Login() {
driver.get(“https://demo.guru99.com/V4/”);
driver.findElement(By.name(“fluido”)).sendKeys(“mngr34926”);
driver.findElement(By.name("parola d'ordine")).sendKeys(“amUpenu”);
driver.findElement(By.name(“btnLogin”)).clic();
}
// Test forzatamente fallito, per verificare il listener degli errori.
@Test
vuoto pubblico TestToFail() {
System.out.println(“Questo metodo di test fallisce”);
Assert.assertTrue(falso);
}
}
La struttura del progetto è simile a:
Passo 4) Eseguire il Casi di test classe. Metodi all'interno Test dell'ascoltatore vengono richiamati automaticamente in base al comportamento dei metodi annotati con @Test.
Passo 5) Verifica l'output visualizzato nella console.
L'output di Casi di test sembra:
C:\Users\gauravn\AppData\Local\Temp\testng-eclipse–1058076918\testng-customsuite.xml
Test di accesso avviato
Il nome del caso di test superato è: Login
Caso di test TestToFail avviato
Questo metodo di test fallisce
Il nome del caso di test fallito è: TestToFail
SUPERATO: Accedi
FALLITO: TestToFail
java.lang.AssertionError: previsto [true] ma trovato [false]
Utilizzo di un listener per più classi
Se un progetto ha molte classi di test, l'aggiunta del @Ascoltatori L'annotazione di ciascuna di esse diventa complessa e soggetta a errori.
In tal caso, crea un testng.xml file e registrare il listener lì una sola volta.
Questo listener viene quindi applicato all'intera suite di test, indipendentemente dal numero di classi. Quando si esegue il file XML, il listener si attiva per ogni classe dichiarata nella suite ed è possibile concatenare un numero qualsiasi di classi listener all'interno dello stesso tag.
WebDriverListener in Selenium 4 contro l'obsoleto EventFiringWebDriver
Mentre TestNG I listener reagiscono agli eventi del ciclo di vita dei test, i listener di WebDriver reagiscono alle azioni del driver del browser come un clic, una navigazione o una chiamata findElement. Selenium 3 l'approccio tipico era il WebDriverEventListener interfaccia cablata tramite EventFiringWebDriverEntrambi sono deprecati in Selenium 4.x.
Il sostituto moderno è il WebDriverListener interfaccia combinata con Decorazione per l'evento di accensione delle luci:
importare org.openqa.selenium.chrome.ChromeDriver;
importare org.openqa.selenium.support.events.EventFiringDecorator;
importare org.openqa.selenium.support.events.WebDriverListener;
classe pubblica LoggingListener attrezzi WebDriverListener {
@Oltrepassare
vuoto pubblico prima di ottenere(webdriver driver, Stringa url) {
System.out.println(“Navigazione verso “ + url);
}
}
webdriver grezzo = new ChromeDriver();
webdriver conducente = new Decorazione per l'evento di accensione delle luci<>(new LoggingListener()).decorate(raw);
Il decoratore può incapsulare qualsiasi WebDriver, WebElement o Alert, che è più flessibile del vecchio wrapper di attivazione eventi. Utilizzare WebDriverListener per l'osservabilità lato browser e TestNG ITest Listener per la creazione di report a livello di suite.
Listener basati sull'intelligenza artificiale: registri più intelligenti e analisi dei guasti
Moderno Selenium I team integrano sempre più spesso servizi di IA nei loro listener per rendere i segnali CI più utilizzabili. onTestFailure, un listener assistito dall'IA può catturare un'istantanea del DOM più uno screenshot, inviarli a un modello che restituisce un probabile cluster di cause principali e scrivere un tag di nuovo nel TestNG segnalare o utilizzare uno strumento come ReportPortal.
Tra i modelli più comuni basati sull'intelligenza artificiale si annoverano:
- Rilevamento di test inaffidabili: Gli ascoltatori inoltrano le cronologie di successo/fallimento a un modello che classifica un fallimento come instabile, dovuto a fattori ambientali o a una vera e propria regressione.
- Screenshot intelligenti: I modelli di visione artificiale ritagliano, annotano e confrontano le schermate dell'interfaccia utente in modo che i revisori possano vedere la regione modificata anziché un'intera pagina.
- Localizzatori ad autoguarigione: A WebDriverListener ganci prima di trovare l'elemento e chiede a un assistente IA di suggerire un localizzatore alternativo quando quello principale fallisce NoSuchElementException.
- Riassunti in linguaggio naturale: An Reporter L'implementazione alimenta i risultati della suite in un LLM che produce un riepilogo di un paragrafo.
Il livello di ascolto è il punto più pulito in cui iniettare questi hook perché rimane al di fuori della logica di test e viene applicato uniformemente all'intera suite.
Sintesi
Gli ascoltatori sono tenuti a generare log o personalizzare TestNG rapporti in Selenium WebDriver.
- TestNG offre numerose interfacce di ascolto; scegli quella più adatta all'evento che ti interessa.
- I listener sono interfacce utilizzate in Selenium Script WebDriver per reagire agli eventi del ciclo di vita dei test.
- Il tutorial ha dimostrato ITest Listener con un test di superamento e uno di non superamento.
- È possibile collegare un listener con @Ascoltatori oppure registralo una volta testng.xml per l'intera suite.
- Selenium 4.x sostituisce EventFiringWebDriver con WebDriverListener + Decorazione per l'evento di accensione delle luci per gli eventi a livello di WebDriver.






