В приложении Rails я пытаюсь протестировать Bootstrap modal с поле jQuery TokenInput в Rspec с использованием Capybara с драйвером capybara-webkit
. Эта часть выглядит следующим образом:
click_link 'Create Team Modal'
sleep 1
within('div#modal_popup') do
fill_in 'input#token-input-team_name', with: 'Fancy team name'
sleep 1
fill_in 'input#token-input-team_name', with: '\t'
sleep 1
click_button 'Create Team'
end
page.should have_content('Fancy team name')
- Нажмите кнопку, чтобы получить модальный
- Заполните команду TokenInput с именем команды
- Имитировать нажатие клавиши Tab, чтобы выбрать ее.
- Создайте команду
- Проверьте, что имя отображается на странице
Это будет работать только со всеми этими sleep 1
; в противном случае Capybara падает с ошибкой have_content
, что в конечном итоге приводит к ошибке сервера, потому что имя команды никогда не было правильно выбрано. Однако другие модальности Bootstrap без поля TokenInput не требуют sleep 1
до их загрузки.
Со всем, что сказал, есть ли способ избавиться от сна, и как это происходит в обычном режиме? Capybara 2 достал wait_until
(без уважительной причины), так как он будет ждать в течение времени ожидания по умолчанию, чтобы проверить что-то... но это, похоже, не отразилось на моем предыдущем тесте; как будто Капибара не участвует в этом периоде ожидания при входе/выходе из этого модального. У кого-нибудь есть опыт? Использование Rails 3.2.10, Rspec 2.12, Capybara 2, capybara-webkit 0.14.0, TokenInput 1.6.