#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
функция была удалена. обоснование объяснено здесь .