遍历java中的每个元素以查看它是否显示

时间:2018-03-11 22:26:34

标签: java selenium

我是Java的新手,希望获得有关执行以下操作的最佳方式的帮助:

我想抓住属于某个类的所有元素,但我想要计算显示这些元素的数量。我已经设置了代码来创建一个int计数器,findelements和断言,但基本上我的问题是如何在java中创建一个for循环来简单地检查元素列表中的元素是否显示,然后计数+1 ?

    int testNumber = 0;
    List<WebElement> testItems = _driver.findElements(By.className("test"));

    //Loop each element from the list and if it's displayed then +1 for test Number         

    Assert.assertEquals(testNumber, 4,
            "Mismatch between the number of test items displayed");

1 个答案:

答案 0 :(得分:2)

使用方法WebElement#isDisplayeddocumentation)获取元素的状态。

您需要做的就是设置一个像int counter = 0这样的计数器。然后在for (WebElement e : testItems) { ... }之类的所有元素上创建一个循环。然后,在循环内部创建某种if (e.isDisplayed()) { ... }。在这里你可以像counter++一样增加计数器。总而言之:

int counter = 0;
for (WebElement e : testItems) {
    if (e.isDisplayed()) {
        counter++;
    }
}

此变体使用增强的for循环。您当然也可以使用其他循环变体。

使用流可以制作紧凑的单行,如

int count = testItems.stream()
    .filter(WebElement::isDisplayed)
    .count();

请注意WebElement,如果在生成后不能快速处理,则可以快速陈旧。这是由他们抛出StaleElementReferenceException来表示的。只要网站重建(完全或部分),您的元素就会从网站的旧状态中检索出来,因此无效。

如果遇到这种情况,您可以在找到其他元素之前直接收集元素的显示状态。这减少了单个WebElement的生成和访问之间的时间。