company_banner

Руководство по аннотациям TestNG для Selenium WebDriver

Автор оригинала: Sadhvi Singh
  • Перевод
Мир, труд, май, хабровчане! Для тех, кто также как и мы ворвался в межпраздничную рабочую неделю, мы подготовили перевод, который хотим приурочить к старту набора на курс «Java QA Engineer», запуск которого запланирован на 28 мая.



TestNG — это тестовый фреймворк, созданный Cédric Beust, он помогает нам удовлетворить многие наши потребности в тестировании. TestNG широко используется вместе с Selenium. Хотите знать, что означает NG? Это значит “Next Generation” (“Следующее поколение”). TestNG похож на JUnit, но он более мощный, когда дело касается управления потоком выполнения вашей программы. Архитектура фреймворка помогает нам сделать тесты более структурированными и обеспечить лучшие точки валидации.

Некоторые особенности TestNG, заслуживающие внимания:

  • Мощные и разнообразные аннотации для поддержки ваших тест-кейсов.
  • Параллельное выполнение тестов, использование зависимостей между тестами.
  • Гибкость выполнения ваших тестов на разных наборах данных, через файл TestNG.xml или через концепцию поставщиков данных (data-provider).
  • Группировка и приоритизация тест-кейсов.
  • Генерация HTML-отчётов, настройка с помощью различных плагинов.
  • Генерация логов выполнения тестов.
  • Лёгкая интеграция с Eclipse, Maven, Jenkins и др.

Обычно процесс тестирования с использованием TestNG включает в себя следующие этапы:



Перед тем как перейти к аннотациям TestNG для Selenium, обозначим предварительные требования для настройки TestNG.

Предварительные условия:

  • Java Development Kit
  • Eclipse или любая другая IDE
  • Установленный TestNG в Eclipse или в вашу IDE

Примечание: Java-аннотации могут быть использованы только с Java версии 1.5 и выше.

Если вы новичок с TestNG, то посмотрите статью о том, как запустить первый скрипт автоматизации с TestNG.

Итак, что такое аннотация?

Аннотация — это метка, которая предоставляет дополнительную информацию о классе или методе (Примечание переводчика: в java аннотации могут применяться не только для классов и методов, но также и для других элементов). Для аннотаций используется префикс «@». TestNG использует аннотации, чтобы помочь в создании надёжной структуры тестов. Давайте посмотрим на аннотации TestNG, используемые для автоматизации тестирования с Selenium.


@Test

Это самая важная аннотация в TestNG, в которой находится основная логика теста. Все автоматизируемые функции находятся в методе с аннотацией @Test. Она имеет различные атрибуты, с помощью которых может быть настроен запуск метода.

Пример кода ниже, проверяет переход по 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

Метод с этой аннотацией запускается перед запуском первого метода с аннотацией @Test. (Примечание переводчика: в рамках теста, определенного в разделе test в xml-файле конфигурации). Вы можете использовать эту аннотацию в TestNG с Selenium для настройки браузера. Например, запустить браузер и развернуть его на весь экран, установить специфичные настройки браузера и т.д.

Ниже приведён пример для BeforeTest, в котором браузер разворачивается на весь экран:

@BeforeTest
public void profileSetup() {
   driver.manage().window().maximize();
}

@AfterTest

Методы, помеченные этой аннотацией, запускаются после всех @Test-методов вашего теста. (Примечание переводчика: в рамках теста, определенного в разделе test в xml-файле конфигурации, в оригинале не совсем корректно написано “текущего класса”). Это полезная аннотация, которая пригодится для предоставления результатов выполнения тестов. Вы можете использовать эту аннотацию, чтобы создать отчёт о ваших тестах и отправить его заинтересованным сторонам по электронной почте.

Пример кода:

@AfterTest
public void reportReady() {
   System.out.println("Report is ready to be shared, with screenshots of tests");
}

@BeforeMethod

