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.

  • โ“ Cosa fanno gli ascoltatori: Si iscrivono a TestNG eventi come avvio, superamento, fallimento e salto per attivare hook di registrazione o di reporting.
  • ๐Ÿงฉ Dodici interfacce: TestNG Fornisce interfacce come ITestListener, ISuiteListener, IReporter, IInvokedMethodListener e IAnnotationTransformer per un controllo granulare.
  • ๏ธ Due modalitร  di cablaggio: Aggiungi un listener con l'annotazione @Listeners a una singola classe, oppure registralo una sola volta all'interno del file testng.xml per ogni suite.
  • ๐Ÿš€ Selenium 4 Aggiornamento: EventFiringWebDriver รจ obsoleto; l'interfaccia moderna WebDriverListener, insieme a EventFiringDecorator, gestisce ora gli hook degli eventi a livello di WebDriver.
  • ๐Ÿค– Angolo dell'IA: I listener assistiti dall'IA possono classificare automaticamente gli errori, allegare screenshot intelligenti e inviare segnali di test instabili alle dashboard di integrazione continua in tempo reale.

TestNG Ascoltatori dentro Selenium

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:

  1. Ascoltatori WebDriver
  2. 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:

  1. IAnotationTransformer
  2. IAnnotationTransformer2
  3. Configurabile
  4. IConfigurationListener
  5. IExecutionListener
  6. Collegabile
  7. IInvokedMethodListener
  8. IInvokedMethodListener2
  9. ImetodoIntercettore
  10. Reporter
  11. ISuite Listener
  12. 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.

  1. Lancio Firefox e aprire il sito https://demo.guru99.com/V4/

Scenario di test login URL

  1. Accedi all'applicazione.

Modulo di accesso allo scenario di test

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:

Eclipse soluzione rapida per aggiungere metodi non implementati

Fai clic su "Aggiungi metodi non implementati". Al tuo codice verranno aggiunti piรน metodi stub (senza corpo), in modo simile a questo:

pacchetto Dimostrazione per ascoltatori;

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รฌ:

pacchetto Dimostrazione per ascoltatori;

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.

pacchetto Dimostrazione per ascoltatori;

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:

@Listeners(Listener_Demo.ListenerTest.class)

Aggiungiamo questa annotazione sopra il Casi di test classe. La classe si presenta quindi in questo modo:

pacchetto Dimostrazione per ascoltatori;

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:

TestNG Struttura del progetto per gli ascoltatori

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:

TestNG output della console di ascolto

[TestNG] Corsa:
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.

tag listener testng.xml per piรน classi

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.WebDriver;
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.

DOMANDE FREQUENTI

Un Listener รจ un'interfaccia che si iscrive agli eventi generati durante un Selenium prova. TestNG I listener reagiscono agli eventi del ciclo di vita del test, come start, pass, fail e skip. I listener di WebDriver reagiscono agli eventi del driver del browser, come clic, navigazioni e chiamate findElement.

ITestListener si attiva per i singoli metodi @Test ed espone gli eventi onTestStart, onTestSuccess, onTestFailure, onTestSkipped e onFinish. ISuiteListener si attiva solo due volte per suite, con gli eventi onStart e onFinish, risultando ideale per configurazioni a livello di suite, come ad esempio l'apertura di un file di report.

Puoi registrarti a TestNG listener in due modi: aggiungi l'annotazione @Listeners(MyListener.class) sopra la classe di test oppure dichiara un Il tag รจ presente all'interno di testng.xml. L'approccio XML applica il listener a tutte le classi della suite senza modificare il codice sorgente.

EventFiringWebDriver e WebDriverEventListener sono deprecati in Selenium 4.x. La soluzione di sostituzione consigliata รจ l'interfaccia WebDriverListener combinata con EventFiringDecorator, che puรฒ incapsulare istanze di WebDriver, WebElement o Alert e offre punti di aggancio piรน puliti come beforeGet e afterClick.

Utilizza IReporter quando desideri generare un report personalizzato al termine della suite di test, ad esempio un riepilogo in formato HTML o JSON. Utilizza IInvokedMethodListener quando hai bisogno di un hook prima e dopo ogni metodo di test, inclusi i metodi di configurazione come @BeforeMethod e @AfterMethod.

I modelli di IA possono arricchire l'output del listener etichettando ogni voce di registro con la gravitร , generando descrizioni dei passaggi in linguaggio naturale e raggruppando gli errori correlati. All'interno di onTestFailure, un servizio di IA puรฒ analizzare lo screenshot e lo stack trace, quindi allegare una probabile causa principale al TestNG rapporto.

Sรฌ. Un ascoltatore puรฒ trasmettere in streaming la cronologia di successo/fallimento a un servizio di IA che classifica un errore come instabile, ambientale o una vera regressione. Il verdetto viene scritto come un TestNG attributo, in modo che le dashboard possano mettere in quarantena i test instabili senza che un essere umano esamini ogni build rossa.

Riassumi questo post con: