使用@DataProvider运行一段代码时,代码没有完成或失败,只是继续运行

问题描述 投票:0回答:1

我正在使用 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;
    }
}
selenium-webdriver testng-dataprovider xssfsheet
1个回答
0
投票
 s = cell1.getStringCellValue();
 if (Objects.equals(s, "0")) {
       break;
     }

由于您正在检查 s= "0" 那么在动态读取所有行时,请确保最后一列值为 0,这样程序才会终止。
enter image description here

否则尝试使用 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);
        

}
© www.soinside.com 2019 - 2024. All rights reserved.