这是一个常见问题的奇怪变种。
我正在使用 headless 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>在我等待之前。
我想知道是否有任何关于我做错了什么的想法,以及是否有任何原则可以用来确定特定的等待是否有用。
最佳答案
你实际上忘记了最后调用ignoring
函数,这个忽略就是你想要的。当您等待元素的可见性时,可能会出现该元素不存在的情况,但是如果您使用忽略功能,它将忽略此类错误的发生,直到满足给定的条件为止。
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, SECONDS)
.pollingEvery(5, SECONDS)
.ignoring(NoSuchElementException.class);
关于java - Selenium : NoSuchElementException Thrown on the Line Where I Wait,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47417601/