该查询包含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(WebElement element)
定义为:
public static ExpectedCondition<java.lang.Boolean> invisibilityOf(WebElement element)
An expectation for checking the element to be invisible
这里的期望是,该元素必须作为前提 存在 并且 可见 ,并且该方法将等待该元素 不可见 。在这一点上,值得一提的是,由于参数的类型为
WebElement ,findElement(By by)
因此必须成功定位该元素作为前提条件。因此NoSuchElementException
不可 忽视 。
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 生成的(来源 -