Капибара: невозможно найти css для collection_select и text_field_tag - PullRequest
0 голосов
/ 23 июня 2019

У меня есть collection_select и text_field_tag вот так:

<%= form_tag method_path(@test.id), method: :get  do %>
  <%= collection_select(:test, :id, Test.all, :id, :id, prompt: true, include_blank: 'Select Test') %>
  <%= text_field_tag(:input_test_questions, 'Test ids') %>
  <%= submit_tag "Add" %>
<% end %>

Это генерирует следующий HTML:

<select name="test[id]" id="test_id"><option value="">Select Test</option>
  <option value="1">1</option>
  <option value="2">2</option>
</select>
<input type="text" name="input_test_questions" id="input_test_questions" value="Test ids">
<input type="submit" name="commit" value="Add">

Я пытаюсь написать интеграционный тест, используя Capybara для вышеуказанного. Для выбора и ввода я написал так:

select "2", from: "#test_id"
fill_in "input_test_questions", with: "1"

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

Capybara::ElementNotFound: Unable to find css "#test_id"
Capybara::ElementNotFound: Unable to find field "input_test_questions" that is not disabled

Как я могу исправить ошибку, чтобы Capybara находил, выбирал и заполнял указанными выше параметрами?

1 Ответ

1 голос
/ 23 июня 2019

Параметр from для select используется для поиска элемента

select "2", from: "test_id" # find by id
select "2", from: "test[id]" # find by name

fill_in "input_test_questions", with: "1" должно работать так, как написано для показанного HTML, если только у вас нет поведения JS / CSS, которое скрывает ввод текста на странице. Если вы скрываете это, то Capybara не может заполнить его, потому что пользователь не сможет.

Примечание. В действительности сообщение об ошибке, которое вы выводите Capybara::ElementNotFound: Unable to find css "#test_id", не может быть получено из кода, который вы показываете, если только вы не используете ДЕЙСТВИТЕЛЬНО старую версию Capybara. Надеюсь, это была просто неправильная копия / вставка из других ваших попыток.

...