public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds) {
if (timeoutInSeconds > 0) {
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
return wait.Until(drv => drv.FindElement(@by));
}
return driver.FindElement(@by);
}
Что делать?
когда я использую FindElement(@by, timeoutInSeconds);, то все ок, выполняется быстро. А вот в методе IsElementPresent секунд 5-10. Это как-то много
Может подскажете как логи вытащить? не сталкивалась еще с этим
И еще. экспериментальным путем выяснила, что долго выполняется тогда, когда элемента на странице нет.
Сделала новый метод, без таймаута, все равно примерно 10 секунд…
Погугли Expected Conditions webdriver. Для питона и явы это точно есть, для C# наверное тоже должно быть. Это встроенные ожидания для определенных поведений элементов на странице. Работает очень хорошо.
Ну так и сделайте, что б не терять - сетайте ImplicitlyWait в ноль в своих вейтах/верифаях, а потом приводите к исходному значению. Хотя это не имеет логического обоснования - если у вас ImplicitlyWait = 10 сек, то вы готовы жертвовать этим временем, что бы дождаться появления элемента.