2

我正在使用带有隐式超时的 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 秒后超时。

4

1 回答 1

2

根据显式和隐式等待的文档,明确提到:

不要混合隐式显式等待。这样做会导致无法预料的等待时间。例如,设置 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);
于 2018-10-08T18:08:21.490 回答