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.