Методы с этой аннотацией запускаются перед каждым @Test-методом. Вы можете использовать её, чтобы перед выполнением теста проверить соединение с базой данных. Или, например, при тестировании функциональности, зависимой от логина пользователя, поместить сюда код для входа в систему.
Ниже приведён фрагмент кода, демонстрирующий вход в 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

Методы с этой аннотацией запускаются после каждого @Test-метода. Эту аннотацию можно использовать для создания скриншотов при каждом выполнении теста.
Ниже приведён фрагмент кода, демонстрирующий получение скриншота:

@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

Метод с этой аннотацией выполнится перед первым тестовым методом в текущем классе. Эту аннотацию можно использовать для настройки свойств браузера, инициализации драйвера, открытия браузера с нужным URL-адресом и т.д.

Пример кода для BeforeClass:

@BeforeClass
public void appSetup() {
   driver.get(url);
}

@AfterClass

Метод с этой аннотацией выполнится после последнего тестового метода в текущем классе. Эта аннотация в TestNG может использоваться для выполнения действий по очистке ресурсов после выполнения теста, таких как закрытие драйвера и т.п.
Ниже приведён пример фрагмента кода, показывающего закрытие драйвера:

@AfterClass
public void closeUp() {
   driver.close();
}

@BeforeSuite

Набор тестов (suite) может состоять из нескольких классов, эта аннотация запускается перед всеми тестовыми методами всех классов. Эта аннотация помечает точку входа при запуске. Аннотацию @BeforeSuite в TestNG можно использовать для выполнения общих функций, таких как настройка и запуск Selenium или удалённых веб-драйверов и т.д.
Пример аннотации @BeforeSuite в TestNG, демонстрирующий настройку драйвера:

@BeforeSuite
public void setUp() {
   System.setProperty(
           "webdriver.chrome.driver",
           "С:\\selenium\\chromedriver.exe");
   driver = new ChromeDriver();
}

@AfterSuite

Эта аннотация в TestNG запускается после запуска всех методов тестирования во всех классах. Эта аннотация может использоваться для очистки перед завершением тестов, когда у вас используется несколько классов, например, закрытие драйверов и т. д.
Ниже приведён фрагмент кода для аннотации @AfterSuite в TestNG для Selenium:

@AfterSuite
public void cleanUp() {
   System.out.println("All close up activities completed");
}

@BeforeGroups

TestNG может объединять тесты в группы с помощью атрибута group в аннотации @Test. Например, если вы хотите, чтобы все схожие функции, связанные с управлением пользователями, были объединены вместе, вы можете пометить тесты, такие как dashboard (панель пользователя), profile (профиль), transactions (транзакции) и тому подобное, в одну группу, такую как “user_management”. Аннотация @BeforeGroups в TestNG помогает запустить определённые действия перед указанной группой тестов. Эту аннотацию можно использовать, если группа фокусируется на одной функциональности, как указано в приведённом выше примере. Аннотация @BeforeGroup может содержать функцию входа в систему, которая требуется для запуска тестов в группе, например, тестирование панели пользователя, профиля пользователя и т.д.

Пример использования @BeforeGroups:

@BeforeGroups("urlValidation")
public void setUpSecurity() {
   System.out.println("url validation test starting");
}

@AfterGroups

Эта аннотация запускается после выполнения всех тестовых методов указанной группы.

Пример кода для аннотации @AfterGroups в TestNG для Selenium:

@AfterGroups("urlValidation")
public void tearDownSecurity() {
   System.out.println("url validation test finished");
}

Пример

В приведённом ниже коде показаны примеры использования всех аннотаций, рассмотренных выше:

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");
   }
}	

Отчёт TestNG Report:



Вывод в консоли:



Примечание переводчика:

  • для запуска теста измените в методе setUp() путь к chromedriver.exe, а в методе screenShot() путь к папке со скриншотом. Также для успешного выполнения теста в методе checkLogin() должны быть валидные логин и пароль.
  • Используемые maven-зависимости:

