显式等待在Selenium webdriver中不起作用

时间:2015-07-20 06:48:55

标签: java selenium webdriver

我想在我的页面中找到一个元素。只有在应用程序中出现任何错误时才会出现该元素。我处理得很好,唯一的问题是它等待30秒(隐式等待)才能进入下一步。我不想等待30秒而不是我喜欢我的脚本等待3秒才能进入下一步,所以我决定使用显式等待。这是我的代码

WebDriverWait wait = new WebDriverWait(driver, 3);
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("errorelement")));

问题是Selenium webdriver在发出错误并转到下一步之前仍在等待该元素长达30秒。我尝试使用visibilityOfElementLocated选项,但它仍然无法正常工作。

我在这里遗漏了什么吗?

Selenium版本: - 2.46.0

浏览器: - Mozilla,Chrome

3 个答案:

答案 0 :(得分:2)

我建议将隐式等待设置为0,并始终使用显式等待:

driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);

关于这个主题,这是一个很好的answer

答案 1 :(得分:1)

如果您在同一解决方案中使用隐式等待和显式等待,则会出现seleniumhq文档中的问题

警告:不要混合隐式和显式等待。这样做会导致不可预测的等待时间。例如,设置10秒的隐式等待和15秒的显式等待可能会导致20秒后发生超时。

答案 2 :(得分:1)

您可以与我们分享完整的代码吗?似乎您忘记了从某处删除30秒的等待时间。 – peetya

这很直截了当,我遇到了同样的问题,但这仅仅是因为我在启动浏览器时声明了隐式等待30秒,并没有回头看一下,因为它看起来“微不足道”。非常感谢您指出peetya。