¡Paz, trabajo, mayo, residentes de Khabrovsk! Para aquellos que, como nosotros, irrumpen en la semana laboral entre vacaciones, hemos preparado una traducción que queremos coincidir con el inicio de la inscripción en el curso de
Ingeniero de Java QA , que está programado para el 28 de mayo.
TestNG es un marco de prueba creado por Cédric Beust que nos ayuda a satisfacer muchas de nuestras necesidades de prueba. TestNG se usa ampliamente con selenio. ¿Quieres saber qué significa NG? Esto significa
"Próxima Generación" . TestNG es similar a JUnit, pero es más poderoso cuando se trata de controlar el flujo de su programa. La arquitectura del marco nos ayuda a hacer que las pruebas sean más estructuradas y a proporcionar mejores puntos de validación.
Algunas características de TestNG que merecen atención:
- Anotaciones potentes y variadas para respaldar sus casos de prueba.
- Ejecución de pruebas en paralelo, utilizando dependencias entre pruebas.
- La flexibilidad para ejecutar sus pruebas en diferentes conjuntos de datos, a través del archivo TestNG.xml o mediante el concepto de proveedores de datos.
- Agrupación y priorización de casos de prueba.
- Generación de informes HTML, personalización mediante diversos complementos.
- Generación de registros de ejecución de prueba.
- Fácil integración con Eclipse, Maven, Jenkins, etc.
Por lo general, el proceso de prueba con TestNG incluye los siguientes pasos:

