当前位置: 首页 > 面试题库 >

Selenium invisibilityOf(element)方法抛出NoSuchElementException + WebDriverWait.ignoring(NoSuchElementException.class)不起作用

常波
2023-03-14
问题内容

该查询包含2个相关问题。在进行下一步之前,我需要等待某个元素不可见,因此我尝试如下定义自定义方法:

public void waitToDisappear(long timeOutInSeconds, WebElement element) {
    WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
    wait.ignoring(org.openqa.selenium.NoSuchElementException.class);
    wait.until(ExpectedConditions.invisibilityOf(element));
}

当我将此方法称为as时common.waitToDisappear(5, <WebElement>);,我得到了Caused by: org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element:。但是,如果我使用locator method new WebDriverWait(world.driver, 5).until(ExpectedConditions.invisibilityOfElementLocated((By.xpath(someXpath)))),它工作正常,没有任何异常。

问题1:NoSuchElementException在Selenium的实现中会被忽略invisibilityOfElementLocated(),而在中则不会被忽略invisibilityOf()。有什么原因吗?但是,我认为这就是为什么我要例外。我如何等待元素(不是定位器)消失?

问题2:NoSuchElementException即使使用,我为什么也会得到提示wait.ignoring(org.openqa.selenium.NoSuchElementException.class);。这是正确的使用方式wait.ignoring吗?似乎wait.ignoring()这里什么也没做。

预先感谢您的回答。


问题答案:

invisibilityOf()

invisibilityOf(WebElement element) 定义为:

public static ExpectedCondition<java.lang.Boolean> invisibilityOf(WebElement element)

An expectation for checking the element to be invisible

这里的期望是,该元素必须作为前提 存在 并且 可见 ,并且该方法将等待该元素 不可见 。在这一点上,值得一提的是,由于参数的类型为
WebElementfindElement(By by)因此必须成功定位该元素作为前提条件。因此NoSuchElementException不可 忽视

invisibilityOfElementLocated()

invisibilityOfElementLocated(By locator) 定义为:

public static ExpectedCondition<java.lang.Boolean> invisibilityOfElementLocated(By locator)

An expectation for checking that an element is either invisible or not present on the DOM.

在这里,期望显然是元素已经 不可见* 或在HTML
DOM中
不存在 。在这种情况下的主要任务是在
不存在 可偶数之前发生元件的 ExpectedCondition 在调用或在 时间跨度ExpectedCondition
是活动的。因此,在这里我们需要忽略作为一项强制措施。
*
__NoSuchElementException

回答 问题2
:使用wait.ignoring(org.openqa.selenium.NoSuchElementException.class);是不合理的,因为调用的前提条件invisibilityOf(WebElement element)涉及以下事实:该元素必须作为强制性措施出现在DOM树中。



 类似资料:
  • 我有以下代码段: 然而,findbugs说有一种不好的做法: It:Iterator next()方法不能抛出NoSuchElementException(It\u NO\u SUCH\u元素),该类实现java。util。迭代器接口。然而,它的next()方法不能抛出java。util。无接触元素异常。应该更改next()方法,以便在没有更多元素可返回时调用它时抛出NoTouchElementE

  • 当我检查某个元素的isDisplayed()是否等于false时,我得到的是NoTouchElementException。这是我的代码: XYZpage.java: XYZtest.java: 我在这里断言没有显示元素。我在这个网站和其他地方看到了其他的解决方案,在这些地方,人们建议尝试预期条件等。但由于元素不存在,甚至ExpectedConditions最终也不会抛出任何TouchElemen

  • 我创建了一个解决运动方程问题的交互式类(在用户输入循环中的另一个类中访问:mathiverse),它工作得很好,但是在给出答案之后,它抛出了一个。 答案给出后,我希望我的代码继续搜索输入,但它抛出了这样的消息: 线程“main”java.util.NosuchelementException异常:在mathiverse.main(mathiverse.java.53)的java.base/java

  • 问题内容: 我正在学习有关Java的知识,并且一直困扰着这个问题:当我尝试使用简单的方法(例如)时,编译器给我错误。这是代码: 该方法在Javadoc中定义。 这样做应该很简单,但是我真的不知道我在做什么错。 问题答案: 您已经创建了自己的类,并且没有使用内置的Java类。您尚未定义。

  • 问题内容: 我有一个像这样开始的函数: 我正在输入字符串“ 1 + 2 * 3 ** 4”,但是return语句根本没有删除空格,我也不知道为什么。我什至没有运气尝试过.replace()。 问题答案: Strip不会在所有地方(仅在开头和结尾)删除空格。尝试这个: 在这种情况下使用是多余的(显然,感谢评论员!)。 在我休息之前(感谢OP!)的PS Bonus有用片段:

  • 我已经覆盖了和所以我不太确定出了什么问题。它们是使用 Eclipse 生成的(来源 -