断言网页中缺少元素,给出NoSuchElementException
需要声明网页中没有这样的元素,当尝试使用fieldValueBox.isDisplayed();
而不是“假”它抛出“NoSuchElementFound”exception。 现在我正在使用’try catch’并在’catch’中做出决定
如果元素不在页面上,那么您将获得’NoSuchElementFound’exception。 您可以尝试检查定位器的元素数是零:
private boolean elementNotOnPage(){ boolean elementIsNotOnPage = false; List element = driver.findElements(yourLocator); if(element.size() == 0){ elementIsNotOnPage = true; } return elementIsNotOnPage; }
isDisplayed()
方法返回基于现有元素的布尔值。 这意味着,如果要检查网页上是否显示了一个存在的元素(如,不是隐藏或任何东西),此方法将正常工作。
在您的情况下,fieldValueBox可能不存在。 因此, isDisplayed()
方法将尝试在不存在的对象上返回布尔值。
尝试捕获将在这里帮助你,所以这是一个正确的方法。 还有其他几种方法,请检查:
WebDriver:检查元素是否存在?
如何validationSelenium 2中不存在元素
当您试图断言网页中没有这样的元素时:
fieldValueBox.isDisplayed();
现在,如果您查看isDisplayed()
方法的Java Docs ,它将与Interface WebElement相关联。 因此,在调用isDisplayed()
方法之前,首先必须找到/搜索元素,然后才能调用isDisplayed()
, isEnabled()
, isSelected()
或任何其他相关方法。
粗略的,在您之前的步骤中,当您尝试通过findElement(By by)
或findElements(By by)
方法找到/找到所需的WebElement时 ,引发了NoSuchElementFoundexception。 当findElement(By by)
或findElements(By by)
方法引发NoSuchElementFoundexception时,下面一行的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 }