Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Selenide. Есть ли возможность добавить wait пока не отработаются все AJAX запросы?

ajax
java
selenide
Теги: #<Tag:0x00007fedbb244b58> #<Tag:0x00007fedbb2449c8> #<Tag:0x00007fedbb244838>

(Oleg Liulia) #1

Есть ли возможность добавить wait пока не отработаются все AJAX запросы?


(Oleksandr Khotemskyi) #2

Expected Condition функция в selenium - это функция-предикат. Можно легко написать свое любое условие для ожидания.


(asolntsev) #3

Если на странице используется JQuery, можно это сделать простеньким JavaScript-кусочком.
Но в случае Selenide это попросту ненужно. Вам достаточно написать проверку на то изменение UI, которое должно случиться в результате этих ajax-запросов.

Скажем, если ajax-запрос должен подгрузить дополнительные данные и нарисовать в углу прогноз погоды, это и нужно проверить:

$("#pogoda").shouldHave(text("солнечно"));

Эта проверка сама дождётся, пока завершится ajax-запрос и текст нарисуется.


(Sergei Chipiga) #4

Поддерживаю @xotabu4, что лучше добавить в функцию ожидания появление какого-либо или нескольких ключевых элементов на странице.

Н-р на одном проекте была проблема, что ajax’ом подгружались данные с партнерских доменов, которые прямого влияния на продукт не оказывали, и случалось, что они отвечали ооооочень долго, так что загрузка страницы не укладывалась в разумные рамки.


(Oleg Liulia) #5

У меня появляется попап, в котором нажатие на кнопку не приводит к действию пока не отработается AJAX запрос, соотвественно тест валится, есть ли возможность это как-то проверить?
Заранее спасибо :slight_smile:


(Sergei Chipiga) #6

@Free4evo, обработка ajax-ответа наверное меняет какое-либо свойство кнопки, раз она становится активной. Попробуйте добавить ожидания этого свойства.

И это будет универсальнее, чем ждать ajax, т.к. для вас руткозом является статус активности кнопки, а ajax - лишь способ привести ее в активное состояние, и может быть н-р заменен на другой способ в процессе разработки.

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


(Oleg Liulia) #7

Спасибо за ответ, буду пробовать :slight_smile:


(Иван Пашко) #8

Если уж сильно хочется ожидать окончания всех Ajax - то то поможет такой простой скрипт (js): $.active == 0 (нет запросов в статусе pending)