List元素仅拾取最后一个元素并在excel

时间:2017-06-03 08:48:12

标签: java selenium-webdriver

我的代码是使用webelement列表将网页中的错误消息列表打印到excel,但它只打印一条最后一条消息到excel。请帮忙。我正在使用下面的代码。

public void printoutput(int sheetnum, int row, int col, String str) throws IOException
{

wb.getSheetAt(sheetnum).getRow(row).createCell(col).setCellValue(str);
FileOutputStream fos=new FileOutputStream("/Users/paulami/Desktop/AP_Portal/TestData.xlsx");//to write in excel
wb.write(fos);
//wb.close();
}
System.setProperty("webdriver.chrome.driver", "chromedriver");
        WebDriver driver = new ChromeDriver(options);
        driver.get("https://TestLink");
        driver.manage().window().maximize();
        Thread.sleep(5000);


        {

            errorMessage = element.getText();
            System.out.println(errorMessage);
            excel.printoutput(1, row, 22, errorMessage);

        }
   List<WebElement> allelements=driver.findElements(By.xpath("//div[@class='ui-meui-cor']/ul/li"));
    System.out.println(allelements);
    String errorMessage="";
for(WebElement element : allelements)

        {

            errorMessage = element.getText();
            System.out.println(errorMessage);
            excel.printoutput(1, row, 22, errorMessage);

        }

2 个答案:

答案 0 :(得分:2)

由于以下行,它似乎只写了最后一个值:

excel.printoutput(1, row, 22, errorMessage);

我不知道printoutput方法的参数是什么,但可能其中一个是cell个数字。上面的一行继续将不同的消息写入同一个单元格,因此,之前的值总是被覆盖,仅在最后一个值中打印。更新的解决方案应如下所示(伪代码):

for(WebElement element : allelements){
    excel.printoutput(1, row++, 22, element.getText());
}

或者,如果您要附加内容,首先需要检索内容并将element.getText()附加到其中。

<强>更新

要将所有消息写入一个单元格,首先需要创建一个String,其中包含逗号分隔值,并将其写入excel,例如:

String content = allelements.stream().map(e -> e.getText()).collect(Collectors.joining(", "));
excel.printoutput(1, row, 22, content);

这会将所有消息写入单行。然后,您可以使用不同的行号重复相同的方法来编写新的消息集。

答案 1 :(得分:0)

我仍然在java开始,但只是想提出一些建议,只需检查并查看:检查列表中元素的数量是否大于1 如果它小于&#34;一个&#34;这意味着你的功能&#34; findelements()&#34;有问题---- allelements.size();

相关问题