如何让WebDriver.findElements找到所有匹配的元素?

时间:2018-03-13 13:15:49

标签: java selenium

我正在使用此命令查找列表中的所有项目:

List<WebElement> layerFolders = driver.findElements(By.className("super-list-item-header"));

它会一致地返回50个元素,尽管列表中有超过100个项目。

这里给出的尺寸也是错误的:

debug.print(thisClass + " collections size: " + layerFolders.size());

面板离开了页面,&amp;必须滚动才能到达底部。 它目前列出了可见的项目。一些不在页面底部。

1 个答案:

答案 0 :(得分:0)

我有类似的问题。当您向下滚动页面时,会立即发生这种情况,并立即开始执行下一行代码。由于您试图获取具有相同类名的所有元素,因此它只获取可见的元素。所有元素都不可见,因为在滚动之后加载内容需要时间。基本上,您的代码在所有元素可见之前运行。为了能够获得所有元素,您应该等待它们可见。你可以试试driver.manage()。timeouts()。implicitlyWait(10,TimeUnit.SECONDS);或Thread.sleep(1000);然后尝试获取具有相同类名的所有元素。

//Your code should look like this
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("window.scrollTo(0, document.body.scrollHeight);");
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //or Thread.sleep(1000);
List<WebElement> layerFolders = driver.findElements(By.className("super-list-item-header"));