java - Selenium : NoSuchElementException Thrown on the Line Where I Wait

标签 java firefox selenium-webdriver

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

我正在使用 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/

相关文章:

jQuery - 选项上的选定属性未显示在 FireBug 中

java - 如何在文本框中输入左括号

java - 交替法

java - Android 用图标构建迷你抽屉导航

java - 如何在不对 IP 进行硬编码的情况下从本地主机外部访问 Java RMI/JMX?

firefox - 来自 FirefoxDriver 的 Selenium "session not found"

java - GridView 滚动很慢

firefox - JRE 和 Java 插件的区别

java - Selenium - 无法在 [a link] http ://www. cartasi.it/gtwpages/index.jsp 上找到基于 CSS 元素的密码字段元素

testing - Sikuli 与 Selenium WebDriver 的集成