<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 для Selenium

Аннотации, описанные выше, выполняются в рантайме в следующем порядке:

  • BeforeSuite
  • BeforeTest
  • BeforeClass
  • BeforeGroups
  • BeforeMethod
  • Test
  • AfterMethod
  • AfterGroups
  • AfterClass
  • AfterTest
  • AfterSuite

Вот порядок их выполнения:



Атрибуты, используемые с аннотациями в TestNG

У аннотаций в TestNG есть атрибуты, которые можно использовать для настройки. Они помогают настроить порядок выполнения тестовых методов.

Вот эти атрибуты:

  • description: можно указать описание тестового метода.
    Например, @Test(description=”этот тест проверяет вход в систему”).
  • alwaysRun: этот атрибут гарантирует, что тестовый метод будет выполнен всегда, даже в случае падения тестов, от которых он зависит. Когда значение атрибута true, этот метод будет запускаться всегда.
    Например, @Test(alwaysRun= true).
  • dataProvider: задаёт имя поставщика данных (data provider) для тестового метода. Предположим, что вы собираетесь запускать свои тесты в нескольких браузерах, тогда в тестовом методе с атрибутом dataProvider, можно добавить параметры для браузера и его версии, которые будут передаваться в метод поставщиком данных. В этом случае тест, содержащий этот атрибут, будет использовать эти входные данные для запуска тестов в нескольких браузерах.
    Например, @Test(dataProvider=”cross-browser-testing”).
  • dependsOnMethods: предоставляет информацию о порядке выполнения тестов. Тест с этим атрибутом будет выполнен, только если успешно выполниться тест, от которого он зависит. Если тест, от которого зависит метод, падает, то тест не запускается.
    Например, @Test (depenOnmethod = “login”).
  • groups: помогает сгруппировать ваши тестовые методы, ориентированные на одну функциональность, в одну группу.
    Например, @Test(groups=”Payment_Module”).
    Этот атрибут также позволяет управлять тем, какие тесты запускать. При запуске тестов можно игнорировать какие-то группы или, наоборот, запустить только некоторые группы. Всё, что нужно сделать, это указать нужные группы в файле TestNG.xml. В теге include указать группы, которые необходимо запустить, а в теге exclude, которые надо игнорировать.
  • dependsOnGroups: выполняет функции двух, вышеупомянутых атрибутов, то есть определяет зависимость тестового метода от указанной группы. Этот тестовый метод будет запущен только после того, как указанная группа тестов будет выполнена.
    Например, @Test (depenOnMethods = «Payment_Module»).
  • priority: помогает нам определить приоритет тестовых методов. Когда TestNG выполняет тестовые методы, он может делать это в произвольном порядке. В сценарии, где вы хотите, чтобы ваши тесты выполнялись в нужном порядке, вы можете использовать атрибут priority. Приоритет по умолчанию для всех тестовых методов равен 0. Сначала выполняются тесты с меньшим значением priority.
    Например, @Test (priority = 1), @Test (priority = 2). В этом случае сначала будет выполнен тест с приоритетом, равным единице, а потом тест с приоритетом два.
  • enabled: этот атрибут используется, когда вам нужно игнорировать и не запускать определённый тест. Всё, что вам нужно сделать, это установить его в false.
    Например, @Test(enabled= false).
  • timeout: определяет время, за которое должен выполниться тест. Если выполнение теста превышает время, определённое атрибутом, то тест завершится с ошибкой с выбросом исключения org.testng.internal.thread.ThreadTimeoutException
    Например, @Test(timeOut= 500). Обратите внимание, что время указывается в миллисекундах.
  • invocationCount: работает точно так же, как цикл. Тест будет запущен столько раз, сколько указано в invocationCount.
    Например, @Test(invocationCount = 5), будет запущен 5 раз.
  • invocationTimeOut: используется вместе с вышеуказанным атрибутом invocationCount. Значение этого атрибута вместе с invocationCount указывает на то, что тест будет запущен столько раз, сколько указано в invocationCount, и в течение времени, указанного в атрибуте invocationTimeOut.
    Например, @Test(invocationCount = 5, invocationTimeOut = 20).
  • expectedExceptions: помогает обрабатывать исключения, выброс которых ожидается в тестовом методе. Если исключение, указанное в атрибуте, выброшено тестовым методом, то тест прошёл успешно. В противном случае, отсутствие исключения или выброс другого исключения, не указанного в атрибуте, провалит тест.
    Например, @Test(expectedExceptions = {ArithmeticException.class }).

