断言网页中缺少元素,给出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 }