在写入excel时,只有一次循环循环

时间:2016-02-26 17:20:00

标签: java selenium-webdriver

我在页面上有一个表格,我需要从表格中的特定单元格中读取值。我想将这些值写入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循环再次循环,但是第二次没有写出任何东西。你能帮我找出原因吗?

1 个答案:

答案 0 :(得分:0)

为什么for循环只循环一次的原因是你试图循环的List只包含一个值。当for循环完成循环遍历该值时,循环中断。同样的事情就好像List有五个值,循环会循环遍历那些然后中断。