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

标签 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在循环之前,这就是我希望避免每次我想检查元素是否可见时使用的内容。

最佳答案

发生异常是因为您已经从购物车中删除了最后一个元素,并且没有更多的元素可以用给定的标准来识别:

说最初 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/

相关文章:

java - 调用 System.gc() 的良好做法

java - 我的套接字应用程序停止工作 - 如何修复它?

格式为 "yyyy-mm-dd HH:mm:ss"的 Java 字符串到日期对象

perl - 无法使用 Selenium 自动化 SWF 组件

java - 如何并行运行java for循环?

java - 是否有可能有一个流利的等待两个条件

java - Selenium 的 ZAP 设置

java - 如何在 Spring WebApplicationContext 中在运行时添加 bean 实例?

java - 如何在 android 中的对象框数据库中插入对象列表?喜欢房间数据库

selenium - 如何在selenium中使用addCustomRequestHeader方法?