Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Ожидание всех элементов, появляющихся с какой-то периодичностью

webdriver
java
Теги: #<Tag:0x00007f7b704baf58> #<Tag:0x00007f7b704badf0>

(Artem Khoruziy) #1

Добрый день. Есть ситуация: результаты поиска выводятся с периодичностью 1 результат в 1 секунду. Каким образом дождаться всех результатов поиска?


(Sergey Korol) #2

Общее число результатов, я так понимаю, - неизвестно?


(Artem Khoruziy) #3

да, неизвестно


(Oleksii Ihnatiuk) #4
  • ищем элемент;
  • в течение 2 секунд ищем появился ли новый элемент:
    если да, то повторяем цикл;
    если нет делаем поиск всех элементов.

(Alexander) #5

Ну, приложение может тупить, и отрабатывать больше 2 секунд, тогда будет ошибка. В идеале, хорошо бы отыскать в DOM параметр, который говорит что идет процесс и дождаться его смены на значение, сигнализирующее о завершении. Может там колесо анимированное на UI крутится? Привязаться к нему.


(Taras) #6

Вам нужно использовать JavaRX наверное и заимплементить Future - си свои для ожидания тех или инних собитий


(Алексей Бобруцков) #7

можно поставить таймер чуть больше же


(Alexander) #8

Да, можно не мелочиться, если проблема времени выполнения не стоит, если это очень частный случай в паре тестов, серьезно не сказывающийся на общем перформансе. Но если применять такой подход слишком часто, то это верный путь к тому, чтобы проблема “у нас тесты ранятся в параллели трое суток” появилась.

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


(Oleksii Ihnatiuk) #9

Ожидание в две секунды я имел ввиду по типу Explicit Wait. То есть ждем столько то времени, в течении которых мы чекаем условие каждые 500 миллисекунд например.


(Alexander) #10

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

Тут важно учитывать возможности конкретного приложения. У меня на проекте обычный браузерный алерт с текстом может отрисоваться моментально, а может и за 20 секунд не отрисоваться :slight_smile: Могут влиять сложности предшествующей операции, параллельные потоки - всяческие причины отражающиеся на перформансе.


(Oleksii Ihnatiuk) #11

Две секунды это значение, которое автор может настроить по своему желанию. Опять же это сугубо ваше личное дело сколько секунд для отрисовки страницы вы считаете корректным :slight_smile:


(Vatslau) #12

можно настроить цикл с проверкой isDisplayed==true
это не вызовет эксцепшена