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

时间:2018-08-16 17:05:31

标签: java selenium selenium-webdriver webdriver webdriverwait

此查询包含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:NoSuchElementExceptioninvisibilityOfElementLocated()的Selenium实现中被忽略,但在invisibilityOf()中则未被忽略。有什么原因吗?但是,我认为这就是为什么我要例外。如何等待某个元素(不是定位符)消失?

问题2:即使我使用的是NoSuchElementException,为什么我仍然得到wait.ignoring(org.openqa.selenium.NoSuchElementException.class);。使用wait.ignoring是否正确?似乎wait.ignoring()在这里没有做任何事情。

预先感谢您的回答。

1 个答案:

答案 0 :(得分:3)

invisibilityOf()

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()

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}}作为强制措施。