Selenium findElements抛出异常而不是返回空列表

时间:2017-03-23 15:36:10

标签: java selenium

根据我在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,这就是我希望避免每次我想检查的元素都是可见的。

1 个答案:

答案 0 :(得分:2)

发生异常是因为您已从购物车中删除了最后一个元素,并且没有剩余元素可以使用给定条件进行标识:

最初说物品在WHILE LOOP期间有5个元素,直到items.size()&gt; 1循环将正常工作,但当items.size()== 1;它会进入循环并执行但是在

点击(CartPage.yesButton,“确认删除项目”);

最后一个元素将被删除,并且不存在这样的元素因此导致异常,因为DOM中不存在定位器“CartPage.itemInCart”值。