这是一个奇怪的常见问题。
我使用无头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>之前我等着它。
我想知道是否有任何关于我做错了什么的想法,如果有任何原则,我可以去确定一个特定的等待是否有用。
答案 0 :(得分:1)
你实际上忘了在最后调用ignoring
函数,这个忽略就是你想要的。当您等待元素的可见性时,可能会出现该元素不存在但是如果您使用忽略函数,它将忽略如果发生此类错误,直到它满足给定条件。
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, SECONDS)
.pollingEvery(5, SECONDS)
.ignoring(NoSuchElementException.class);