Я новичок в Selenium WebDriver и пытаюсь понять правильный способ "подождать" для присутствия элементов.
Я тестирую страницу с кучей вопросов с ответами на радиокнопках. Когда вы выбираете ответы, Javascript может включать/отключать некоторые из вопросов на странице.
Проблема заключается в том, что Selenium "слишком быстро нажимает" и не ждет завершения Javascript. Я попытался решить эту проблему двумя способами - явное ожидание решило проблему. В частности, это работает и решает мою проблему:
private static WebElement findElement(final WebDriver driver, final By locator, final int timeoutSeconds) {
FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(timeoutSeconds, TimeUnit.SECONDS)
.pollingEvery(500, TimeUnit.MILLISECONDS)
.ignoring(NoSuchElementException.class);
return wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver webDriver) {
return driver.findElement(locator);
}
});
}
Однако я предпочел бы вместо этого использовать неявное ожидание. У меня есть мой веб-драйвер, настроенный следующим образом:
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
Это не решает проблему, и я получаю исключение NoSuchElementException. Кроме того, я не замечаю паузу в 10 секунд - это просто ошибки сразу. Я проверил эту строку в коде, который попадает в отладчик. Что я делаю не так? Почему implicitlyWait не дожидаться появления элемента, но FluentWait делает?
Примечание. Как я уже говорил, у меня уже есть работа, я просто хочу знать, почему Implicit wait не решает мою проблему. Спасибо.