Как я могу облегчить проблемы времени / AJAX, используя Capybara / Capybara Webkit / RSpec click_button и page.select? - PullRequest
3 голосов
/ 25 августа 2011

Ради простоты я пропустил большую часть своего теста и включил только код, вызывающий проблемы. Это:

click_button('Search')  
page.select 'Preferred', :from => 'ticket_service_type'  

Когда я запускаю это, я получаю следующее:

Failure/Error: page.select 'Preferred', :from => 'ticket_service_type'
Capybara::ElementNotFound:
  cannot select option, no select box with id, name, or label 'ticket_service_type' found`

AJAX-запрос триггеров событий нажатия кнопки не имеет никакого отношения к тегу select, поэтому при изменении порядка в тесте тест проходит успешно. Я знаю, что время ожидания Capybara по умолчанию составляет 2 секунды, поэтому я изменил его на 10 с помощью:

Capybara.default_wait_time = 10

Это не приводит к прохождению теста. Как я могу заставить эти два метода хорошо играть друг с другом и работать в том порядке, в котором пользователь будет управлять веб-страницей?

(Если бы я опубликовал код из своей спецификации, держу пари, это было бы решено быстро.)

Ответы [ 2 ]

1 голос
/ 31 декабря 2013

Обязательно добавьте :js => true к интеграционным тестам, которые зависят от JavaScript.

1 голос
/ 10 января 2012

С Книга огурцов (выделено мной):

К счастью, Капибара знает, как легко справиться с этой ситуацией. Если мы добавим явный вызов для поиска, передав селектор CSS для элемента DOM на странице, которая еще не существует, Capybara немного подождет (50 мс) и попытается снова, пока элемент не появится. Еслион не появляется через некоторое время (две секунды по умолчанию, хотя это настраивается), он вызовет исключение, что приведет к сбою определения шага.

Так пусть ваш AJAX записывает что-то вЗатем DOM найдите () в своем определении шага.Это не идеально.В моем случае я ввожу (скрытый) элемент DOM, чтобы облегчить тестирование, но я не нашел другого пути.

...