Antes de pasar a las anotaciones de TestNG para Selenium, describimos los requisitos previos para configurar TestNG.
Prerrequisitos:
- Kit de desarrollo de Java
- Eclipse o cualquier otro IDE
- TestNG instalado en Eclipse o en su IDE
Nota: Las anotaciones de Java solo se pueden usar con Java versión 1.5 y superior.
Si es nuevo en TestNG, consulte el artículo sobre cómo ejecutar el
primer script de automatización con TestNG .
Entonces, ¿qué es una anotación?Una anotación es una etiqueta que proporciona información adicional sobre una clase o método ( Nota del traductor: las anotaciones en java pueden aplicarse no solo a clases y métodos, sino también a otros elementos ). Para las anotaciones, se usa el prefijo "@". TestNG utiliza anotaciones para ayudar a crear un marco de prueba robusto. Veamos las anotaciones de TestNG utilizadas para automatizar las pruebas con Selenium.
@Test
Esta es la anotación más importante en TestNG, que contiene la lógica principal de la prueba . Todas las funciones automatizadas están en el método con la anotación
@Test
. Tiene varios atributos con los que se puede configurar el inicio del método.
El siguiente código de ejemplo verifica la transición de la URL:
@Test public void testCurrentUrl() throws InterruptedException { driver.findElement(By.xpath("//*[@id='app']/header/aside/ul/li[4]/a")) .click(); String currentUrl = driver.getCurrentUrl(); assertEquals( currentUrl, "https://automation.lambdatest.com/timeline/?viewType=build&page=1", "url did not matched"); }
@BeforeTest
Se ejecuta un método con esta anotación antes de que se ejecute el primer método con la anotación @Test
. (Nota del traductor: como parte de la prueba definida en la sección de test
del archivo de configuración xml) . Puede usar esta anotación en TestNG con Selenium para configurar su navegador. Por ejemplo, inicie un navegador y amplíelo a pantalla completa, configure ajustes específicos del navegador, etc.
A continuación se muestra un ejemplo de BeforeTest, en el que el navegador se expande a pantalla completa:
@BeforeTest public void profileSetup() { driver.manage().window().maximize(); }
@AfterTest
Los métodos marcados con esta anotación se ejecutan después de todos los métodos @Test
de su prueba. (
Nota del traductor: como parte de la prueba definida en la sección de test
en el archivo de configuración xml, la "clase actual" no está escrita correctamente en el original ). Esta es una anotación útil que es útil para proporcionar resultados de pruebas. Puede usar esta anotación para crear un informe sobre sus pruebas y enviarlo por correo electrónico a las partes interesadas.
Ejemplo de código:
@AfterTest public void reportReady() { System.out.println("Report is ready to be shared, with screenshots of tests"); }
@BeforeMethod
Los métodos con esta anotación se ejecutan antes de cada método @Test
. Puede usarlo para probar la conexión a la base de datos antes de ejecutar la prueba. O, por ejemplo, al probar la funcionalidad que depende del inicio de sesión del usuario, coloque el código para ingresar al sistema aquí.
El siguiente es un fragmento de código que muestra el inicio de sesión de LambdaTest:
@BeforeMethod public void checkLogin() { driver.get("https://accounts.lambdatest.com/login"); driver.findElement(By.xpath("//input[@name='email']")).sendKeys("sadhvisingh24@gmail.com"); driver.findElement(By.xpath("//input[@name='password']")).sendKeys("activa9049"); driver.findElement(By.xpath("//*[@id='app']/section/form/div/div/button")).click(); }
@AfterMethod
Los métodos con esta anotación se @Test
después de cada método @Test
. Puede usar esta anotación para tomar capturas de pantalla cada vez que ejecute la prueba.
El siguiente es un fragmento de código que muestra cómo tomar una captura de pantalla:
@AfterMethod public void screenShot() throws IOException { TakesScreenshot scr = ((TakesScreenshot) driver); File file1 = scr.getScreenshotAs(OutputType.FILE); FileUtils.copyFile(file1, new File(":\\test-output\\test1.PNG")); }
@BeforeClass
Se ejecutará un método con esta anotación antes del primer método de prueba en la clase actual. Puede usar esta anotación para configurar las propiedades del navegador, inicializar el controlador, abrir un navegador con la URL deseada, etc.
Código de muestra para BeforeClass:
@BeforeClass public void appSetup() { driver.get(url); }
@AfterClass
Un método con esta anotación se ejecutará después del último método de prueba en la clase actual. Esta anotación en TestNG se puede utilizar para realizar acciones para limpiar recursos después de que se complete la prueba, como cerrar el controlador, etc.
El siguiente es un ejemplo de un fragmento de código que muestra el cierre del controlador:
@AfterClass public void closeUp() { driver.close(); }
@BeforeSuite
Un conjunto de pruebas (suite) puede constar de varias clases, esta anotación se ejecuta antes de todos los métodos de prueba de todas las clases.
Esta anotación marca el punto de entrada al inicio. La
@BeforeSuite
en TestNG se puede utilizar para realizar funciones comunes, como configurar y ejecutar Selenium o controladores web remotos, etc.
Un ejemplo de anotación
@BeforeSuite
en TestNG que muestra la configuración del controlador:
@BeforeSuite public void setUp() { System.setProperty( "webdriver.chrome.driver", ":\\selenium\\chromedriver.exe"); driver = new ChromeDriver(); }
@AfterSuite
Esta anotación en TestNG comienza después de que se hayan ejecutado todos los métodos de prueba en todas las clases. Esta anotación se puede usar para limpiar antes de completar las pruebas cuando usa varias clases, por ejemplo, cerrar controladores, etc.
A continuación se muestra un fragmento de código para la anotación
@AfterSuite
en TestNG para Selenium:
@AfterSuite public void cleanUp() { System.out.println("All close up activities completed"); }
@BeforeGroups
TestNG puede agrupar pruebas usando el atributo group en las anotaciones
@Test
. Por ejemplo, si desea que se combinen todas las funciones similares relacionadas con la gestión de usuarios, puede marcar las pruebas, como el panel de control (panel de usuario), el perfil (perfil), las transacciones (transacciones) y similares, en un grupo, como user_management. La
@BeforeGroups
en TestNG ayuda a iniciar ciertas acciones frente al grupo de prueba especificado. Esta anotación se puede usar si el grupo se enfoca en una funcionalidad, como se indica en el ejemplo anterior. La
@BeforeGroup
puede contener una función de inicio de sesión que se requiere para ejecutar pruebas en un grupo, por ejemplo, probar un panel de usuario, perfil de usuario, etc.
Un ejemplo de uso de
@BeforeGroups
:
@BeforeGroups("urlValidation") public void setUpSecurity() { System.out.println("url validation test starting"); }
@AfterGroups
Esta anotación se inicia después de que se hayan ejecutado todos los métodos de prueba del grupo especificado.Código de muestra para la anotación
@AfterGroups
en TestNG para Selenium:
@AfterGroups("urlValidation") public void tearDownSecurity() { System.out.println("url validation test finished"); }
EjemploEl siguiente código muestra ejemplos del uso de todas las anotaciones discutidas anteriormente:
import org.apache.commons.io.FileUtils; import org.openqa.selenium.By; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.*; import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; import static org.testng.Assert.assertEquals; public class AnnotationsTestNG { private WebDriver driver; private String url = "https://www.lambdatest.com/"; @BeforeSuite public void setUp() { System.setProperty( "webdriver.chrome.driver", ":\\selenium\\chromedriver.exe"); driver = new ChromeDriver(); driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); System.out.println("The setup process is completed"); } @BeforeTest public void profileSetup() { driver.manage().window().maximize(); System.out.println("The profile setup process is completed"); } @BeforeClass public void appSetup() { driver.get(url); System.out.println("The app setup process is completed"); } @BeforeMethod public void checkLogin() { driver.get("https://accounts.lambdatest.com/login"); driver.findElement(By.xpath("//input[@name='email']")).sendKeys("sadhvisingh24@gmail.com"); driver.findElement(By.xpath("//input[@name='password']")).sendKeys("activa9049"); driver.findElement(By.xpath("//*[@id='app']/section/form/div/div/button")).click(); System.out.println("The login process on lamdatest is completed"); } @Test(groups = "urlValidation") public void testCurrentUrl() throws InterruptedException { driver.findElement(By.xpath("//*[@id='app']/header/aside/ul/li[4]/a")).click(); Thread.sleep(6000); String currentUrl = driver.getCurrentUrl(); assertEquals(currentUrl, "https://automation.lambdatest.com/timeline/?viewType=build&page=1", "url did not matched"); System.out.println("The url validation test is completed"); } @AfterMethod public void screenShot() throws IOException { TakesScreenshot scr = ((TakesScreenshot) driver); File file1 = scr.getScreenshotAs(OutputType.FILE); FileUtils.copyFile(file1, new File(":\\test-output\\test1.PNG")); System.out.println("Screenshot of the test is taken"); } @AfterClass public void closeUp() { driver.close(); System.out.println("The close_up process is completed"); } @AfterTest public void reportReady() { System.out.println("Report is ready to be shared, with screenshots of tests"); } @AfterSuite public void cleanUp() { System.out.println("All close up activities completed"); } @BeforeGroups("urlValidation") public void setUpSecurity() { System.out.println("url validation test starting"); } @AfterGroups("urlValidation") public void tearDownSecurity() { System.out.println("url validation test finished"); } }
Informe TestNG:
Salida de consola:
Nota del traductor:
- para ejecutar la prueba, cambie la ruta a chromedriver.exe en el método setUp () y la ruta a la carpeta de captura de pantalla en el método screenShot (). Además, para una ejecución de prueba exitosa, el método checkLogin () debe tener un nombre de usuario y contraseña válidos.
- Dependencias maven usadas:
<dependencies> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.14.3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-chrome-driver</artifactId> <version>3.141.59</version> <scope>test</scope> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> <scope>test</scope> </dependency> </dependencies>
TestNG secuencia de anotaciones para selenioLas anotaciones descritas anteriormente se realizan en tiempo de ejecución en el siguiente orden:
- Beforesuite
- Antes de la prueba
- Clase anterior
- BeforeGroups
- Antes del método
- Prueba
- Método posterior
- Aftergroups
- Afterclass
- Después de la prueba
- Después de baño
Aquí está el orden de su ejecución:
Atributos utilizados con anotaciones en TestNGLas anotaciones en TestNG tienen atributos que puede usar para personalizar. Ayudan a configurar el orden de ejecución de los métodos de prueba.
Estos atributos son:
- descripción : puede especificar una descripción del método de prueba.
Por ejemplo, @Test
(description = "esta prueba comprueba el inicio de sesión"). - alwaysRun : este atributo asegura que el método de prueba siempre se ejecutará, incluso si se eliminan las pruebas de las que depende. Cuando el valor del atributo es verdadero, este método siempre se ejecutará.
Por ejemplo, @Test
(alwaysRun = true). - dataProvider : establece el nombre del proveedor de datos para el método de prueba. Suponga que va a ejecutar sus pruebas en varios navegadores, luego en el método de prueba con el atributo dataProvider, puede agregar parámetros para el navegador y su versión, que el proveedor de datos pasará al método. En este caso, la prueba que contiene este atributo utilizará esta entrada para ejecutar las pruebas en varios navegadores.
Por ejemplo, @Test
(dataProvider = "cross-browser-testing"). - depende de los métodos : proporciona información sobre el orden en que se ejecutan las pruebas. Una prueba con este atributo se ejecutará solo si la prueba de la que depende es exitosa. Si la prueba de la que depende el método cae, entonces la prueba no comienza.
Por ejemplo, @Test
(dependOnmethod = "login"). - grupos : ayuda a agrupar sus métodos de prueba centrados en una funcionalidad en un grupo.
Por ejemplo, @Test
(groups = ”Payment_Module”).
Este atributo también le permite controlar qué pruebas ejecutar. Cuando ejecuta pruebas, puede ignorar algunos grupos o, por el contrario, ejecutar solo algunos grupos. Todo lo que necesita hacer es especificar los grupos necesarios en el archivo TestNG.xml. En la etiqueta de include
, especifique los grupos que desea ejecutar y en la etiqueta de exclude
que desea ignorar. - depende de los grupos : realiza las funciones de dos de los atributos anteriores, es decir, determina la dependencia del método de prueba en el grupo especificado. Este método de prueba se iniciará solo después de que se complete el grupo de pruebas especificado.
Por ejemplo, @Test
(dependOnMethods = "Payment_Module"). - prioridad : nos ayuda a priorizar los métodos de prueba. Cuando TestNG ejecuta los métodos de prueba, puede hacerlo en orden aleatorio. En un escenario en el que desea que sus pruebas se ejecuten en el orden correcto, puede usar el atributo de prioridad. La prioridad predeterminada para todos los métodos de prueba es 0. Primero, las pruebas se ejecutan con un valor de prioridad más bajo.
Por ejemplo, @Test
(prioridad = 1), @Test
(prioridad = 2). En este caso, la prueba con prioridad igual a uno se ejecutará primero y luego la prueba con prioridad dos. - habilitado : este atributo se usa cuando necesita ignorar y no ejecutar una prueba específica. Todo lo que tienes que hacer es configurarlo como falso.
Por ejemplo, @Test
(enabled = false). - tiempo de espera : define el tiempo durante el cual se debe completar la prueba. Si la ejecución de la prueba excede el tiempo especificado por el atributo, la prueba fallará con una excepción lanzando org.testng.internal.thread.ThreadTimeoutException
Por ejemplo, @Test
(timeOut = 500). Tenga en cuenta que el tiempo se indica en milisegundos . - invocationCount : funciona como un bucle. La prueba se ejecutará tantas veces como se especifique en invocationCount.
Por ejemplo, @Test
(invocationCount = 5) se ejecutará 5 veces. - invocationTimeOut : se utiliza junto con el atributo invocationCount anterior. El valor de este atributo junto con invocationCount indica que la prueba se ejecutará tantas veces como se especifique en invocationCount y durante el tiempo especificado en el atributo invocationTimeOut.
Por ejemplo, @Test
(invocationCount = 5, invocationTimeOut = 20). - pectedExceptions : ayuda a manejar las excepciones que se espera que se generen en el método de prueba. Si el método de prueba genera la excepción especificada en el atributo, la prueba fue exitosa. De lo contrario, la ausencia de una excepción o el lanzamiento de otra excepción no especificada en el atributo fallará la prueba.
Por ejemplo, @Test
( @Test
= {ArithmeticException.class}).
Arriba están los atributos utilizados con anotaciones en TestNG con Selenium. El siguiente es un fragmento de código que demuestra el uso de los atributos anteriores:
import static org.testng.Assert.assertEquals; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.openqa.selenium.By; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterGroups; import org.testng.annotations.AfterMethod; import org.testng.annotations.AfterSuite; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeGroups; import org.testng.annotations.BeforeSuite; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; public class AnnotationsTest { private WebDriver driver; private String url = "https://www.lambdatest.com/"; @BeforeSuite public void setUp() { System.setProperty( "webdriver.chrome.driver", ":\\selenium\\chromedriver.exe"); driver = new ChromeDriver(); System.out.println("The setup process is completed"); } @BeforeTest public void profileSetup() { driver.manage().window().maximize(); System.out.println("The profile setup process is completed"); } @BeforeClass public void appSetup() { driver.get(url); System.out.println("The app setup process is completed"); } @Test(priority = 2) public void checkLogin() { driver.get("https://accounts.lambdatest.com/login"); driver.findElement(By.xpath("//input[@name='email']")).sendKeys("sadhvisingh24@gmail.com"); driver.findElement(By.xpath("//input[@name='password']")).sendKeys("xxxxx"); driver.findElement(By.xpath("//*[@id='app']/section/form/div/div/button")).click(); System.out.println("The login process on lamdatest is completed"); } @Test(priority = 0, description = "this test validates the sign-up test") public void signUp() throws InterruptedException { WebElement link = driver.findElement(By.xpath("//a[text()='Free Sign Up']")); link.click(); WebElement organization = driver.findElement(By.xpath("//input[@name='organization_name']")); organization.sendKeys("LambdaTest"); WebElement firstName = driver.findElement(By.xpath("//input[@name='name']")); firstName.sendKeys("Test"); WebElement email = driver.findElement(By.xpath("//input[@name='email']")); email.sendKeys("User622@gmail.com"); WebElement password = driver.findElement(By.xpath("//input[@name='password']")); password.sendKeys("TestUser123"); WebElement phoneNumber = driver.findElement(By.xpath("//input[@name='phone']")); phoneNumber.sendKeys("9412262090"); WebElement termsOfService = driver.findElement(By.xpath("//input[@name='terms_of_service']")); termsOfService.click(); WebElement button = driver.findElement(By.xpath("//button[text()='Signup']")); button.click(); } @Test(priority = 3, alwaysRun = true, dependsOnMethods = "check_login", description = "this test validates the URL post logging in", groups = "url_validation") public void testCurrentUrl() throws InterruptedException { driver.findElement(By.xpath("//*[@id='app']/header/aside/ul/li[4]/a")).click(); String currentUrl = driver.getCurrentUrl(); assertEquals( currentUrl, "https://automation.lambdatest.com/timeline/?viewType=build&page=1", "url did not matched"); System.out.println("The url validation test is completed"); } @Test(priority = 1, description = "this test validates the logout functionality", timeOut = 25000) public void logout() throws InterruptedException { Thread.sleep(6500); driver.findElement(By.xpath("//*[@id='userName']")).click(); driver.findElement(By.xpath("//*[@id='navbarSupportedContent']/ul[2]/li/div/a[5]")).click(); } @Test(enabled = false) public void skipMethod() { System.out.println("this method will be skipped from the test run using the attribute enabled=false"); } @Test(priority = 6, invocationCount = 5, invocationTimeOut = 20) public void invocationcountShowCaseMethod() { System.out.println("this method will be executed by 5 times"); } @AfterMethod() public void screenshot() throws IOException { TakesScreenshot scr = ((TakesScreenshot) driver); File file1 = scr.getScreenshotAs(OutputType.FILE); FileUtils.copyFile(file1, new File(":\\test-output\\test1.PNG")); System.out.println("Screenshot of the test is taken"); } @AfterClass public void closeUp() { driver.close(); System.out.println("The close_up process is completed"); } @AfterTest public void reportReady() { System.out.println("Report is ready to be shared, with screenshots of tests"); } @AfterSuite public void cleanUp() { System.out.println("All close up activities completed"); } @BeforeGroups("urlValidation") public void setUpSecurity() { System.out.println("url validation test starting"); } @AfterGroups("urlValidation") public void tearDownSecurity() { System.out.println("url validation test finished"); } }
Salida a la consola:
Informe TestNG:
Anotaciones adicionales en TestNGHay algunas anotaciones más útiles para ayudarnos a lograr nuestros objetivos.
@DataProvider
Se utiliza un método con esta anotación para proporcionar datos a un método de prueba en el que se establece el atributo dataProvider. Este método ayuda a crear pruebas basadas en datos en las que se pueden pasar múltiples conjuntos de valores de entrada. El método debe devolver una matriz u objeto bidimensional.
La anotación
@DataProvider
tiene dos atributos:
- nombre : este atributo se utiliza para indicar el nombre del proveedor de datos. Si no se especifica, se usa el nombre del método predeterminado.
- paralelo : este atributo le permite ejecutar pruebas en paralelo con diferentes datos. Tener este atributo es una de las ventajas de TestNG sobre Junit. El valor predeterminado es falso.
El siguiente ejemplo muestra el uso de la anotación
@DataProvider
con el nombre dado y los atributos paralelos.
@DataProvider(name = "SetEnvironment", parallel = true) public Object[][] getData() { Object[][] browserProperty = new Object[][]{ {Platform.WIN8, "chrome", "70.0"}, {Platform.WIN8, "chrome", "71.0"} }; return browserProperty; }
@Factory
Esta anotación ayuda a ejecutar múltiples clases de prueba a través de una clase de prueba. En pocas palabras, define y crea pruebas dinámicamente.
El fragmento de código a continuación muestra el uso de la anotación
@Factory
, que ayuda a llamar a los métodos de clase de prueba.
import org.testng.annotations.Test; import org.testng.annotations.Factory; class FactorySimplyTest1 { @Test public void testMethod1() { System.out.println("This is to test for method 1 for Factor Annotation"); } } class FactorySimpleTest2 { @Test public void testMethod2() { System.out.println("This is to test for method 2 for Factor Annotation"); } } public class FactoryAnnotation { @Factory() @Test public Object[] getTestFactoryMethod() { Object[] factoryTest = new Object[2]; factoryTest[0] = new FactorySimplyTest1(); factoryTest[1] = new FactorySimpleTest2(); return factoryTest; } }
Salida de consola:
@Parameters
Esta anotación le permite pasar parámetros a sus pruebas a través del archivo TestNG.xml. Esto es útil cuando necesita transferir una cantidad limitada de datos a sus pruebas. Para conjuntos de datos complejos y grandes, es mejor usar la anotación
@DataProvider
o Excel.
Ejemplo de uso:
@Parameters({"username", "password"}) @Test() public void checkLogin(String username, String password) { driver.get("https://accounts.lambdatest.com/login"); driver.findElement(By.xpath("//input[@name='email']")).sendKeys(username); driver.findElement(By.xpath("//input[@name='password']")).sendKeys(password); driver.findElement(By.xpath("//*[@id='app']/section/form/div/div/button")).click(); System.out.println("The login process on lamdatest is completed"); }
En el archivo TestNG.xml, los parámetros se definen de la siguiente manera:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite"> <test thread-count="5" name="Annotations"> <parameter name="username" value="sadhvisingh24@gmail.com" /> <parameter name="password" value="XXXXX" /> <classes> <class name="Parameter_annotation"/> </classes> </test> <!-- Annotations --> </suite> <!-- Suite -->
@Listener
Esta anotación ayuda con el registro y los informes. Hay varios oyentes:
- IExecutionListener
- IAnnotationTransformer
- ISuiteListener
- ITestListener
Pero dejaremos la descripción de estos oyentes y su uso para otro artículo.
Eso es todo!El punto clave a tener en cuenta al trabajar con todas estas anotaciones y atributos es que necesita usar Java versión 1.5 o superior, ya que las anotaciones no son compatibles con versiones anteriores de Java.
Todas las anotaciones anteriores y los atributos TestNG ayudan a mejorar la estructura del código y la legibilidad. Esto ayuda a proporcionar informes detallados, lo que hace que los informes de estado sean más fáciles y más útiles. El uso de estas anotaciones en TestNG para Selenium depende completamente de los requisitos de su negocio. Por lo tanto, elegir las anotaciones correctas y usarlas correctamente es importante. ¡Puede probar estas anotaciones en
TestNG en LambdaTest Selenium Grid ahora mismo!
Los que han leído hasta el final están invitados a un
seminario web abierto gratuito, que se llevará a cabo el 14 de mayo por nuestro maestro,
Dmitry Eremin . Bueno, de acuerdo con la tradición establecida, estamos esperando sus comentarios, amigos.