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.

  • โ“ Quรฉ hacen los oyentes: Se suscriben a TestNG Eventos como inicio, รฉxito, fallo y omisiรณn para activar el registro o los informes.
  • ๐Ÿงฉ Doce interfaces: TestNG Incluye interfaces como ITestListener, ISuiteListener, IReporter, IInvokedMethodListener e IAnnotationTransformer para un control granular.
  • ๐Ÿ› ๏ธ Dos modos de cableado: Aรฑada un detector de eventos con la anotaciรณn @Listeners a una sola clase, o regรญstrelo una sola vez dentro de testng.xml para cada conjunto de pruebas.
  • ๐Ÿš€ Selenium Actualizaciรณn 4: EventFiringWebDriver estรก obsoleto; la interfaz moderna WebDriverListener, junto con EventFiringDecorator, ahora gestiona los ganchos de eventos a nivel de WebDriver.
  • ๐Ÿค– Perspectiva de la IA: Los sistemas de escucha asistidos por IA pueden clasificar automรกticamente los fallos, adjuntar capturas de pantalla inteligentes y enviar seรฑales de pruebas inestables a los paneles de control de CI en tiempo real.

TestNG Oyentes en Selenium

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:

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

  1. IAnotaciรณnTransformador
  2. IAnotaciรณnTransformer2
  3. Configurable
  4. IConfigurationListenerIConfigurationListener
  5. IExecutionListener
  6. Enganchable
  7. IInvokedMethodListener
  8. IInvokedMethodListener2
  9. IMรฉtodoInterceptor
  10. Reportero
  11. ISuiteListener
  12. 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.

  1. Lanza Firefox y abre el sitio https://demo.guru99.com/V4/

Inicio de sesiรณn del escenario de prueba URL

  1. Inicia sesiรณn en la aplicaciรณn.

Formulario de inicio de sesiรณn del escenario de prueba

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:

Eclipse Soluciรณn rรกpida para agregar mรฉtodos no implementados

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:

PARA DOS Demostraciรณn del oyente;

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

PARA DOS Demostraciรณn del oyente;

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.

PARA DOS Demostraciรณn del oyente;

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:

@Listeners(Listener_Demo.ListenerTest.class)

Agregamos esta anotaciรณn encima de la Casos de prueba clase. La clase quedarรญa asรญ:

PARA DOS Demostraciรณn del oyente;

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:

TestNG Estructura del proyecto del oyente

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:

TestNG Salida de la consola del oyente

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

Etiqueta de escucha de testng.xml para mรบltiples clases

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

Preguntas Frecuentes

Un Listener es una interfaz que se suscribe a los eventos generados durante un Selenium prueba de funcionamiento. TestNG Los oyentes reaccionan a los eventos del ciclo de vida de las pruebas, como inicio, รฉxito, fallo y omisiรณn. Los oyentes de WebDriver reaccionan a los eventos del controlador del navegador, como clics, navegaciones y llamadas a findElement.

ITestListener se activa para cada mรฉtodo @Test individual y expone los eventos onTestStart, onTestSuccess, onTestFailure, onTestSkipped y onFinish. ISuiteListener se activa solo dos veces por suite, con los eventos onStart y onFinish, lo que lo hace ideal para la configuraciรณn a nivel de suite, como la apertura de un archivo de informe.

Puede registrar un TestNG oyente de dos maneras: agregue la anotaciรณn @Listeners(MyListener.class) encima de la clase de prueba, o declare un etiqueta dentro de testng.xml. El enfoque XML aplica el detector a todas las clases del conjunto sin modificar el cรณdigo fuente.

EventFiringWebDriver y WebDriverEventListener estรกn obsoletos en Selenium 4.x. La alternativa recomendada es la interfaz WebDriverListener combinada con EventFiringDecorator, que puede encapsular instancias de WebDriver, WebElement o Alert y ofrece puntos de conexiรณn mรกs limpios, como beforeGet y afterClick.

Utilice IReporter cuando desee generar un informe personalizado al finalizar la suite, como un resumen en HTML o JSON. Utilice IInvokedMethodListener cuando necesite un gancho antes y despuรฉs de cada mรฉtodo de prueba, incluidos los mรฉtodos de configuraciรณn como @BeforeMethod y @AfterMethod.

Los modelos de IA pueden enriquecer la salida del oyente etiquetando cada entrada del registro con la gravedad, generando descripciones de pasos en lenguaje natural y agrupando fallos relacionados. Dentro de onTestFailure, un servicio de IA puede analizar la captura de pantalla y la pila. trace, luego adjuntar una causa raรญz probable a la TestNG .

Sรญ. Un oyente puede transmitir el historial de aprobados/reprobados a un servicio de IA que clasifica un fallo como inestable, ambiental o una regresiรณn real. El veredicto se escribe de vuelta como un TestNG atributo, para que los paneles puedan poner en cuarentena las pruebas inestables sin que un humano revise cada compilaciรณn que presente errores.

Resumir este post con: