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