【发布时间】:2021-12-16 05:44:03
【问题描述】:
我正在编写一个代码,其中我正在使用具有三张工作表的 excel 文件进行操作。我正在将 Apache POI 和数据提供者注释用于数据驱动方法。我想在运行时传递工作表索引号或工作表名称,但我无法将参数设置为数据提供程序方法。所以我所做的是我写了一个构造函数和一个静态变量作为整数。在参数化构造函数中,我初始化了该静态变量,然后在我的测试用例中,通过创建具有数据提供者方法的类的对象,我传递了一个整数,即我希望从中获取数据以运行测试的工作表索引.但是每次,构造函数都将值设为0。我不知道为什么。下面是我写的数据驱动代码和构造函数。
public class Excel_Util {
static int fileinitial;
public Excel_Util(int filename) {
fileinitial=filename;
}
@DataProvider(name="testdata")
public static Object[][] readexcelretobj() throws Exception {
FileInputStream f= new FileInputStream("F:\\Eclipse Java new Programs\\shdtestpeopleinteractive\\src\\test\\resources\\Test_data.xls");
HSSFWorkbook workbook = new HSSFWorkbook(f);
HSSFSheet s = workbook.getSheetAt(fileinitial);
HSSFRow row = s.getRow(0);
int rownum=s.getPhysicalNumberOfRows();
int colnum=row.getLastCellNum();
//System.out.println(rownum);
//System.out.println(colnum);
Object data[][] = new Object[rownum][colnum];
List<Object> l = new ArrayList<Object>();
for(int i=0;i<rownum-1;i++) {
row = s.getRow(i+1);
for(int j=0;j<colnum;j++) {
HSSFCell c = row.getCell(j);
//l.add(c.getStringCellValue());
data[i][j]=c.getStringCellValue();
}
}
return data;
}
我写的测试用例如下。
@Test(dataProvider="testdata",dataProviderClass=Excel_Util.class)
public void testsignupdatafields(String email, String password) {
Syncutil.Implicitwait();
try {
Excel_Util ex = new Excel_Util(2);
getdriver().get("https://www."+csvreaderutil.csvread().get(0).toString()+"/");
Marathishd marathishdpage = PageFactory.initElements(getdriver(), Marathishd.class);
Signuppagemarathishd signup = marathishdpage.letsbeginclick();
signup.emailid.sendKeys(email);
signup.password.sendKeys(password);
}catch(Exception e) {System.out.println("Exception");}
}
}
在这里,我在创建对象时传递了 2,但每次都从第一张表中获取值。即,每次都考虑工作表索引 0。我不想在 excelutil 类代码中硬编码任何值,因为我想将其作为通用代码。所以在测试用例本身我决定通过表号。我很困惑该怎么做,想知道为什么会发生这种情况以及我正在做的错误是什么。有人可以指导我吗?
【问题讨论】: