Selenium, как дождаться перезагрузки страницы?

Пытаюсь сделать тест для сайта, авторизация и сразу выход.

Проблема в том, что авторизация и выход начинается с клика по одному и тому же элементу, а потом появляется всплывающее меню.

Сначала я авторизуюсь, все нормально, но затем selenium пытается сразу же после авторизации кликнуть на тот-же элемент, чтобы появилось всплывающее меню с ссылкой на log out.

Ссылку он не находит, так как страница начинает перезагружаться и всплывающее меню для авторизованного пользователя просто не появилось, а появится только после перезагрузки.

Если поставить sleep(1) между login и log out, работает нормально.
  • Вопрос задан
  • 2771 просмотр
Пригласить эксперта
Ответы на вопрос 4
sim3x
@sim3x
Оставь слип - так проще
или
www.obeythetestinggoat.com/how-to-get-selenium-to-...
Ответ написан
Комментировать
@shamanovski
изучайте API класса WebDriverWait selenium-python.readthedocs.io/waits.html
Ответ написан
Комментировать
LazyTalent
@LazyTalent
Data Engineer, Freelancer
while True:
    try:
        btn = driver.find_element_бла_бла()
        btn.click()
        break
    except NoSuchElementException:
        continue
Ответ написан
Комментировать
@Talik0507
Работаю, Живу
А вы не пробовали смотреть в сторону реализации ожиданий?
После авторизации пишите ожидание появления нужного элемента (ссылки) и только после этого клик.
https://seleniumhq.github.io/selenium/docs/api/jav...

WebElement dynamicElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By.id("dynamicElement_id")));

Селениум сам отслеживает полную загрузку страницы, потому можно попробовать изменить ожидание загрузки страницы.
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы