Selenium Webdriver:处理NoSuchElementException的最佳实践

Ste*_*ike 6 java junit selenium-webdriver

经过大量的搜索和阅读,我仍然不清楚使用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");
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我强制失败时,我仍然会抛出NoSuchElementException.我还需要尝试/捕获吗?我是否可以合并Junit断言和/或Hamcrest来生成更有意义的消息而无需System.out.println?

Vis*_*ish 10

我遇到过类似的情况.按照的JavadocfindElementfindElementsAPI的,看来该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");
}
Run Code Online (Sandbox Code Playgroud)