2016-04-26 110 views
0

下面是我的形式,你可以看到,會有輸入領域的許多行都具有相同的類:水豚FILL_IN多個輸入字段

<%= 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 

是否有人可以推薦我怎麼能填充特定的輸入,好比說第三排?

+0

使用字段的ID而不是'Title'。 – psantos

+0

我還沒有分配一個ID。即使我這樣做,也不會每個輸入都有相同的ID。我如何區分第三行輸入和第五行? –

+0

每個字段的ID是唯一的。你可以檢查你的字段,看看哪些ID號分配給它 – psantos

回答

0

你會發現在你的標記,通過形式輔助域輸出傳遞到fields_for對象中的命名空間,使用fields_for這的確是整點

在這種情況下,您的表單元素將具有名稱,如choices[title]choices[sort_order]

要找到並fill_in按名稱選擇時,正確的領域產生了很多領域,你需要獲得更多的創意,因爲這不是一個很典型的設置:

  • 您可以使用within選擇一個獨特的父元素
  • 您可以使用CSS選擇器找到nth元素
  • 你可以找到的所有元素,並使用[2]返回數組訪問第3元素