Почему кажется, что таймер Capybara «ждать загрузки страницы» работает для сопоставителей, но не для искателей?

#ruby #capybara

#ruby #capybara

Вопрос:

В настоящее время я запускаю тест, который проверяет наличие определенного элемента, а затем выполняет с ним некоторые действия. Для завершения работы javascript требуется немного времени, но в пределах таймера, для которого у меня установлена Capybara.

По какой-то причине

 assert session.has_xpath?(xpath_route)
  

работает нормально, но

 assert link=session.first(:xpath, xpath_route)
  

сбой, сообщающий, что не удалось найти элемент. И быстро — задолго до того, как закончится таймер ожидания.

Я могу только предположить, что это означает, что таймер применяется только к сопоставителям, а не к искателям, и это нормально, но как я могу заставить его продолжать поиск, пока он не найдет элемент, который я ищу?

Ответ №1:

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

 page.wait_until() do
  session.first(:xpath, xpath_route)
end
  

Комментарии:

1. В Capybara v2.x page.wait_until функция была удалена. обоснование объяснено здесь .