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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

можна привязатись до статусу документу сторінки, зазвичай якшо немає більше веб процесів то
document.readyState “complete”