Как объединить неявные и явные таймауты в Selenium? - PullRequest
0 голосов
/ 08 октября 2018

Я использую 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 секунд.

1 Ответ

0 голосов
/ 08 октября 2018

Согласно документации Явные и неявные ожидания четко указано, что:

Не смешивайте неявные и явно ждет.Это может привести к непредсказуемому времени ожидания .Например, установка неявного ожидания 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...