Selenium:NoSuchElementException在我等待的线上抛出

时间:2017-11-21 16:10:02

标签: java firefox selenium-webdriver

这是一个奇怪的常见问题。

我使用无头firefox浏览器运行Selenium项目。

我得到了常见的NoSuchElementExceptions。这不是什么新鲜事。但是,尝试通过显式等待来解决它们并不能解决问题。

例如,以下行抛出NoSuchElementException:

WebElement trackingInbox = methodDriver.findElement(By.id("inbox-widget-container-id"));

然后我在这一行上面添加以下内容:

FluentWait wait = new FluentWait(methodDriver);
wait.withTimeout(90, TimeUnit.SECONDS);
wait.pollingEvery(250, TimeUnit.MILLISECONDS);
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("inbox-widget-container-id")));

WebElement trackingInbox = methodDriver.findElement(By.id("inbox-widget-container-id"));

在第一个实例中,我在" methodDriver.findElement中得到了异常。 。 。 "

在第二个实例中,我在" wait.until中得到它。 。 。 "

当我等待" presenceOf时会发生这种情况。 。 "当我等待" visibilityOf。 。 "它出现的方式,元素必须在之前可用我等待它,这似乎打败了目的。

它当前的显示方式,我别无选择,只能添加隐式等待,但我知道必须有一些方式来进行显式等待,以便元素不必可用< em>之前我等着它。

我想知道是否有任何关于我做错了什么的想法,如果有任何原则,我可以去确定一个特定的等待是否有用。

1 个答案:

答案 0 :(得分:1)

你实际上忘了在最后调用ignoring函数,这个忽略就是你想要的。当您等待元素的可见性时,可能会出现该元素不存在但是如果您使用忽略函数,它将忽略如果发生此类错误,直到它满足给定条件。

   Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
       .withTimeout(30, SECONDS)
       .pollingEvery(5, SECONDS)
       .ignoring(NoSuchElementException.class);