我是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");
答案 0 :(得分:2)
使用方法WebElement#isDisplayed
(documentation)获取元素的状态。
您需要做的就是设置一个像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
的生成和访问之间的时间。