selenium 参数传递(testng.xml 、DataProvider )
为了方便测试代码的复用性,常常采用参数化。传递参数给测试代码 有一下两种方法;1、通过配置XML文件实现。2、通过DataProvider 传递参数。
注意:DataProvider 传递参数返回的是一个Object对象或迭代器的对象。
DataProvider
一、通过testng.xml 传递参数给测试代码
1 package com.TestNG.web; 2 3 import java.util.concurrent.TimeUnit; 4 import org.openqa.selenium.*; 5 import org.openqa.selenium.chrome.ChromeDriver; 6 import org.openqa.selenium.chrome.ChromeOptions; 7 import static org.testng.Assert.assertEquals; 8 import org.testng.annotations.BeforeClass; 9 import org.testng.annotations.AfterClass; 10 import org.testng.annotations.Parameters; 11 import org.testng.annotations.Test; 12 13 public class testBaidu { 14 private WebDriver driver; 15 private String baseUrl; 16 17 @BeforeClass 18 public void setUp() throws Exception { 19 System.setProperty("webdriver.chrome.driver", "D:/chromedriver_win32/chromedriver.exe"); 20 ChromeOptions Options = new ChromeOptions(); 21 Options.addArguments("user-data-dir=C:\\Users\\happy\\AppData\\Local\\Google\\Chrome\\User Data"); 22 driver = new ChromeDriver(Options); 23 24 baseUrl = "https://www.baidu.com/"; 25 driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 26 } 27 28 @Test 29 @Parameters("test1") // 设置测试方法的入参 30 public void testCase(String test1) throws Exception { 31 driver.get(baseUrl + "/"); 32 System.out.println("sreach key value:" + test1); 33 driver.findElement(By.id("kw")).sendKeys(test1); 34 driver.findElement(By.id("su")).click(); 35 Thread.sleep(2000); 36 String title = driver.getTitle(); 37 assertEquals(title, test1 + "_百度搜索"); 38 } 39 40 @AfterClass 41 public void tearDown() throws Exception { 42 driver.quit(); 43 } 44 }
testNG.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 3 <suite name="Suite" parallel="none"> 4 5 <test name="Test"> 6 <parameter name="test1" value="testng" /> 7 <!-- 定义test1 的value 也就是传递给testCase(String test1)方法中的test1--> 8 <classes> 9 <class name="com.TestNG.web.testBaidu" /> 10 </classes> 11 </test> 12 <!-- 第二次运行 --> 13 <test name="Test1"> 14 <parameter name="test1" value="selenium" /> 15 <!-- 定义test1 的value 也就是传递给testCase(String test1)方法中的test1--> 16 <classes> 17 <class name="com.TestNG.web.testBaidu" /> 18 </classes> 19 </test> <!-- Test --> 20 </suite> <!-- Suite -->
二、通过DataProvider 传递参数
参数列表为1;
1 package com.TestNG.web; 2 3 import static org.testng.Assert.assertEquals; 4 import java.util.concurrent.TimeUnit; 5 import org.openqa.selenium.By; 6 import org.openqa.selenium.WebDriver; 7 import org.openqa.selenium.chrome.ChromeDriver; 8 import org.openqa.selenium.chrome.ChromeOptions; 9 import org.testng.annotations.AfterClass; 10 import org.testng.annotations.BeforeClass; 11 import org.testng.annotations.DataProvider; 12 import org.testng.annotations.Parameters; 13 import org.testng.annotations.Test; 14 15 public class TestDataProvider { 16 private WebDriver driver; 17 private String baseUrl; 18 19 @BeforeClass 20 public void setUp() throws Exception { 21 System.setProperty("webdriver.chrome.driver", "D:/chromedriver_win32/chromedriver.exe"); 22 ChromeOptions Options = new ChromeOptions(); 23 Options.addArguments("user-data-dir=C:\\Users\\happy\\AppData\\Local\\Google\\Chrome\\User Data"); 24 driver = new ChromeDriver(Options); 25 26 baseUrl = "https://www.baidu.com/"; 27 driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 28 } 29 30 // 定义对象数组 31 @DataProvider(name = "user") 32 public Object[][] Users() { 33 return new Object[][] { { "第一次搜索" }, { "第二次搜索" }, { "第三次搜索" }, { "第四次搜索" } }; 34 // 往调用该数据的函数中传递对应的值。 35 } 36 // 调用user 数组的值 37 38 @Test(dataProvider = "user") // 设置测试方法的入参 39 public void testCase(String test1) throws Exception { 40 driver.get(baseUrl + "/"); 41 System.out.println("sreach key value:" + test1); 42 driver.findElement(By.id("kw")).sendKeys(test1); 43 driver.findElement(By.id("su")).click(); 44 Thread.sleep(2000); 45 String title = driver.getTitle(); 46 assertEquals(title, test1 + "_百度搜索"); 47 } 48 49 @AfterClass 50 public void tearDown() throws Exception { 51 driver.quit(); 52 } 53 }
参数列表为2 ;需要传递两个参数。
1 import org.testng.annotations.DataProvider; 2 import org.testng.annotations.Test; 3 4 public class TestDataProvider1 { 5 6 // 定义对象数组 7 @DataProvider(name = "user") 8 public Object[][] Users() { 9 return new Object[][] { { "第一次搜索", "第二次搜索" }, { "第三次搜索", "第四次搜索" } }; 10 // 往调用该数据的函数中传递对应的值。 11 } 12 13 // 调用user 数组的值 14 @Test(dataProvider = "user") 15 public void test1(String name1, String name2) { 16 17 System.out.println(name1 + " " + name2); 18 19 } 20 21 }
参数列表为3 ;需要传递三个参数。
package com.TestNG.web; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class TestDataProvider2 { // 定义对象数组 @DataProvider(name = "pw") public Object[][] Users() { return new Object[][] { { "1", "2", "3" }, { "4", "5", "6" } }; // 往调用该数据的函数中传递对应的值。 } // 调用user 数组的值 @Test(dataProvider = "pw") public void test1(String name1, String name2, String name3) { System.out.println(name1 + " " + name2 + " " + name3); } }