Как заполнить поля динамической формы с помощью капибары

У меня есть форма, которая содержит поле выбора и текстовое поле.

Текстовое поле отображается динамически в зависимости от выбора. Если значение selectbox равно "Да", то текстовое поле будет отображаться, и наоборот. Я запускаю тест rspec и заполнил значение в поле выбора "Да"

select 'Yes', from: 'property[have_water_bills]'

Теперь я хочу заполнить значение в текстовом поле

fill_in 'property[irrigation_cycle_count]', with: 5

Но я получаю следующую ошибку.

Capybara::ElementNotFound:
   Unable to find field "property[irrigation_cycle_count]"

То есть капибара не может найти динамический элемент. Кто-нибудь знает, как это исправить?

2 ответа

Решение

Наконец-то добился того, чтобы это работало, используя следующий фрагмент кода

page.execute_script("$('#have_water_bills').val('true').trigger('click')")

Полтергейст не имеет click событие при выборе элемента из выбора. Генерирует focus по выбору, change на выбор, blur по выбору. Это больше похоже на то, если пользователь выбрал опцию с помощью клавиатуры, а не с помощью мыши. Вы, вероятно, должны делать логику для отображения вашего текстового поля на change событие в любом случае, так что оно работает, если люди используют мышь или клавиатуру для навигации по вашей странице. Также имеет смысл запускать логику "показать / скрыть" на change событие, потому что это то, что вы на самом деле заботитесь, а не клики.

Другие вопросы по тегам