Selenium 中都使用了哪些 TestNG 注解?


TestNG 是一个强大的测试框架,它是 JUnit 的增强版,JUnit 在 TestNG 出现之前已经使用了很长时间。NG 代表“下一代”。

TestNG 框架提供以下功能:

  • 注解帮助我们轻松组织测试。

  • 灵活的测试配置。

  • 测试用例更容易分组。

  • 可以使用 TestNG 实现测试的并行化。

  • 支持数据驱动测试。

  • 内置报告。

Selenium Webdriver 允许与网页交互。它是一个接口,而不是一个测试框架。要仅在 Selenium 中运行任何测试或代码,我们必须使用 Java main 方法。TestNG 为我们提供了一个无需使用 Java main 方法即可运行 Selenium 代码的框架。除此之外,更好的代码可维护性、报告和灵活的测试配置是使用 TestNG 与 Selenium 结合的额外优势。

Selenium 中的 TestNG 注解

注解在 JDK 5 中正式添加到 Java 语言中,TestNG 选择使用注解来注释测试类。以下是使用注解的一些好处。更多关于 TestNG 的信息可以在这里找到

  • TestNG 通过查找注解来识别它感兴趣的方法。因此,方法名称不受任何模式或格式的限制。

  • 我们可以向注解传递附加参数。

  • 注解是强类型的,因此编译器会立即标记任何错误。

  • 测试类不再需要扩展任何内容(例如 JUnit 3 的 TestCase)。

用户可以在 Selenium 中使用所有可用的 TestNG 注解。其中一些如下所示

序号

       注解及描述

1

@BeforeSuite

此套件中所有测试运行之前,将只运行一次带注解的方法。

2

@AfterSuite

此套件中所有测试运行之后,将只运行一次带注解的方法。

3

@BeforeClass

在调用当前类中的第一个测试方法之前,将只运行一次带注解的方法。

4

@AfterClass

在当前类中所有测试方法运行之后,将只运行一次带注解的方法。

5

@BeforeTest

在运行<test>标签内类的任何测试方法之前,将运行带注解的方法。

6

@AfterTest

在运行<test>标签内类的所有测试方法之后,将运行带注解的方法。

7

@BeforeGroups

此配置方法将在其之前运行的组列表。保证在调用属于任何这些组的第一个测试方法之前不久运行此方法。

8

@AfterGroups

此配置方法将在其之后运行的组列表。保证在调用属于任何这些组的最后一个测试方法之后不久运行此方法。

9

@BeforeMethod

在每个测试方法之前将运行带注解的方法。

10

@AfterMethod

在每个测试方法之后将运行带注解的方法。

11

@DataProvider

将方法标记为为测试方法提供数据。带注解的方法必须返回一个 Object[ ][ ],其中每个 Object[ ] 可以分配给测试方法的参数列表。想要从此 DataProvider 接收数据的 @Test 方法需要使用一个数据提供程序名称,该名称等于此注解的名称。

12

@Factory

将方法标记为工厂,该工厂返回 TestNG 将用作测试类的对象。该方法必须返回 Object[ ]。

13

@Listeners

在测试类上定义监听器。

14

@Parameters

描述如何将参数传递给 @Test 方法。

15

@Test

将类或方法标记为测试的一部分。

让我们分析如何在 Selenium 中使用 TestNG 注解。

解决此问题的方法/算法

  • 步骤 1:确保在系统中正确设置了 Selenium、TestNG 和 Firefox 驱动程序的初始设置。

  • 步骤 2:创建一个 TestNG 类并编写如程序代码中所述的 Selenium 代码。

  • 步骤 3:运行 TestNGClass 文件。

示例

以下代码用于创建包含 Selenium 代码的 TestNG 类

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class TestNGClass {
   WebDriver driver = new FirefoxDriver();
   
   @BeforeTest
   public void launchApp() {
      // Puts an Implicit wait, Will wait for 10 seconds before throwing exception
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
      
      // Launch website
      driver.navigate().to("http://www.calculator.net");
      driver.manage().window().maximize();
   }
   
   @Test
   public void calculatePercent() {
      // Click on Math Calculators
      driver.findElement(By.xpath(".//*[@id='menu']/div[3]/a")).click();
      
      // Click on Percent Calculators
      driver.findElement(By.xpath(".//*[@id='menu']/div[4]/div[3]/a")).click();
      
      // Enter value 10 in the first number of the percent Calculator
      driver.findElement(By.id("cpar1")).sendKeys("10");
      
      // Enter value 50 in the second number of the percent Calculator
      driver.findElement(By.id("cpar2")).sendKeys("50");
      
      // Click Calculate Button
      driver.findElement(By.xpath(".//*[@id='content']/table/tbody/tr/td[2]/input")).click();
      
      // Get the Result Text based on its xpath
      String result =
         driver.findElement(By.xpath(".//*[@id='content']/p[2]/span/font/b")).getText();
      
      // Print a Log In message to the screen
      System.out.println(" The Result is " + result);
      
      if(result.equals("5")) {
         System.out.println(" The Result is Pass");
      } else {
         System.out.println(" The Result is Fail");
      }
   }
   
   @AfterTest
   public void terminatetest() {
      driver.close();
   }
}

输出

[TestNG] Running:
  C://Users/**************
  The Result is 5
  The Result is Pass
PASSED: calulatePercent
===============================================
Suite1
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
=============================================== 

更新于:2023年8月21日

138 次浏览

启动您的 职业生涯

完成课程获得认证

开始学习
广告