При выполнении теста Webdriver выполняет все команды последовательно, не дожидаясь окончания выполнения предыдущей. Например, нажали на какую-нибудь кнопку на странице, в результате должно появиться новое поле, в которое нужно что-то ввести, но из-за асинхронной работы Webdriver команда работы с этим полем выполняется раньше, чем оно успевает появиться. Из-за этого тест может возвращать ошибку, что элемент не найден.
Чтобы избежать этой ошибки можно каждый раз проверять наличие элемента на странице. Для этого придется использовать цикл и периодически вызывать метод findElement. Очевидно, что писать циклы для проверки наличия элемента перед выполнением каждой команды очень неудобно. К счастью, у Webdriver есть возможность задавать неявные ожидания.
Значение неявного ожидания можно задать всего один раз, и потом Webdriver каждый раз перед выполнением команды будет пытаться найти элемент. Если же в течение указанного времени элемент не появится, то получим исключение NoSuchElementException.
Включать и отключать неявное ожидание, а также менять время ожидания, можно в любой момент.
Чтобы избежать этой ошибки можно каждый раз проверять наличие элемента на странице. Для этого придется использовать цикл и периодически вызывать метод findElement. Очевидно, что писать циклы для проверки наличия элемента перед выполнением каждой команды очень неудобно. К счастью, у Webdriver есть возможность задавать неявные ожидания.
Значение неявного ожидания можно задать всего один раз, и потом Webdriver каждый раз перед выполнением команды будет пытаться найти элемент. Если же в течение указанного времени элемент не появится, то получим исключение NoSuchElementException.
int driverTimeout = 15;
driver.manage().timeouts().implicitlyWait(driverTimeout, TimeUnit.SECONDS);
Включать и отключать неявное ожидание, а также менять время ожидания, можно в любой момент.
Комментариев нет:
Отправить комментарий