我正在使用 TestNG 开发 Selenium-Java(Maven) 项目。
我正在使用 Excel 电子表格为我的 TestNG 框架提供数据来运行测试用例。如果我对输入字符串值进行硬编码并运行,则代码可以正常工作。但是当我使用@DataProvider时,代码会无限地运行并且不会失败,直到我手动停止执行。
P.S 我已使用数据提供程序通过仅读取 Excel 工作表中的一行来进行示例测试运行。但是当我编写逻辑来动态读取所有填充数据的行时,问题就出现了。这里需要帮助。
我尝试重建项目,但没有帮助。
以下是我用来读取Excel数据的代码:
public class ExcelDataProvider {
@DataProvider(name = "excelData")
public Object[][] getData() throws IOException {
String[][] data;
String filePath = System.getProperty("user.dir") + "\\src\\test\\resources\\TestDataProvider\\TestDataProvider.xlsx";
FileInputStream fileInputStream = new FileInputStream(filePath);
XSSFWorkbook workBook = new XSSFWorkbook(fileInputStream);
XSSFSheet sheet = workBook.getSheet("Values");
int length=sheet.getLastRowNum();
data=new String[length][2];
String s = "";
int i = 0;
while (!Objects.equals(s, "0")) {
XSSFRow row = sheet.getRow(i);
XSSFCell cell1 = row.getCell(0);
cell1.setCellType(CellType.STRING);
s = cell1.getStringCellValue();
if (Objects.equals(s, "0")) {
break;
}
XSSFCell cell2 = row.getCell(1);
String val1 = cell1.getStringCellValue();
String val2 = cell2.getStringCellValue();
data[i][0] = val1;
data[i][1] = val2;
}
return data;
}
}
s = cell1.getStringCellValue();
if (Objects.equals(s, "0")) {
break;
}
由于您正在检查 s= "0" 那么在动态读取所有行时,请确保最后一列值为 0,这样程序才会终止。
否则尝试使用 getLastCellNum() 方法以获得更好的控制。 。 例如:
int lastRow = sheet.getLastRowNum();
int lastCell = sheet.getRow(0).getLastCellNum();
for(int i =1; i<=lastRow ; i++) {
map=new HashMap<>();
for(int j=0;j<lastCell;j++) {
String key = sheet.getRow(0).getCell(j).getStringCellValue();
String value = sheet.getRow(i).getCell(j).getStringCellValue();
map.put(key, value);
}
list.add(map);
}