断言网页中缺少元素,给出 NoSuchElementException

Assert Absence of element in the web page, giving NoSuchElementException

需要断言网页中没有该元素, 当尝试使用 fieldValueBox.isDisplayed(); 而不是 "false" 时,它会抛出 "NoSuchElementFound" 异常。 现在我正在使用 'try catch' 并在 'catch'

中做出决定

isDisplayed() 方法 return 是一个基于现有元素的布尔值。意思是,如果您想检查网页上是否显示存在的元素(例如,未隐藏或其他任何内容),此方法将正常工作。

在您的情况下,fieldValueBox 可能不存在。因此,isDisplayed() 方法将尝试 return 一个不存在的对象上的布尔值。

try catch 将在此处为您提供帮助,因此这是一种正确的方法。还有其他几种方式,查看:

WebDriver: check if an element exists?

How do I verify that an element does not exist in Selenium 2

如果该元素不在页面上,那么您将得到 'NoSuchElementFound' 异常。您可以尝试检查定位器的元素数量是否为零:

private boolean elementNotOnPage(){
    boolean elementIsNotOnPage = false;

    List<WebElement> element = driver.findElements(yourLocator);

    if(element.size() == 0){
        elementIsNotOnPage = true;
    }

    return elementIsNotOnPage;

}

当您试图断言您的网页中没有这样的元素时:

fieldValueBox.isDisplayed();

现在,如果您查看 isDisplayed() method it's associated to the Interface WebElementJava 文档 。因此,在调用 isDisplayed() 方法之前,首先必须 locate/search 元素,然后才能调用 isDisplayed()isEnabled()isSelected() 或任何其他相关方法。

粗略地说,在您之前的步骤中,当您尝试通过 findElement(By by)findElements(By by) 方法 find/locate 所需的 WebElement NoSuchElementFound 引发异常。当 findElement(By by)findElements(By by) 方法引发 NoSuchElementFound 异常时,fieldValueBox.isDisplayed(); 的以下行将不会被执行。

解决方案

您的问题的可能解决方案是在 try-catch {} 块中调用 findElement(By by),如下所示:

try {
    WebElement fieldValueBox = driver.findElement(By.id("element_id"));
    bool displayed = fieldValueBox.isDisplayed();
    //use the bool value of displayed variable
} catch (NoSuchElementException e) {
    //perform other tasks
}