Как получить поле, значение которого отличается от отображаемого имени - PullRequest
0 голосов
/ 19 ноября 2018

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

  <%= form_tag accounts_path, :method => :post do %>
    <div class="field">
      <%= label_tag :email %><br />
      <%= text_field_tag :homeEmail %>
    </div>
    <div class="Section-button">
      <div class="actions">
        <%= submit_tag "Update", class: 'btn btn-primary' %>
      </div>
    </div>
  <% end %>

У меня есть тег поля для электронной почты: homeEmail, потому что я хочу восстановить его в контроллере, используя params [: homeEmail].

Я хочу использовать тест характеристик капибары, такой как

  fill_in 'Email', with: user.email, match: :first
  click_button Update

но я получаю ошибку:

Unable to find visible field "Email" that is not disabled within #<Capybara::Node::Element

Элемент не отключен, и когда я пробую страницу в режиме разработки, он работает. Тест заполняет поле, если я просто изменю text_field_tag ​​на

<%= text_field_tag :email %>

но это не работает в контроллере, потому что params это params [: email], а не params [: homeEmail].

Как мне заставить этот тест работать?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

fill_in находит элемент для заполнения по name, id или связанному тексту метки. Когда вы делаете fill_in 'Email', ..., я предполагаю, что вы намереваетесь использовать опцию связанного текста метки. Проблема, с которой вы столкнулись, заключается в том, что метка на самом деле не связана с полем (если вы посмотрите на источник HTML, вы увидите, что атрибут метки for не соответствует атрибуту input id). Исправление состоит в том, чтобы изменить вид, чтобы правильно связать метку с полем

<%= form_tag accounts_path, :method => :post do %>
  <div class="field">
    <%= label_tag :homeEmail, 'Email' %><br />
    <%= text_field_tag :homeEmail %>
  </div>
  ...

Тогда ваш fill_in 'Email', with: user.email должен работать правильно

0 голосов
/ 19 ноября 2018

Вместо того, чтобы делать:

  fill_in 'Email', with: user.email, match: :first

Вы должны сделать:

  fill_in 'homeEmail', with: user.email, match: :first

Поскольку капибара пытается найти элемент с атрибутами id или name, если вы делаете <%= text_field_tag :homeEmail %>, этобудет генерировать <input type="text" name="homeEmail" id="homeEmail">, но при заполнении вы используете Email в качестве селектора, для которого капибара не может найти какой-либо элемент.

Дайте мне знать, если это поможет!

...