以下是我的代码段。
List<WebElement> e=driver.findElements(By.className("<this class name>"));
System.out.println(e.size());
页面中有50个带有此类名称的元素,但只返回40个元素。上面查询的div类嵌套在其他div类中。但是,所有元素都具有完全相同的结构。元素以5列10行的表格格式构建。
我可以使用各自的xpath访问未返回的元素。
Selenium:3.11.0
浏览器 - Chrome版本65.0.3325.181
ChromeDriver 2.36.540470
感谢有关解决此问题的任何建议,以返回所有50个元素。
在问题中添加更多信息以供将来参考。 - 默认情况下,只能看到7行数据。需要向下滚动以查看其余行。 - 对元素使用.isDisplayed()验证相同,第8行及以下的所有元素按预期返回false。 - 显示页面后立即检查页面并手动搜索,页面中将显示所有元素。
答案 0 :(得分:0)
如果您希望使用固定数量的元素,则可以使用wait
。它将允许页面完全呈现,并且所有元素都可见。
2种方式(以同样的方式工作):
WebDriverWait wait = new WebDriverWait(driver, 30)
wait.until(new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver input) {
List<WebElement> e=driver.findElements(By.className("<this class name>"));
return e.size() == 50;
}
};
或使用lambda表达式:
WebDriverWait wait = new WebDriverWait(driver, 30)
wait.until(driver -> {
List<WebElement> e=driver.findElements(By.className("<this class name>"));
return e.size() == 50;
};
答案 1 :(得分:0)
根据您的问题验证HTML DOM内是否所有 50 元素可见,您可以WebDriverWait ExpectedConditions visibilityOfAllElementsLocatedBy 3}}子句为official CakePHP authentication plugin,用于通过定位器策略识别的所有元素,并验证如下:
if(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.className("<this class name>"))).size() == 50)
System.out.println("All elements visible");
else
System.out.println("All elements NOT visible");