Похоже, что Capybara не может найти первый элемент формы на странице по отображаемому тексту внутри метки этого элемента формы.
Однако Capybara может найти этот первый элемент формы по значению for
этой метки, что кажется странным. Я думаю, что DOM просто еще не загружен, и Capybara может постоянно искать значения for
, но не отображаемый текст в labels
?
Вот как выглядят мои соответствующие элементы формы:
поэтому я должен иметь возможность захватить каждый из этих элементов отображаемым текстом метки, сказав:
fill_in "First Name", with: "foo"
fill_in "Last Name", with: "bar"
fill_in "Title", with: "some title"
Вот моя спецификация:
scenario "with minimum fields while passing validations", js: true do
visit "/"
click_link "New Contact"
fill_in "First Name", with: "foo"
fill_in "Last Name", with: "bar"
fill_in "Title", with: "some title"
click_button "Create Contact"
expect(page).to have_content "Success."
expect(page).to have_content "foo bar"
end
Он не находит элемент формы First Name
, поэтому не заполняет его. Он отлично находит элемент Last Name и элемент Title, потому что я предполагаю, что к этому времени DOM полностью загружен:
Это html:
Однако, как ни странно: когда я меняю заполнение Имя с:
fill_in "First Name, with: "foo"
To:
fill_in "contact_first_name, with: "foo"
Теперь это работает, но я не хочу использовать значение for
для contact_first_name
для захвата этого элемента формы. Я хочу использовать отображаемый текст метки, как это возможно с Title
и Last Name
.
Что мне не хватает? Почему я не могу использовать «Имя» для захвата элемента формы «Имя»?
Обновление: оказывается, если я поставлю sleep 1
прямо перед `fill_in "Имя" с помощью: "foo", то это сработает! Согласно комментариям ниже от @TomWalpole, кажется, что есть библиотека javascript, которая мешает? Ниже приведены все javascripts, которые я включаю:
//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require turbolinks
//= require bootstrap-sprockets
//= require twitter/typeahead.min
//= require nested_form_fields
sleep 10
перед первым fill_in - - если это так, то нам нужно выяснить, какое изменение любая библиотека вносит на страницу, которую можно обнаружить, и дождаться этого, прежде чем заполнять - person Thomas Walpole   schedule 21.03.2016sleep 5
прямо перед выполнениемfill_in "First Name", with: "foo", and it worked! could you explain once more why putting
sleep 5` перед заполнением первого элемента формы, заставил капибару правильно заполнить первый элемент формы? - person Neil   schedule 21.03.2016