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

问题描述 投票:0回答:4

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

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

问题是 Selenium Webdriver 仍在等待该元素长达 30 秒,然后才会给出错误并进入下一步。我也尝试使用visibilityOfElementLocated选项,但它仍然不起作用。

我在这里遗漏了什么吗?

硒版本:- 2.46.0

浏览器:- Mozilla、Chrome

java selenium webdriver
4个回答
4
投票

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

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

这是关于这个主题的一个很好的答案


2
投票

如果您在同一解决方案中使用隐式等待和显式等待,您将遇到 seleniumhq 文档中的问题

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


添加官方文档链接及其屏幕截图 -

请参阅有关混合显式和隐式等待的官方 Selenium 文档。

https://www.selenium.dev/documentation/en/webdriver/waits/


1
投票

您能与我们分享完整的代码吗?您似乎忘记从某处删除 30 秒的等待。 – 皮蒂亚

这非常直截了当,我也遇到了同样的问题,但这只是因为我在启动浏览器时声明隐式等待 30 秒,不想回头看它,因为它看起来“微不足道”。非常感谢皮蒂亚指出这一点。


0
投票

使用这个语法,它会起作用 WebDriverWait d = new WebDriverWait(driver, Duration.ofMillis(7000));

© www.soinside.com 2019 - 2024. All rights reserved.