我正在使用带有隐式超时的 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 秒后就超时了。
根据文档显式和隐式等待 https://www.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-and-implicit-waits其中明确提到:
不要混在一起implicit and explicit等待。这样做可能会导致不可预测的等待时间。例如,设置 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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)