根据我在整个 SE 的许多回答,selenium 的 driver.findElements()
应该返回一个空的 List<WebElement>
当它找不到任何符合条件的元素时。那么为什么这一行:
items = driver.findElements(By.linkText("remove"))
抛出 ElementNotFoundException
?对于上下文:此行处于循环中,在没有更多“删除”链接剩余时抛出此异常之前,它可以正常工作几次。
特别是,this answer非常明确,这应该给我一个空列表。
编辑:
这是导致问题的整个循环。
List<WebElement> items;
try {
items = driver.findElements(CartPage.itemInCart);
} catch (NoSuchElementException e) {
return;
} catch (Exception e) {
throw e;
}
while (items.size() > 0) {
List<WebElement> removeButtons = driver.findElements(CartPage.removeItem);
removeButtons.get(0).click();
click(CartPage.yesButton, "Confirm remove item");
items = driver.findElements(CartPage.itemInCart); // <--Exception here
}
注意 try
/catch
在循环之前,这就是我希望避免每次我想检查元素是否可见时使用的内容。
最佳答案
发生异常是因为您已经从购物车中删除了最后一个元素,并且没有更多的元素可以用给定的标准来识别:
说最初 Items 在 WHILE LOOP 期间有 5 个元素,直到 items.size() > 1 循环会正常工作,但是当 items.size() ==1;它将进入循环并执行但是在
click(CartPage.yesButton, "确认移除商品");
最后一个元素将被删除,这样的元素将不存在,因此会导致异常,因为定位器“CartPage.itemInCart”值不再存在于 DOM 中。
关于java - Selenium findElements 抛出异常而不是返回空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42980618/