java - Selenium 网络驱动程序 : best practice to handle a NoSuchElementException

标签 java selenium-webdriver junit

经过大量搜索和阅读,我仍然不清楚使用 Webdriver 处理失败断言的最佳方法。我本以为这是一个常见的核心功能。我想做的就是:

  • 寻找一个元素
  • 如果存在 - 告诉我
  • 如果不存在 - 告诉我

我想向非技术人员展示结果,因此让它抛出带有完整堆栈跟踪的“NoSuchElementExceptions”没有帮助。我只是想要一个好消息。

我的测试:

@Test
public void isMyElementPresent(){
  //  WebElement myElement driver.findElement(By.cssSelector("#myElement"));
    if(driver.findElement(By.cssSelector("#myElement"))!=null){
        System.out.println("My element was found on the page");
    }else{
            System.out.println("My Element was not found on the page");
        }
    }

当我强制失败时,我仍然会抛出 NoSuchElementException。我也需要 try/catch 吗?我能否合并 Junit 断言和/或 Hamcrest 以生成更有意义的消息而不需要 System.out.println?

最佳答案

我遇到过类似的情况。根据Javadoc对于 findElementfindElements API,findElement 行为似乎是设计使然。您应该使用 findElements 来检查不存在的元素。

由于在您的情况下,WebElement 可能不存在,因此您应该改用 findElements

我会按如下方式使用它。

List<WebElement> elems = driver.findElements(By.cssSelector("#myElement"));
if (elems.size == 0) {
        System.out.println("My element was not found on the page");
} else
        System.out.println("My element was found on the page");
}

关于java - Selenium 网络驱动程序 : best practice to handle a NoSuchElementException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22780964/

相关文章:

selenium - 这是 WebDriver 服务器的初始启动页面

python - 如何使用 Selenium 来点击某些东西

java - 停止 Jmockit 中的模拟

java - build 者该如何曝光?

java - 第 22 行 : No source code is available for type in html libgdx

java - 在 Java 中加载共享库的问题

java - 使用 JUnit 测试写入 csv 文件

java - 将 Java 转换为 C++

python - 由于可见性问题,Selenium 将不会选择下拉选项

java - 从 InputStream 解析日期时出现 ParseException