我正在使用具有隐式超时的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秒钟后就会超时。
答案 0 :(得分:2)
根据Explicit and Implicit Waits的文档,其中明确指出:
请勿混用 隐式 和 显式 等待。这样做可能导致不可预测的等待时间。例如,将隐式等待设置为10秒,将显式等待设置为15秒,则可能导致20秒后发生超时。
如果您将隐式超时定义为:
_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);