我正在使用webdriver将类名为topredo
的Web元素捕获到ArrayList中。
当屏幕滚动时,看到网页元素在增加,我使用while
循环进行滚动和抓取。
这样的Java代码:
outer: while (isContinue) {
List<WebElement> all = driver.findElements(By.className("torpedo"));
/* do screen scrolling*/
}
它运行良好,直到最后一个循环。
在上一个secode循环中,我得到all.size()
结果208,但在最后一个循环中,all.size()
结果为172,而浏览器上的Web元素的实际总大小为243,我使用eclipse debug查看列表堆栈内容。
屏幕截图如下:
所以我的问题是为什么all.size()
小于the real size
,为什么索引大于171的内容是不可见的?
非常感谢!
答案 0 :(得分:0)
如评论中所述,您将继续为循环的每次迭代重置列表。我们可以在循环外启动List并继续向循环内的列表添加元素。代码看起来应该是这样的。
List<WebElement> all = null;
outer: while (isContinue)
{
all.addAll(driver.findElements(By.className("torpedo")));
/* do screen scrolling*/
}
如果您在列表中获得重复的元素,也可以使用集合而不是列表。
Set<WebElement> all = null;
outer: while (isContinue)
{
all.addAll(driver.findElements(By.className("torpedo")));
/* do screen scrolling*/
}