TestNG Oyentes en Selenium
โก Resumen inteligente
Oyentes en Selenium WebDriver son TestNG Interfaces que interceptan eventos de prueba para personalizar registros, informes y acciones posteriores a fallos. Este artรญculo explica los mรฉtodos de ITestListener y muestra un ejemplo ejecutable. Java ejemplo, y aclara cรณmo Selenium La versiรณn 4 reemplazรณ al WebDriverEventListener obsoleto.

Selenium Los scripts de WebDriver a menudo necesitan reaccionar a eventos de prueba como una aserciรณn pasada, un localizador fallido o un paso omitido. Los oyentes hacen eso posible. En tรฉrminos generales, Selenium Los proyectos dependen de dos familias de oyentes:
- Oyentes de WebDriver
- TestNG Oyentes
En este tutorial, nos centraremos en TestNG Oyentes, con una nota sobre cรณmo cambiaron los oyentes a nivel de WebDriver en Selenium 4.x.
ยฟQuรฉ es un oyente en TestNG?
Un Listener es una interfaz que modifica el comportamiento predeterminado de TestNG. Como su nombre lo indica, los Listeners โescuchanโ eventos definidos en un Selenium Escriba el script y reaccione en consecuencia. Los utiliza implementando la interfaz Listener correspondiente y registrรกndola en su clase o conjunto de pruebas. Los Listeners le permiten personalizar TestNG Informes, adjuntar capturas de pantalla y generar registros estructurados.
Tipos de oyentes en TestNG
TestNG La compaรฑรญa distribuye una familia de interfaces de escucha, y cada una estรก dirigida a una etapa diferente del ciclo de vida de las pruebas.
A continuaciรณn se muestran los mรกs utilizados TestNG oyentes:
- IAnotaciรณnTransformador
- IAnotaciรณnTransformer2
- Configurable
- IConfigurationListenerIConfigurationListener
- IExecutionListener
- Enganchable
- IInvokedMethodListener
- IInvokedMethodListener2
- IMรฉtodoInterceptor
- Reportero
- ISuiteListener
- ITestListener
Estas interfaces se utilizan en Selenium para generar registros o personalizar TestNG informes. En este tutorial, implementaremos ITestListener.
ITestListener expone los siguientes mรฉtodos:
- al inicio โ Se llama cuando comienza cualquier prueba.
- onTestSuccess โ Se llama cuando una prueba se supera.
- en caso de fallo de la prueba โ Se llama cuando falla una prueba.
- en prueba omitida โ Se llama cuando se omite una prueba.
- en prueba fallida pero dentro del porcentaje de รฉxito โ Se llama asรญ cuando una prueba falla, pero estรก dentro del porcentaje de รฉxito.
- onFinish โ Se llama despuรฉs de que se hayan ejecutado todas las pruebas de la clase.
Escenario de prueba
En este escenario de prueba, automatizaremos el proceso de inicio de sesiรณn e implementaremos ITestListener En contra.
- Lanza Firefox y abre el sitio https://demo.guru99.com/V4/
- Inicia sesiรณn en la aplicaciรณn.
Pasos para crear un TestNG Perfil
Para el escenario de prueba anterior, implementaremos el Listener paso a paso.
Paso 1) Crea una clase llamada Prueba de oyente que implementa ITestListener. Pase el cursor sobre la lรญnea roja subrayada y Eclipse Sugeriremos dos soluciones rรกpidas, como se muestra a continuaciรณn:
Haz clic en โAgregar mรฉtodos no implementadosโ. Se agregarรกn varios mรฉtodos stub (sin cuerpo) a tu cรณdigo, de forma similar a esto:
importar org.testng.ITestContext;
importar org.testng.ITestListener;
importar org.testng.ITestResult;
clase pรบblica Prueba de oyente implementos ITestListener {
@Anular
vacรญo pรบblico onFinish(Contexto de prueba de TI arg0) {
// TODO Mรฉtodo generado automรกticamente
}
@Anular
vacรญo pรบblico al inicio (Contexto de prueba de TI arg0) {
// TODO Mรฉtodo generado automรกticamente
}
@Anular
vacรญo pรบblico en prueba fallida pero dentro del porcentaje de รฉxito (Resultado de la prueba de TI arg0) {
// TODO Mรฉtodo generado automรกticamente
}
@Anular
vacรญo pรบblico onTestFailure(Resultado de la prueba de TI arg0) {
// TODO Mรฉtodo generado automรกticamente
}
@Anular
vacรญo pรบblico onTestSkipped(Resultado de la prueba de TI arg0) {
// TODO Mรฉtodo generado automรกticamente
}
@Anular
vacรญo pรบblico al inicio de la prueba (Resultado de la prueba de TI arg0) {
// TODO Mรฉtodo generado automรกticamente
}
@Anular
vacรญo pรบblico onTestSuccess(Resultado de la prueba de TI arg0) {
// TODO Mรฉtodo generado automรกticamente
}
}
Ahora modifiquemos el Prueba de oyente clase. En particular, completaremos los siguientes mรฉtodos: en caso de fallo de la prueba, enPruebaOmitida, al inicio de la prueba, y en caso de รฉxito de la prueba.
El cambio es sencillo: cada mรฉtodo imprime el nombre de la prueba para que la consola muestre claramente el estado de aprobado, reprobado y omitido.
Tras la modificaciรณn, el cรณdigo queda asรญ:
importar org.testng.ITestContext;
importar org.testng.ITestListener;
importar org.testng.ITestResult;
clase pรบblica Prueba de oyente implementos ITestListener {
@Anular
vacรญo pรบblico onFinish(Contexto de prueba de TI Resultado) {
}
@Anular
vacรญo pรบblico al inicio (Contexto de prueba de TI Resultado) {
}
@Anular
vacรญo pรบblico en prueba fallida pero dentro del porcentaje de รฉxito (Resultado de la prueba de TI Resultado) {
}
// Cuando falla un caso de prueba, se llama a este mรฉtodo.
@Anular
vacรญo pรบblico onTestFailure(Resultado de la prueba de TI Resultado) {
System.out.println (โEl nombre del caso de prueba que fallรณ es: โ + Resultado.getName());
}
// Cuando se omite un caso de prueba, se llama a este mรฉtodo.
@Anular
vacรญo pรบblico onTestSkipped(Resultado de la prueba de TI Resultado) {
System.out.println (โEl nombre del caso de prueba omitido es: โ + Resultado.getName());
}
// Este mรฉtodo se llama cuando se inicia un caso de prueba.
@Anular
vacรญo pรบblico al inicio de la prueba (Resultado de la prueba de TI Resultado) {
System.out.println(Result.getName() + โCaso de prueba iniciadoโ);
}
// Cuando una prueba se supera, se llama a este mรฉtodo.
@Anular
vacรญo pรบblico onTestSuccess(Resultado de la prueba de TI Resultado) {
System.out.println (โEl nombre del caso de prueba superado es: โ + Resultado.getName());
}
}
Paso 2) Crea otra clase llamada Casos de prueba para la automatizaciรณn del inicio de sesiรณn. Selenium Esta clase se ejecutarรก para iniciar sesiรณn en el sitio de demostraciรณn.
importar org.openqa.selenium.By;
importar org.openqa.selenium.WebDriver;
importar org.openqa.selenium.firefox.FirefoxConductor;
importar org.testng.Assert;
importar org.testng.annotations.Listeners;
importar org.testng.anotaciones.Prueba;
clase pรบblica Casos de prueba {
Controlador web conductor = ยกnuevos Socios! de FirefoxDestornillador();
// Prueba diseรฑada para pasar, para verificar el oyente de รฉxito.
@Prueba
vacรญo pรบblico Acceso() {
conductor.obtener(โhttps://demo.guru99.com/V4/โ);
conductor.findElement(Por.nombre(โuidโ)).sendKeys(โmngr34926โ);
conductor.findElement(Por.nombre("contraseรฑa")).sendKeys(โamUpenuโ);
conductor.findElement(Por.nombre(โbtnLoginโ)).hacer clic();
}
// Prueba fallida forzadamente, para verificar el detector de fallos.
@Prueba
vacรญo pรบblico TestToFail() {
System.out.println (โEste mรฉtodo de prueba fallaโ);
Afirmar.afirmarVerdadero(false);
}
}
Paso 3) A continuaciรณn, adjuntamos este oyente a nuestra clase de prueba. Casos de pruebaHay dos maneras de conectar una clase a una interfaz de escucha.
La primera forma es utilizar el @Oyentes anotaciรณn, como se muestra a continuaciรณn:
Agregamos esta anotaciรณn encima de la Casos de prueba clase. La clase quedarรญa asรญ:
importar org.openqa.selenium.By;
importar org.openqa.selenium.WebDriver;
importar org.openqa.selenium.firefox.FirefoxConductor;
importar org.testng.Assert;
importar org.testng.annotations.Listeners;
importar org.testng.anotaciones.Prueba;
@Listeners(Listener_Demo.ListenerTest.class)
clase pรบblica Casos de prueba {
Controlador web conductor = ยกnuevos Socios! de FirefoxDestornillador();
// Prueba para pasar, para verificar el oyente de รฉxito.
@Prueba
vacรญo pรบblico Acceso() {
conductor.obtener(โhttps://demo.guru99.com/V4/โ);
conductor.findElement(Por.nombre(โuidโ)).sendKeys(โmngr34926โ);
conductor.findElement(Por.nombre("contraseรฑa")).sendKeys(โamUpenuโ);
conductor.findElement(Por.nombre(โbtnLoginโ)).hacer clic();
}
// Prueba fallida forzadamente, para verificar el detector de fallos.
@Prueba
vacรญo pรบblico TestToFail() {
System.out.println (โEste mรฉtodo de prueba fallaโ);
Afirmar.afirmarVerdadero(false);
}
}
La estructura del proyecto es la siguiente:
Paso 4) Ejecute el Casos de prueba Clase. Mรฉtodos dentro Prueba de oyente se invocan automรกticamente en funciรณn del comportamiento de los mรฉtodos anotados con @Prueba.
Paso 5) Verifique la salida que se muestra en la consola.
La salida de Casos de prueba parece:
C:\Users\gauravn\AppData\Local\Temp\testng-eclipseโ1058076918\testng-customsuite.xml
Se ha iniciado el caso de prueba de inicio de sesiรณn.
El nombre del caso de prueba superado es: Login
Se ha iniciado el caso de prueba TestToFail.
Este mรฉtodo para probar falla
El nombre del caso de prueba que fallรณ es: TestToFail
APROBADO: Iniciar sesiรณn
FALLร: TestToFail
java.lang.AssertionError: se esperaba [true] pero se encontrรณ [false]
Uso de un oyente para mรบltiples clases
Si un proyecto tiene muchas clases de prueba, agregar la @Oyentes La anotaciรณn de cada uno se vuelve engorrosa y propensa a errores.
En ese caso, crea un pruebang.xml archiva y registra el oyente allรญ una sola vez.
Este detector de eventos se aplica a todo el conjunto de pruebas, independientemente del nรบmero de clases. Al ejecutar el archivo XML, el detector se activa para cada clase declarada en el conjunto, y se pueden encadenar varias clases detectoras dentro de la misma etiqueta.
WebDriverListener en Selenium 4 frente al obsoleto EventFiringWebDriver
Aunque TestNG Los oyentes reaccionan a los eventos del ciclo de vida de la prueba, los oyentes de WebDriver reaccionan a las acciones del controlador del navegador, como un clic, una navegaciรณn o una llamada findElement. En Selenium 3 El enfoque tรญpico fue el Oyente de eventos de WebDriver interfaz cableada a travรฉs de EventFiringWebDriverAmbos estรกn obsoletos en Selenium 4.x.
El reemplazo moderno es el WebDriverListener Interfaz combinada con Decorador de eventos:
importar org.openqa.selenium.chrome.ChromeDriver;
importar org.openqa.selenium.support.events.EventFiringDecorator;
importar org.openqa.selenium.support.events.WebDriverListener;
clase pรบblica LoggingListener implementos WebDriverListener {
@Anular
vacรญo pรบblico antes de obtener (Controlador web conductor, String url) {
System.out.println (โNavegando hacia โ + url);
}
}
Controlador web crudo = ยกnuevos Socios! de ChromeDriver();
Controlador web conductor = ยกnuevos Socios! de Decorador de eventos<>(ยกnuevos Socios! de LoggingListener()).decorate(raw);
El decorador puede envolver cualquier WebDriver, WebElement o Alert, lo que es mรกs flexible que el antiguo envoltorio de disparo de eventos. WebDriverListener para la observabilidad del lado del navegador y TestNG ITestListener para la generaciรณn de informes a nivel de suite.
Oyentes impulsados โโpor IA: Registros mรกs inteligentes y clasificaciรณn de fallos.
MODERNA Selenium Los equipos integran cada vez mรกs servicios de IA en sus oyentes para que las seรฑales de CI sean mรกs procesables. en caso de fallo de la prueba, un oyente asistido por IA puede capturar una instantรกnea del DOM mรกs una captura de pantalla, enviarlas a un modelo que devuelve un clรบster de causa raรญz probable y escribir una etiqueta de vuelta en el TestNG informe o una herramienta como ReportPortal.
Los patrones comunes impulsados โโpor la IA incluyen:
- Detecciรณn de pruebas defectuosas: Los oyentes envรญan cronogramas de aprobaciรณn/rechazo a un modelo que clasifica un fallo como inestable, ambiental o una regresiรณn real.
- Capturas de pantalla inteligentes: Los modelos de visiรณn artificial recortan, anotan y comparan las capturas de pantalla de la interfaz de usuario para que los revisores vean la regiรณn modificada en lugar de una pรกgina completa.
- Localizadores autorreparables: A WebDriverListener manos antesDeBuscarElemento y le pide a un asistente de IA que sugiera un localizador alternativo cuando el principal falle. Ninguna excepciรณn de elemento tal.
- Resรบmenes en lenguaje natural: An Reportero La implementaciรณn introduce los resultados del conjunto en un LLM que produce un resumen de un pรกrrafo.
La capa de escucha es el lugar mรกs limpio para inyectar estos ganchos porque se mantiene fuera de la lรณgica de la prueba y se aplica de manera uniforme en toda la suite.
Resumen
Los oyentes deben generar registros o personalizarlos TestNG informes en Selenium Controlador web.
- TestNG Ofrece numerosas interfaces de escucha; elige la que mejor se adapte al evento que te interesa.
- Los oyentes son interfaces utilizadas en Selenium Scripts de WebDriver para reaccionar a los eventos del ciclo de vida de las pruebas.
- El tutorial demostrรณ ITestListener con una prueba de aprobado y otra de suspenso.
- Puedes adjuntar un oyente con @Oyentes o registrarlo una vez en pruebang.xml para toda la suite.
- Selenium 4.x reemplaza EventFiringWebDriver con WebDriverListener + Decorador de eventos para eventos a nivel de WebDriver.






