TestNG Ascultătorii în Selenium
⚡ Rezumat inteligent
Ascultătorii în Selenium WebDriver sunt TestNG interfețe care interceptează evenimente de testare pentru a personaliza jurnalele, rapoartele și acțiunile post-eșec. Acest articol explică metodele ITestListener, prezintă un instrument executabil Java exemplu și clarifică modul în care Selenium 4 a înlocuit versiunea depreciată WebDriverEventListener.

Selenium Scripturile WebDriver trebuie adesea să reacționeze la evenimente de testare, cum ar fi o aserțiune transmisă, un localizator eșuat sau un pas omis. Listener-ele fac acest lucru posibil. În general, Selenium Proiectele se bazează pe două familii de ascultători:
- WebDriver Ascultători
- TestNG ascultătorii
În acest tutorial, ne vom concentra asupra TestNG Listener-e, cu o notă despre cum s-au modificat listener-ele la nivel de WebDriver în Selenium 4.x.
Ce este un ascultător în TestNG?
Un Listener este o interfață care modifică comportamentul implicit al TestNGAșa cum sugerează și numele, ascultătorii „ascultă” evenimentele definite într-un Selenium script și reacționează în consecință. Le utilizați implementând interfața Listener relevantă și înregistrând-o în clasa sau suita de testare. Listener-ele vă permit să personalizați TestNG rapoarte, atașarea de capturi de ecran și emiterea de jurnale structurate.
Tipuri de ascultători în TestNG
TestNG livrează o familie de interfețe de ascultare, fiecare dintre ele vizează o etapă diferită a ciclului de viață al testării.
Mai jos sunt cele utilizate în mod obișnuit TestNG ascultători:
- IAnnotationTransformer
- IAnnotationTransformer2
- IConfigurabil
- IConfigurationListener
- IExecutionListener
- IHookable
- IInvokedMethodListener
- IIInvokedMethodListener2
- IMethodInterceptor
- Reporter
- ISuiteListener
- ITestListener
Aceste interfețe sunt utilizate în Selenium pentru a genera jurnale sau a personaliza TestNG rapoarte. În acest tutorial, vom implementa ITestListener.
ITestListener expune următoarele metode:
- laStart – apelat la începerea oricărui test.
- onTestSuccess – apelat când un test este trecut.
- onTestFailure – apelat atunci când un test eșuează.
- onTestSkipped – apelat atunci când un test este omis.
- laTestEșuatDarÎnRaportProcentajSucces – apelat atunci când un test eșuează, dar se încadrează în procentul de succes.
- laFinalizare – apelată după executarea tuturor testelor din clasă.
Scenariu de testare
În acest scenariu de testare, vom automatiza procesul de conectare și vom implementa ITestListener impotriva.
- Lansa Firefox și deschide site-ul https://demo.guru99.com/V4/
- Conectați-vă la aplicație.
Pași pentru a crea a TestNG ascultător
Pentru scenariul de testare de mai sus, vom implementa Listener-ul pas cu pas.
Pas 1) Creați o clasă numită Test de ascultare care implementează ITestListenerPlasați cursorul peste sublinierea roșie și Eclipse va sugera două soluții rapide, așa cum se arată mai jos:
Faceți clic pe „Adăugați metode neimplementate”. Mai multe metode stub (fără corp) sunt adăugate la codul dvs., similar cu acesta:
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
clasa publica Test de ascultare ustensile ITestListener {
@Trece peste
vid public laTerminare(ITestContext arg0) {
// TODO Stub de metodă generat automat
}
@Trece peste
vid public laStart(ITestContext arg0) {
// TODO Stub de metodă generat automat
}
@Trece peste
vid public laTestEșuatDarÎnRaportProcentajSucces(RezultatTestIT arg0) {
// TODO Stub de metodă generat automat
}
@Trece peste
vid public la eșecul testului (RezultatTestIT arg0) {
// TODO Stub de metodă generat automat
}
@Trece peste
vid public onTestSkipped(RezultatTestIT arg0) {
// TODO Stub de metodă generat automat
}
@Trece peste
vid public laTestStart(RezultatTestIT arg0) {
// TODO Stub de metodă generat automat
}
@Trece peste
vid public laTestSucces(RezultatTestIT arg0) {
// TODO Stub de metodă generat automat
}
}
Acum haideți să modificăm Test de ascultare clasă. În special, vom completa următoarele metode: onTestFailure, onTestSkipped, laTestStart și onTestSucces.
Schimbarea este simplă: fiecare metodă afișează numele testului, astfel încât consola să afișeze clar starea de trecere, eșec și omitere.
După modificare, codul arată astfel:
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
clasa publica Test de ascultare ustensile ITestListener {
@Trece peste
vid public laTerminare(ITestContext Rezultat) {
}
@Trece peste
vid public laStart(ITestContext Rezultat) {
}
@Trece peste
vid public laTestEșuatDarÎnRaportProcentajSucces(RezultatTestIT Rezultat) {
}
// Când un caz de test eșuează, se apelează această metodă.
@Trece peste
vid public la eșecul testului (RezultatTestIT Rezultat) {
System.out.println(„Numele cazului de testare eșuat este:” + Rezultat.getName());
}
// Când un caz de test este omis, se apelează această metodă.
@Trece peste
vid public onTestSkipped(RezultatTestIT Rezultat) {
System.out.println(„Numele cazului de test omis este:” + Rezultat.getName());
}
// Când pornește un caz de testare, se apelează această metodă.
@Trece peste
vid public laTestStart(RezultatTestIT Rezultat) {
System.out.println(Rezultat.getName() + „caz de testare început”);
}
// Când un caz de test trece, se apelează această metodă.
@Trece peste
vid public laTestSucces(RezultatTestIT Rezultat) {
System.out.println(„Numele cazului de testare aprobat este:” + Rezultat.getName());
}
}
Pas 2) Creați o altă clasă numită Cazuri de testare pentru automatizarea autentificării. Selenium va executa această clasă pentru a vă conecta la site-ul demo.
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxȘoferi;
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
clasa publica Cazuri de testare {
webdriver șofer = nou FirefoxŞofer,
// Test conceput să fie aprobat, pentru a verifica succesul ascultătorului.
@Test
vid public Log in() {
driver.get(„https://demo.guru99.com/V4/”);
driver.findElement(După.nume(„fluid”)).sendKeys(„mngr34926”);
driver.findElement(După.nume("Parola")).sendKeys(„amUpenu”);
driver.findElement(După.nume(„btnLogin”)).clic();
}
// Test eșuat forțat, pentru a verifica listener-ul de erori.
@Test
vid public TestToFail() {
System.out.println(„Această metodă de testare eșuează”);
Assert.assertTrue(fals);
}
}
Pas 3) Apoi, atașează acest ascultător la clasa noastră de test Cazuri de testareExistă două moduri de a conecta o clasă la o interfață de ascultare.
Prima modalitate este de a folosi @Ascultători adnotare, așa cum se arată mai jos:
Adăugăm această adnotare deasupra Cazuri de testare clasă. Clasa arată apoi astfel:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxȘoferi;
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners(Listener_Demo.ListenerTest.class)
clasa publica Cazuri de testare {
webdriver șofer = nou FirefoxŞofer,
// Test pentru a trece, pentru a verifica ascultătorul de succes.
@Test
vid public Log in() {
driver.get(„https://demo.guru99.com/V4/”);
driver.findElement(După.nume(„fluid”)).sendKeys(„mngr34926”);
driver.findElement(După.nume("Parola")).sendKeys(„amUpenu”);
driver.findElement(După.nume(„btnLogin”)).clic();
}
// Test eșuat forțat, pentru a verifica listener-ul de erori.
@Test
vid public TestToFail() {
System.out.println(„Această metodă de testare eșuează”);
Assert.assertTrue(fals);
}
}
Structura proiectului arată astfel:
Pas 4) Executați Cazuri de testare clasă. Metode din interiorul Test de ascultare sunt invocate automat pe baza comportamentului metodelor adnotate cu @Test.
Pas 5) Verificați ieșirea afișată în consolă.
Rezultatul Cazuri de testare se pare ca:
C:\Utilizatori\gauravn\AppData\Local\Temp\testng-eclipse–1058076918\testng-customsuite.xml
Cazul de testare a autentificării a început
Numele cazului de testare aprobat este: Autentificare
Cazul de testare TestToFail a început
Această metodă de testare eșuează
Numele cazului de test eșuat este: TestToFail
TRECUT: Autentificare
EȘUAT: TestToFail
java.lang.AssertionError: se aștepta [true] dar s-a găsit [false]
Utilizarea unui Listener pentru mai multe clase
Dacă un proiect are mai multe clase de testare, adăugarea @Ascultători adnotarea pentru fiecare dintre ele devine greoaie și predispusă la erori.
În acest caz, creați un testng.xml fișierul și înregistrează ascultătorul acolo o dată.
Acest listener este apoi aplicat întregii suite de teste, indiferent de numărul de clase. Când rulați fișierul XML, listener-ul se declanșează pentru fiecare clasă declarată în suită și puteți înlănțui orice număr de clase listener în cadrul aceleiași etichete.
WebDriverListener în Selenium 4 vs. EventFiringWebDriver-ul depreciat
In timp ce TestNG ascultătorii reacționează la evenimentele ciclului de viață al testului, ascultătorii WebDriver reacționează la acțiunile driverului de browser, cum ar fi un clic, o navigare sau un apel findElement. În Selenium 3 abordarea tipică a fost WebDriverEventListener interfață cablată prin Driver Web de Declanșare a EvenimentelorAmbele sunt depreciate în Selenium 4.x.
Înlocuitorul modern este WebDriverListener interfață combinată cu Decorator de eveniment:
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.events.EventFiringDecorator;
import org.openqa.selenium.support.events.WebDriverListener;
clasa publica LoggingListener ustensile WebDriverListener {
@Trece peste
vid public înainte de a obține (webdriver driver, URL-ul șirului de caractere) {
System.out.println(„Navigare către” + adresa URL);
}
}
webdriver brut = nou ChromeDriver,
webdriver șofer = nou Decorator de eveniment<>(nou LoggingListener()).decorate(raw);
Decoratorul poate încadra orice WebDriver, WebElement sau Alert, ceea ce este mai flexibil decât vechiul wrapper de declanșare a evenimentelor. Folosește WebDriverListener pentru observabilitatea din partea browserului și TestNG ITestListener pentru raportare la nivel de suită.
Listenere bazate pe inteligență artificială: jurnale mai inteligente și triere a defecțiunilor
Modern Selenium Echipele conectează din ce în ce mai mult serviciile de inteligență artificială la ascultătorii lor pentru a face semnalele CI mai ușor de utilizat. În interior onTestFailure, un ascultător asistat de inteligență artificială poate captura o imagine DOM plus o captură de ecran, le poate trimite către un model care returnează un cluster cu cauza principală probabilă și poate scrie o etichetă înapoi în TestNG un raport sau un instrument precum ReportPortal.
Printre modelele comune bazate pe inteligență artificială se numără:
- Detectarea testului de coajă: Ascultătorii transmit cronologii de succes/eșec către un model care clasifică o eroare ca fiind instabilă, de mediu sau o regresie reală.
- Capturi de ecran inteligente: Modelele de viziune computerizată decupează, adnotează și diferențiază capturile de ecran ale interfeței utilizator, astfel încât recenzorii să vadă regiunea modificată în loc de o imagine de pe o pagină întreagă.
- Localizatoare cu auto-vindecare: A WebDriverListener cârlige înainte de a găsi elementul și cere unui asistent AI să sugereze un localizator alternativ atunci când cel principal aruncă NoSuchElementException.
- Rezumate în limbaj natural: An Reporter Implementarea introduce rezultatele suitei într-un LLM care produce un rezumat stand-up de un paragraf.
Stratul de ascultare este cel mai curat loc pentru a injecta aceste hook-uri, deoarece rămâne în afara logicii de testare și se aplică uniform în întreaga suită.
Rezumat
Ascultătorii trebuie să genereze jurnalele sau să personalizeze TestNG raportează în Selenium WebDriver.
- TestNG oferă multe interfețe de ascultare; alegeți-o pe cea care se potrivește evenimentului care vă interesează.
- Ascultătorii sunt interfețe folosite în Selenium Scripturi WebDriver pentru a reacționa la evenimentele ciclului de viață al testării.
- Tutorialul a demonstrat ITestListener cu un test promovat și unul eșuat.
- Puteți atașa un ascultător cu @Ascultători sau înregistrați-l o dată în testng.xml pentru întreaga suită.
- Selenium 4.x înlocuiește Driver Web de Declanșare a Evenimentelor implementate cu WebDriverListener + Decorator de eveniment pentru evenimente la nivel de WebDriver.






