Selenide. Как дождаться прогрузки страницы?

Думаю, что уже неоднократно поднимался этот вопрос, но я пока не нашла ответа.
Ситуация следующая:
Есть форма, которую клиент заполняет и сабмитит. Далее происходит переход на одну из страниц:
-Страница ввода дополнительных данных
-Самописанная заглушка
-Тестовая среда платежной системы

Страница ввода доп данных может быть, а может ее и не быть. Из тестов мы однозначно не можем это узнать. Раньше я ожидала по урл(и исходя из урл знала что открылось), но сейчас возникла ситуация при которой мы свою страничку открываем во фрейме и урл не меняется.

Единственный вариант у меня сейчас:

  1. Дождаться, что страница прогрузилась, прошли все редиректы
  2. “Посмотреть” открыта ли форма ввода дополнительных данных

Привет!
В Selenide 5.23.0 появились методы для проверки (с встроенными ожиданиями) URL текущей страницы или текущего фрейма:

webdriver().shouldHave(currentFrameUrl(baseUrl + "/login.html"));

Но вы, конечно, идёте неверным путём.
По-хорошему у вас должно быть два разных теста:

  1. Тест с “коротким” флоу без доп.данных - логинится таким клиентом, которому не нужны доп.данные
  2. Тест с “длинным” флоу с доп. данными - логинится таким клиентом, которому нужны доп.данные
    и т.п.

Эта промежуточная страница-2fa. Нам просто нужно пройти ее при необходимости. Регулируется это конфигами, поэтому я даже и не знаю исходных “нужных” данных. Да и в тесте это просто кусочек интеграционки, поэтому работаем с тем, что есть

У меня было ожидание, что URL содержит один из трех входных слов. По ним я могла определить куда мы перешли

Очень просто - загружаете страницу в Slow 3G и наблюдаете за подгрузкой элементов.
Находите самый медленный, на него и цепляетесь.
Плюс можете еще парочку выбрать.
Ну и на самые главные элементы выставите waitUntil visible and enabled.

Самая большая проблема в том, что я не знаю заранее будет ли промежуточная страница или нет.

Завязалась на ожидание того, что урл текущего айфрейма содержит одно из трех ключевых слов и уже исходя из того куда перешли, переходим к следующим ожиданиям

Если вы не знаете будет ли страница или нет и вам вообще это безращлично, лишь бы пройти ее если вдруг есть, внедрите цикл в котором вы будете проверять очень быстро появилась ли страница А на которой нужно делать действия или Б нужная вам страница

do {
 if (page_B.isLoaded(1_second){
  break; // нужная страница найдена - прерываем цикл
}
 if (page_a.isLoaded(1_second)){
     page_a.doStuffOnPage_A() // появилась доп. страница - проходим ее
     break; // прерываем цикл
   }
} while(//some condition) // например в течении 5 секунд проверяем

Что то типа такого только покрасивее

1 лайк