c# - 如何在 Selenium 中结合隐式和显式超时?

标签 c# selenium selenium-webdriver webdriverwait implicitwait

我使用带有隐式超时的 Selenium ChromeDriver:

_driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);

在我的一项测试中,我想用显式超时来覆盖它。在读取属性之前,我明确等待找到该元素:

WebDriverWait wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(120));
wait.Until(d => d.FindElement(By.CssSelector("div.example")));

我预计这需要 120 秒才能尝试找到该元素,但仅 5 秒后就超时了。

最佳答案

根据 Explicit and Implicit Waits 的文档明确提到:

Do not mix implicit and explicit waits. Doing so can cause unpredictable wait times. For example setting an implicit wait of 10 seconds and an explicit wait of 15 seconds, could cause a timeout to occur after 20 seconds.

仍然,如果您将隐式超时定义为:

_driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);

在引入显式等待以找到元素之前,您需要删除隐式超时,如下所示:

_driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(0);
WebDriverWait wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(120));
wait.Until(d => d.FindElement(By.CssSelector("div.example")));

完成显式等待后,您可以再次将隐式超时重新配置为:

_driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(0);
WebDriverWait wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(120));
wait.Until(d => d.FindElement(By.CssSelector("div.example")));
//perform your action with the element
_driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);

关于c# - 如何在 Selenium 中结合隐式和显式超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52706693/

相关文章:

c# - 在 C# 中,您可以为具有名称的值元组定义别名吗?

c# - C# 中的 RayTracer 项目

c# - wwwroot 中的 vNext/.NET5 config.json

python - Selenium 没有通过链接文本找到元素

javascript - 使用 Selenium Webdriver 获取定期更新的内容

java - TestNG 多个测试类 - 运行其他类

ruby - 如何以编程方式获取 selenium、selenium 服务器或 selenium webdriver 的运行版本?

c# - 我是否需要为引用主行的每一行调用 InsertOnSubmit?

java - 错误: cannot access org. openqa.selenium.HasInputDevices,未找到类文件

internet-explorer - 在 IE 中打开新窗口而不是 selenium web 驱动程序中的新选项卡