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

时间:2018-04-12 10:55:47

标签: java selenium selenium-webdriver webdriver nosuchelementexception

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

3 个答案:

答案 0 :(得分:3)

如果该元素不在页面上,那么您将获得“NoSuchElementFound”'例外。您可以尝试检查定位器的元素数是否为零:

private boolean elementNotOnPage(){
    boolean elementIsNotOnPage = false;

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

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

    return elementIsNotOnPage;

}

答案 1 :(得分:1)

isDisplayed()方法返回基于现有元素的布尔值。这意味着,如果你想检查网页上是否存在一个存在的元素(如,不是隐藏或任何东西),这种方法将正常工作。

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

尝试捕捉会帮助你,所以这是一个正确的方法。还有其他一些方法,请检查:

WebDriver: check if an element exists?

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

答案 2 :(得分:1)

当您尝试断言时,您所拥有的网页中没有此类元素:

fieldValueBox.isDisplayed();

现在,如果您查看isDisplayed()方法的 Java Docs ,它与Interface WebElement相关联。因此,在首先调用isDisplayed()方法之前,您必须找到/搜索元素,然后才能调用isDisplayed()isEnabled()isSelected()或任何其他相关方法。

粗略的,在您之前的步骤中,当您尝试通过findElement(By by)findElements(By by)方法 NoSuchElementFound 查找/找到所需的 WebElement 时提出异常。当findElement(By by)findElements(By by)方法引发 NoSuchElementFound 异常时,fieldValueBox.isDisplayed();的以下行将无法执行。

解决方案

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

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
}