2013-08-25 2 views
4

В настоящее время я пишу функцию огурца для системы обмена сообщениями в приложении Rails. Это один из моих шагов.Capybara has_field не находит поле, найденное has_selector

Then(/^they should see the message displayed in their language$/) do 
    id = "message_to_#{@family.id}" 
    expect(page).to have_selector("textarea##{id}") 
    save_and_open_page 
    expect(page).to have_field(id, type: :textarea) 
end 

Первое утверждение проходит, но второе не удается. Когда я проверить разметку, созданную save_and_open_page, следующий элемент присутствует:

<textarea cols="22" disabled="disabled" id="message_to_13" name="body" placeholder="Hallo, Ich bin sehr interessiert an deinem Profil. Würdest du gerne mit mir in Kontakt treten?" rows="7"></textarea> 

Сообщение об ошибке отображается для второго теста:

expected to find field "message_to_13" but there were no matches. Also found "", which matched the selector but not all filters. (Capybara::ExpectationNotMet) 

Я разрываю мои волосы здесь, чтобы понять, почему Capybara может найти этот элемент, который явно присутствует с использованием has_selector, но не с has_field?

ответ

8

Проблема заключается в том, что текстовое поле имеет атрибут disabled="disabled", означает, что он является инвалидом поле. По умолчанию Capybara игнорирует отключенные поля. Новое в Capybara 2.1 - это опция look for disabled fields.

Добавление :disabled => true вариант позволит решить вашу проблему:

expect(page).to have_field(id, :type => 'textarea', :disabled => true) 

Примечание:

  • что, когда вы включаете :disabled => true, поле должно быть отключено. По умолчанию :disabled => false, который соответствует только полям, которые не отключены.
  • То, что: значение типа должно быть строкой. Как видно из вышесказанного, это :type => 'textarea'). Используя символ, :type => :textarea не будет работать.
+0

Спасибо, что указали это.Я вижу, что это поведение описано в примечаниях к выпуску Capybara 2.1, но упоминается ли оно где-либо в официальных документах? –

+0

Насколько я могу судить, исправление обновило код, но не обновляло ни одну документацию. –

0

Возможно, у вас есть другой элемент с идентификатором, именем или меткой, который соответствует «message_to_13»?

Поскольку это сообщение об ошибке указывает, что он нашел что-то с сообщением message_to_13, но это не текстовое поле. Вы также можете попробовать передать: textarea как строка не символ.

+0

Идентификатор textarea является единственной частью документа, где встречается строка message_to_13. Я пробовал передать: textarea в виде строки, а не на всех, и все равно получаю такое же сообщение об ошибке. –

0

Ваш тест ищет поле ввода типа textarea. Текстовые поля не являются полями ввода, они являются текстовыми полями. Попробуйте отказаться от type: :textarea.

Смотрите здесь: https://github.com/jnicklas/capybara/issues/978

+0

«Примечание:« textarea »и« select »- это допустимые имена типов, соответствующие именам связанных тегов». http://rubydoc.info/gems/capybara/2.1.0/frames –

+0

Какую версию capybara вы используете? Поддержка текстового поля как типа, похоже, появилась в версии 2.1.0. Ссылка, опубликованная выше, предназначена для версии 2.0.2. Извините, я до сих пор не понял, что изменилось. –

+0

Я использую версию 2.1.0 –

Смежные вопросы