Selenium高级 | Selenium使用TestNG的@DataProvider注解实现参数化测试

数据驱动测试Data-Drivern testing或者通俗的叫参数化测试是自动化测试中一种比较常见的场景。

本文介绍如何通过TestNG的@DataProvider实现Selenium Java架构中的参数化测试。

理解@DataProvider:

@DataProvider是TestNG中的一个注解,专门用于提供测试数据,此注解标注下的方法需要返回一个Object[][] 类型的值,此值类似于一个二维数组。

被@Test注解标注的方法可以用来接收上面Object[][]中的值,不过要在@Test中指明具体使用的是哪个DataProvider。

步骤:

1. 用@DataProvider注解下的方法提供数据,例:

	@DataProvider(name = "provideUser")
	public Object[][] provideData() {

		return new Object[][] { 
			{ "username1", "pw1" }, 
			{ "username2", "pw2" }, 
			{ "username3", "pw3" } 
		};
	}

上例中定义了一个叫“provideUser”的DataProvider,其下的方法提供了三组用户名与密码数据。

2. 在@Test的方法中定义要接收数据的参数,并指明要接收的DataProvider是哪个

 @Test(dataProvider = "provideUser")
  
  public void openWebSite(String username, String password) throws InterruptedException {
	  
	  //登录正常操作。。。
      
      //输入用户名
      driver.findElement(By.id("username")).click();
      driver.findElement(By.id("username")).clear();
      driver.findElement(By.id("username")).sendKeys(username);
      
      //输入密码
      driver.findElement(By.id("password")).click();
      driver.findElement(By.id("password")).clear();
      driver.findElement(By.id("password")).sendKeys(password);

       //点击登录按钮
      driver.findElement(By.xpath("//input[@class='logging']")).click();

       //后续相关操作。。。
}
      

在上面的@Test方法中定义了两个String类型的参数username和password,并且指明了要从DataProvider "provideUser"中获取数据,这样在TestNG运行此脚本时,就会把Object[][]数组中第一列的值传给第一个参数username,第二列的值传给第二个参数password,并且执行完@Test中的所有步骤后,会取下一组参数数据再执行一遍,有几组就重复执行几遍。

下面是一个使用错误密码登录csdn的完整的例子:

package com.yoyotesting.selenium3maven;

import org.testng.annotations.Test;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.AfterClass;

public class OpenWebsiteTestNG2 {
	
	public WebDriver driver;

  @BeforeClass
  public void setUp() throws InterruptedException {
	  
	  //定义gecko driver的获取地址
      System.setProperty("webdriver.gecko.driver", "D:\\BrowserDriver\\geckodriver.exe");
		
     //创建一个叫driver的对象,启动火狐浏览器  
     driver = new FirefoxDriver();
     
     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
     
   //通过对象driver调用具体的get方法来打开网页
     driver.get("https://www.csdn.net/");      
 	  
     //最大化浏览器窗口
     driver.manage().window().maximize();      
     
     Thread.sleep(3000);
     
     //点击登录按钮
     driver.findElement(By.linkText("登录")).click();        
    
     
     //点击账号登录
     driver.findElement(By.linkText("账号登录")).click();

  }

	@DataProvider(name = "provideUser")
	public Object[][] provideData() {

		return new Object[][] { 
			{ "username1", "pw1" }, 
			{ "username2", "pw2" }, 
			{ "username3", "pw3" } 
		};
	}
  
  @Test(dataProvider = "provideUser")
  
  public void openWebSite(String username, String password) throws InterruptedException {
	  
	  
      
      //输入用户名
      driver.findElement(By.id("username")).click();
      driver.findElement(By.id("username")).clear();
      driver.findElement(By.id("username")).sendKeys(username);
      
      //输入密码
      driver.findElement(By.id("password")).click();
      driver.findElement(By.id("password")).clear();
      driver.findElement(By.id("password")).sendKeys(password);
      
      //点击登录按钮
      driver.findElement(By.xpath("//input[@class='logging']")).click();
      
      //Thread.sleep(3000);
      String errormessage = driver.findElement(By.id("error-message")).getText();
      Assert.assertEquals(errormessage,"长时间未修改密码,请修改密码后登录" );
  }

  @AfterClass
  public void tearDown() {
	  
	  //退出浏览器
      driver.quit();
  }

}

****************************************************************************************************

最近我会持续更新Selenium Java的相关文章,也请大家多多关注我的视频课程

Selenium3 Java自动化测试完整教程

*****************************************************************************************************

猜你喜欢

转载自blog.csdn.net/yoyocat915/article/details/81361572