selenium利用Excel进行参数化(简单示例)
上篇搭建好环境后,正真开始我的自动化之旅了....
开始之前特别说明一下testNG的版本,不能直接使用Eclipse直接线上下载的版本,线上版本太高,不能兼容,运行程序会报以下错误,需要自行下载低一级的版本。
1、下载jexcelapi_2_6_12.tar.gz,在上篇的项目基础上创建com.testNG包,并且引入下载的jar包,用于Excel函数调用。
2、创建IData接口
1 package com.testNg;
2 /**
3 * @author bjlijia
4 * @version 1.0.0
5 */
6 public interface IData {
7
8 public Object[][] getData(String caseName, String dataFile);
9
10 public Object[][] getData(String caseName, String dataFile,int colNum) ;
11
12 public Object[][] getData(String caseName, String dataFile,int beginNum,int endNum) ;
13
14 }
3、创建类BaseExcelData
package com.testNg;
import java.io.*;
import java.util.ArrayList;
import jxl.*;
import jxl.read.biff.BiffException;
/**
* @author kaixie
* @version 1.0.0
*/
public class BaseExcelData implements IData{
String defaultPath = "D:/";
public Object[][] getData(String caseName, String dataFile){
return getData(caseName, dataFile, 0);
}
public Object[][] getData(String caseName, String dataFile, int rowNum) {
Object[][] data = null;
try {
data = addList(caseName, dataFile, rowNum);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return data;
}
public Object[][] getData(String caseName, String dataFile, int beginRowNum, int endRowNum) {
Object[][] data = null;
try {
data = addList2(caseName, dataFile, beginRowNum, endRowNum);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return data;
}
private Object[][] addList(String caseName,String dataFile,int rowNum) throws FileNotFoundException{
ArrayList<Object> list = new ArrayList<Object>();
// 文件路径
InputStream is = new FileInputStream(defaultPath + dataFile);
Object[][] data = null;
try {
Workbook wb = Workbook.getWorkbook(is);
Sheet rs = wb.getSheet(caseName);
//获取表格总行数
int rsRows = rs.getRows();
//获取表格总列数
int rsColumns = rs.getColumns();
if(rs!=null){
for (int i = 1; i <= rsRows-1; i++){
for (int j=0; j <= rsColumns-1; j++){
Cell c = rs.getCell(j, i);
String cz = c.getContents();
list.add(cz);
}
}
//System.out.println(list);
}
if (rowNum <= 0 || rowNum >= rsRows) {
data = new Object[rsRows-1][rsColumns];
int k = -1;
for (int i = 0; i < rsRows-1; i++) {
for (int j = 0; j < rsColumns; j++) {
if (k < list.size())
k++;
data[i][j] = list.get(k);
//System.out.println("i="+i+","+"j="+j+","+data[i][j]);
}
}
} else {
int k = -1;
data = new Object[rowNum][rsColumns];
for (int i = 0; i < rowNum; i++) {
for (int j = 0; j < rsColumns; j++) {
if (k < list.size())
k++;
if (i <= (rowNum - 1)) {
data[i][j] = list.get(k);
}
}
}
}
wb.close();
} catch (BiffException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return data;
}
private Object[][] addList2(String caseName, String dataFile, int beginNum,
int endNum) throws FileNotFoundException {
ArrayList<Object> list = new ArrayList<Object>();
// 文件路径
InputStream is = new FileInputStream(defaultPath + dataFile);
Object[][] data = null;
try {
Workbook wb = Workbook.getWorkbook(is);
Sheet rs = wb.getSheet(caseName);
//获取表格总行数
int rsRows = rs.getRows();
//获取表格总列数
int rsColumns = rs.getColumns();
if(rs!=null){
for (int i = 1; i <= rsRows-1; i++){
for (int j=0; j <= rsColumns-1; j++){
Cell c = rs.getCell(j, i);
String cz = c.getContents();
list.add(cz);
}
}
//System.out.println(list);
}
int sub = (endNum - beginNum) + 1;
data = new Object[sub][rsColumns];
if (beginNum <= 0 || endNum > rsRows) {
if(beginNum <= 0&&endNum > rsRows){
beginNum=0;
endNum=rsRows;
data = new Object[rsRows][rsColumns];
for (int i = 0; i < sub; i++) {
for (int j = 0; j < rsColumns; j++) {
if (beginNum < rsRows*rsColumns)
data[i][j] = list.get(beginNum);
beginNum++;
}
}
}else if (beginNum <= 0&&endNum <= rsRows){
beginNum=0;
sub=(endNum - beginNum);
data = new Object[endNum][rsColumns];
for (int i = 0; i < sub; i++) {
for (int j = 0; j < rsColumns; j++) {
if (beginNum < sub * rsColumns)
data[i][j] = list.get(beginNum);
beginNum++;
}
}
}else {
endNum=rsRows;
sub=(endNum - beginNum) + 1;
data = new Object[sub][rsColumns];
for (int i = 0; i < sub; i++) {
for (int j = 0; j < rsColumns; j++) {
if (beginNum <=sub * rsColumns)
data[i][j] = list.get(beginNum-1);
beginNum++;
}
}
}
} else {
int k = 0;
int a=beginNum*rsColumns;
for (int i = 0; i < sub; i++) {
for (int j = 0; j < rsColumns; j++) {
if (k < sub * rsColumns)
data[i][j] = list.get(a+k-2);
k++;
}
}
}
wb.close();
} catch (BiffException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return data;
}
}
4、创建类ExcelDataProvider
package com.testNg;
import java.io.FileNotFoundException;
import java.lang.reflect.Method;
import org.testng.annotations.DataProvider;
/**
* @author kaixie
* @version 1.0.0
*/
public class ExcelDataProvider {
// 从XML文本文件中获得数据
@DataProvider(name = "GetDataFromXml")
public static Object[][] getTestDataFromXml(Method m) throws FileNotFoundException {
// 通过反射获得函数名称,可以为多个测试方法提供数据驱动
Object[][] o = new Object[][] {};
// 取用例数据集d1Test的全部数据(excel数据源)
if (m.getName().equals("test1")) {
return new BaseExcelData().getData("testA", "DataProvider.xls",0,3);
}
if (m.getName().equals("test2")) {
return new BaseExcelData().getData("testB", "DataProvider.xls",2,5);
}
//取用例数据集d2Test的全部数据(excel数据源)
/*if (m.getName().equals("test1")) {
return new BaseExcelData.getData("d1Test","caipiaoTest.xls")
}*/
return o;
}
}
5、创建测试类Baidutest
package com.testNg;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;
public class Baidutest {
@Test(dataProvider = "GetDataFromXml", dataProviderClass = ExcelDataProvider.class)
public void test1(String URL, String context) {
//String expected = "";
//如果火狐浏览器没有默认安装在C盘,需要制定其路径
//System.setProperty("webdriver.firefox.bin", "D:/Program Files/Mozilla firefox/firefox.exe");
WebDriver driver = new FirefoxDriver();
driver.get(URL);
driver.manage().window().maximize();
WebElement txtbox = driver.findElement(By.name("wd"));
txtbox.sendKeys(context);
WebElement btn = driver.findElement(By.id("su"));
btn.click();
driver.close();
}
}
6、测试用例如下:
7、右击选择TestNG运行测试并且测试结果如下:
也可以在项目路径下D:\study\WebDriverDemo\test-output\Default suite\Default test.html,TestNG默认的HTML测试报告,如下所示:

浙公网安备 33010602011771号