2015-12-01 3 views
0

Gem: Рельсы 4.1.14.rc2, Капибара 2.5.0, капибары-WebKit 1.7.1Взаимодействуя с bootbox модальностей с версиями Капибара-Webkit

Наше приложение использует bootbox модальности выразить мягкие валидаций для определенных входов. Я пытаюсь использовать accept_confirm с блочным методом захвата модальный перед тем Webkit автоматически принимает это как так:

modal = accept_confirm do 
    fill_in " Date of birth", with: "12/31/2015" 
    click_on "Update Spouse" 
end 

expect(modal).to # have some sort of message 

Я получаю эту ошибку в ответ:

Failure/Error: modal = accept_confirm do 
Capybara::ModalNotFound: 
    Timed out waiting for modal dialog 

ли кто-нибудь есть опыт работы с Webkit с модами bootbox?

***** UPDATE раствором *****

Это состояние гонки. Webkit перемещается быстрее, чем bootbox, и по какой-то причине он не использовал время ожидания capybara. Добавление sleep 0.5 после события, запускающего модальный режим загрузки, позволяет запустить тест правильно. Смотрите пример ниже:

fill_in " Date of birth", with: "12/31/2015" 
click_on "Add benefit" 
sleep 0.5 

expect(page).to have_content "some warning message..." 
click_on "Make Correction" 

sleep 0.5 
fill_in " Date of birth", with: "12/31/1905" 
click_on "Add benefit" 

sleep 0.5 
expect(page).to have_content "some warning message..." 
click_on "Make Correction" 

ответ

1

модальное API Капибара для взаимодействия с системой модальностей - генерируется путем вызова window.alert/подтверждение/приглашение в JS - bootbox модальности не являются системными модальности, они просто стандартный html элементов. Вы взаимодействуете с ними, как и любой другой элемент на странице.

+0

Хорошо, это было очень полезно, спасибо! Как выясняется, причина, по которой я использую Webkit (его скорость), была причиной этой проблемы. Модификация мода загружалась слишком медленно, поэтому я должен был сказать, что webkit замедляется с помощью нескольких «sleep 0.5» –

+0

@JakeKaad, обычно проще просто отключить анимацию в тестовом режиме (удалить класс fade или через JavaScript), поскольку он вызывает очень много хлопот для некоторых водителей –