Выше описаны атрибуты, используемые с аннотациями в TestNG c Selenium. Ниже приведён фрагмент кода, демонстрирующий использование вышеуказанных атрибутов:

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");
   }
}

Вывод в консоль:



Отчёт TestNG:



Дополнительные аннотации в TestNG

Есть еще несколько полезных аннотаций, которые помогут нам достигнуть желаемых целей.

@DataProvider

Метод с этой аннотацией используется для предоставления данных тестовому методу, в котором задан атрибут dataProvider. Этот метод помогает в создании тестов, управляемых данными, в которые может передаваться несколько наборов входных значений. Метод должен возвращать двумерный массив или объект.

У аннотации @DataProvider есть два атрибута:

  • name — этот атрибут используется для указания имени поставщика данных. Если не указано, то по умолчанию используется название метода.
  • parallel — этот атрибут позволяет запускать тесты параллельно с разными данными. Наличие этого атрибута является одним из преимуществ TestNG перед Junit. По умолчанию false.

Пример ниже показывает использование аннотации @DataProvider с заданными атрибутами name и parallel.

@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

Эта аннотация помогает запускать несколько тестовых классов через один тестовый класс. Проще говоря, она определяет и создаёт тесты динамически.

Приведённый ниже фрагмент кода показывает использование аннотации @Factory, которая помогает вызывать методы тестового класса.

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;
   }
}

Вывод консоли:



@Parameters

Эта аннотация позволяет вам передавать параметры в ваши тесты через файл TestNG.xml. Это удобно, когда нужно передать ограниченное количество данных в ваши тесты. В случае сложных и больших наборов данных лучше использовать аннотацию @DataProvider или Excel.

Пример использования:

@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");
}

В файле TestNG.xml параметры определяются следующим образом:

<?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

Эта аннотация помогает при логировании и подготовке отчётов. Есть несколько “слушателей” (Listener):

  • IExecutionListener
  • IAnnotationTransformer
  • ISuiteListener
  • ITestListener

Но описание этих слушателей и их использование оставим для другой статьи.

Вот и всё!

Ключевой момент, который следует учитывать при работе со всеми этими аннотациями и атрибутами, заключается в том, что нужно использовать Java версии 1.5 или выше, поскольку аннотации не поддерживаются в более ранних версиях java.

Все вышеупомянутые аннотации и атрибуты TestNG помогают улучшить структуру и читаемость кода. Это помогает предоставлять подробные отчёты, что делает отчёты о состоянии проще и полезнее. Использование этих аннотаций в TestNG для Selenium полностью зависит от ваших бизнес-требований. Следовательно, выбор правильных аннотаций и их правильное использование имеет важное значение. Вы можете попробовать эти аннотации в TestNG на LambdaTest Selenium Grid прямо сейчас!

Тех, кто дочитал до конца приглашаем на бесплатный открытый вебинар, который уже 14 мая проедет наш преподаватель — Дмитрий Еремин. Ну и по устоявшейся традиции ждём ваши комментарии, друзья.
OTUS. Онлайн-образование
694,28
Цифровые навыки от ведущих экспертов
Поделиться публикацией

Похожие публикации

Комментарии 0

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое