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

	}
}

  

 

posted @ 2017-06-16 11:28  小白测试  阅读(3475)  评论(0编辑  收藏  举报