Selenium - Java - 按类名的findelements不返回所有元素

时间:2018-03-28 07:21:26

标签: java selenium-webdriver

以下是我的代码段。

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。 - 显示页面后立即检查页面并手动搜索,页面中将显示所有元素。

2 个答案:

答案 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");