Я работаю над автоматизацией сайта, который имеет несколько ссылок, которые загружают новые страницы через событие JS. В принципе, есть элементы, которые можно щелкнуть, щелкнув по одному, вызывает запуск JavaScript, и это приводит к отправке формы и маршрутизации на новую страницу.Как сделать Selenium WebDriver ждать загрузки страницы, когда новая страница загружается через событие JS
Теперь, если бы это были только стандартные HTML-ссылки, было бы без проблем, поскольку Selenium достаточно умен, чтобы сказать, что есть новая страница и ждать, чтобы что-то делать. Но так хорошо, что Selenium не может сказать, что клики в этом экземпляре приводят к загрузке новых страниц, поэтому они не ждут и просто продолжаются. Таким образом, он не дожидается новой страницы, пытается найти элементы, которых нет, и мои тесты не работают. Облом.
В качестве временного решения, я просто Приостановка программу в течение трех секунд, как так:
oldPageDriver.clickThatButton();
try {
Thread.sleep(3000);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
newPageDriver = new NewPageDriver(driver);
newPageDriver.doStuffOnNewPage();
И это работает, вроде. Мне это не нравится, потому что оно «взломанно» и просто прерывает программу, а не делает что-то умнее. Поскольку задержка жестко закодирована через три секунды, я получаю сбои, если ссылка работает, но просто медленная. Я рассматривал что-то вроде неявного ожидания, но это делает то же самое, и я не нашел надежного, работоспособного ответа на Java где-нибудь после значительного поиска.
Итак, может ли кто-нибудь предложить способ обойти это? В частности, как заставить Selenium знать, что ожидается новая страница, и ждать, пока она будет доступна?
Возможный дубликат [Selenium wait, пока документ не будет готов) (http://stackoverflow.com/questions/15122864/selenium-wait-until-document-is-ready) – Saifur