Selenium 使用的所有TestNG注释是什么
TestNG是一个强大的测试框架,是JUnit的增强版本,在TestNG出现之前已经使用了很长时间。NG代表“下一代”。
TestNG框架提供以下功能:
- 注释帮助我们轻松组织测试。
-
灵活的测试配置。
-
更容易分组测试用例。
-
使用TestNG可以实现测试的并行处理。
-
支持数据驱动测试。
-
内置的报告。
Selenium Webdriver允许与网页进行交互。它是一个接口而不是测试框架。要在Selenium中运行任何测试或代码,必须使用Java主方法。TestNG为我们提供了一个在不使用Java主方法运行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 此注释方法将在属于 |
6 | @AfterTest 此注释方法将在属于 |
7 | @BeforeGroups 此配置方法将在之前运行属于以下组之一的第一个测试方法调用之前运行。 |
8 | @AfterGroups 此配置方法将在之后运行属于以下组之一的最后一个测试方法调用之后运行。 |
9 | @BeforeMethod 注解的方法将在每个测试方法之前运行。 |
10 | @AfterMethod 注解的方法将在每个测试方法之后运行。 |
11 | @DataProvider 将方法标记为为测试方法提供数据的方法。被注解的方法必须返回一个 Object[ ][ ],其中每个 Object[ ] 可以被分配给测试方法的参数列表。希望从此 DataProvider 接收数据的 @Test 方法需要使用与此注解名称相等的 dataProvider 名称。 |
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
===============================================