【发布时间】:2017-11-21 16:10:02
【问题描述】:
这是一个奇怪的常见问题。
我正在使用无头 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 ...”它的出现方式,元素必须在 我等待它之前可用,这似乎违背了目的。
它目前的显示方式,我别无选择,只能添加隐式等待,但我知道必须有 some 方法来进行显式等待,这样元素就不必可用 之前我等着。
我想知道是否有任何关于我做错了什么的想法,以及是否有任何原则可以用来确定特定等待是否有用。
【问题讨论】:
-
非headless运行时是否有效?
-
没有。至少不是我上面列出的特定行(我在多个地方都遇到了这个问题)。当我运行“wait.until ...”时,使用 headed firefox 运行仍然会引发 NoSuchElementException
-
而且使用显式等待 (WebDriverWait) 也不起作用?
-
啊,这似乎确实有效。我既头大又漫不经心地尝试了它。但是,如果 FluentWait 不起作用,那将如何工作?这些等待是什么导致人们需要元素先于等待?
-
toolsqa.com/selenium-webdriver/implicit -explicit-n-fluent-wait/ 有很好的解释。
标签: java firefox selenium-webdriver