断言网页中缺少元素,给出 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 WebElement 的 Java 文档 。因此,在调用 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
}
需要断言网页中没有该元素,
当尝试使用 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 WebElement 的 Java 文档 。因此,在调用 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
}