根据我在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
,这就是我希望避免每次我想检查的元素都是可见的。
答案 0 :(得分:2)
发生异常是因为您已从购物车中删除了最后一个元素,并且没有剩余元素可以使用给定条件进行标识:
最初说物品在WHILE LOOP期间有5个元素,直到items.size()&gt; 1循环将正常工作,但当items.size()== 1;它会进入循环并执行但是在
点击(CartPage.yesButton,“确认删除项目”);
最后一个元素将被删除,并且不存在这样的元素因此导致异常,因为DOM中不存在定位器“CartPage.itemInCart”值。