Java arraylist大小小于实际值

Java arraylist大小小于实际值,java,selenium,arraylist,webdriver,Java,Selenium,Arraylist,Webdriver,我使用webdriver将类名为topredo的web元素抓取到ArrayList中 看到屏幕滚动时web元素在增加,我使用while循环进行滚动和抓取 Java代码如下: outer: while (isContinue) { List<WebElement> all = driver.findElements(By.className("torpedo")); /* do screen scrolling*/ } outer:while(

我使用webdriver将类名为
topredo
的web元素抓取到ArrayList中

看到屏幕滚动时web元素在增加,我使用
while
循环进行滚动和抓取

Java代码如下:

outer: while (isContinue) {    
        List<WebElement> all = driver.findElements(By.className("torpedo"));
        /* do screen scrolling*/
}
outer:while(isContinue){
列出所有=driver.findElements(按.className(“鱼雷”));
/*做屏幕滚动*/
}
它运行良好,直到最后一个循环

在最后一个secode循环中,我得到了
all.size()
结果208,但在最后一个循环中,
all.size()
结果是172,而浏览器上web元素的实际总大小是243,我使用eclipse调试查看列表堆栈内容

截图如下:

outer: while (isContinue) {    
        List<WebElement> all = driver.findElements(By.className("torpedo"));
        /* do screen scrolling*/
}
  • 全部尺寸()

  • 内容结束于索引171

因此,我的问题是为什么
all.size()
小于
实际大小
,以及为什么索引中大于171的内容不可见


非常感谢

如评论中所述,每次循环迭代,您都会不断重置列表。我们可以在循环外部启动列表,并在循环内部向列表添加元素。代码应该是这样的

List<WebElement> all = null;
outer: while (isContinue) 
{    
     all.addAll(driver.findElements(By.className("torpedo")));
     /* do screen scrolling*/
}
List all=null;
外部:while(isContinue)
{    
all.addAll(driver.findElements(By.className(“鱼雷”));
/*做屏幕滚动*/
}
如果列表中有重复的元素,也可以使用集合而不是列表

Set<WebElement> all = null;
outer: while (isContinue) 
{    
     all.addAll(driver.findElements(By.className("torpedo")));
     /* do screen scrolling*/
}
Set all=null;
外部:while(isContinue)
{    
all.addAll(driver.findElements(By.className(“鱼雷”));
/*做屏幕滚动*/
}

提供更多信息:1。你的确切测试步骤是什么?2.什么对你有用?显示代码。3.你被困在哪里?提供错误跟踪。4.提供相关的HTML DOM。您正在一次又一次地重置
all
。。。为什么不直接滚动直到你知道你已经完成了滚动,然后调用set
all=driver.findElements(By.className(“鱼雷”)在循环之后?这可能会解决在设置元素之前最后一次出现滚动的问题。很难说清楚,因为我看不到您的
isContinue
正在做什么,也看不到循环逻辑的任何其他部分。:)