Capybara fill_in多个输入字段

时间:2016-04-26 18:29:18

标签: ruby-on-rails input rspec capybara

下面是我的表单,您可以看到将有许多行的输入字段都具有相同的类:

<%= q.simple_fields_for :choices do |c|%>
  <div class="row-fluid choice-row">
    <%= c.text_field :sort_order, class: 'span1' %>
    <%= c.text_field :title, class: 'span9' %>
    <%= c.link_to_remove 'Remove', class: 'btn btn-danger span2 pull-right' %>
  </div>
<% end %>

对于我的测试我尝试:

fill_in(:sort_order, with: '3')
fill_in(:title, with: 'Choice 3')

我也尝试过:

fill_in('Sort Order', with: '3')
fill_in('Title', with: 'Choice 3')

fill_in('Sort Order', :with => '3')
fill_in('Title', :with => 'Choice 3')

我得到的错误是:

Failure/Error: fill_in(:title, with: 'Choice 3')
 Capybara::ElementNotFound:
   cannot fill in, no text field, text area or password field with id,         name, or label 'title' found

有人可以推荐我如何填写特定输入,比如第三行吗?

1 个答案:

答案 0 :(得分:0)

你会在你的标记中找到一个表单助手输出的字段在传递给fields_for的对象中被命名空间,这确实是使用fields_for整点

在这种情况下,您的表单元素的名称将为choices[title]choices[sort_order]

要在按名称选择时找到并fill_in正确的字段会产生许多字段,您需要获得更多创意,因为这不是一个非常典型的设置:

  • 您可以使用within选择唯一的父元素
  • 您可以使用CSS选择器查找nth元素
  • 您可以找到所有元素并在返回的数组上使用[2]来访问第3个元素