此查询包含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));
}
当我将此方法称为common.waitToDisappear(5, <WebElement>);
时,我得到Caused by: org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element:
。
但是,如果我使用定位器方法new WebDriverWait(world.driver, 5).until(ExpectedConditions.invisibilityOfElementLocated((By.xpath(someXpath))))
,那么它工作正常,没有任何异常。
问题1:NoSuchElementException
在invisibilityOfElementLocated()
的Selenium实现中被忽略,但在invisibilityOf()
中则未被忽略。有什么原因吗?但是,我认为这就是为什么我要例外。如何等待某个元素(不是定位符)消失?
问题2:即使我使用的是NoSuchElementException
,为什么我仍然得到wait.ignoring(org.openqa.selenium.NoSuchElementException.class);
。使用wait.ignoring
是否正确?似乎wait.ignoring()
在这里没有做任何事情。
预先感谢您的回答。
答案 0 :(得分:3)
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)
必须成功地将元素定位为前提条件。因此,{<1}}不能被忽略。
invisibilityOfElementLocated(By locator)
定义为:
NoSuchElementException
这里的期望显然是HTML DOM中的元素已经不可见或不存在。在这种情况下,主要任务是元素的缺少,甚至在调用 ExpectedCondition 之前或 timespan 期间 > ExpectedCondition 处于活动状态。因此,在这里我们需要忽略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.
作为强制措施。
回答问题2 :使用NoSuchElementException
是不合理的,因为调用wait.ignoring(org.openqa.selenium.NoSuchElementException.class);
的前提条件是必须在{{ 3}}作为强制措施。