我使用带有隐式超时的 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/