我在页面上有一个表格,我需要从表格中的特定单元格中读取值。我想将这些值写入excel文件。 问题是对于循环循环只有一次,并且只为excel中的第一个单元格写入值。 我尝试了很多不同的循环并在谷歌搜索但无法找到答案。 请帮忙。这是我写给excel的代码:
public static void setExcelFile(String Path, String SheetName) throws Exception {
try {
// Open the Excel file
FileInputStream ExcelFile = new FileInputStream(Path);
// Access the required test data sheet
ExcelWBook = new XSSFWorkbook(ExcelFile);
ExcelWSheet = ExcelWBook.getSheet(SheetName);
} catch (Exception e) {
throw (e);
}
}
这是我写给excel文件的地方
public static void setCellData(String Result, int RowNum, int ColNum) throws Exception {
try {
Row = ExcelWSheet.getRow(RowNum);
Cell = Row.getCell(ColNum, Row.RETURN_BLANK_AS_NULL);
if (Cell == null) {
Cell = Row.createCell(ColNum);
Cell.setCellValue(Result);
} else {
Cell.setCellValue(Result);
}
// Constant variables Test Data path and Test Data file name
FileOutputStream fileOut = new FileOutputStream(Constant.Path_TestData + Constant.File_TestData);
ExcelWBook.write(fileOut);
fileOut.flush();
fileOut.close();
} catch (Exception e) {
e.printStackTrace();
}
}
and here is my loop
//
ExcelUtils.setExcelFile(Constant.Path_TestData + Constant.File_TestData, "Item_Selection");
List<WebElement> li = driver.findElements(By.cssSelector("#offerVersionSkuListTable>table:nth-child(2)>tbody>tr>td#regularCost"));
for (int j = 0; j<li.size(); j++) {
String cellValue = li.get(j).getText();
List<String> valueList = new ArrayList<String>();
valueList.add(cellValue);
for (int m = 0; m<valueList.size(); m++) {
int temp = row;
ExcelUtils.setCellData(valueList.get(m), temp, Constant.Col_TblRegCost);
temp++;
}
}
我得到的错误是这样的: org.openqa.selenium.StaleElementReferenceException:在缓存中找不到元素 - 可能自查找以来页面已更改
经过进一步调查,我发现如果我要删除 ExcelUtils.setCellData(valueList.get(m),temp,Constant.Col_TblRegCost);
循环成功完成并正确打印出表中的值,但我需要将这些值写入excel。似乎在excel中写入第一个值之后,for循环再次循环,但是第二次没有写出任何东西。你能帮我找出原因吗?
答案 0 :(得分:0)
为什么for循环只循环一次的原因是你试图循环的List只包含一个值。当for循环完成循环遍历该值时,循环中断。同样的事情就好像List有五个值,循环会循环遍历那些然后中断。