2013-03-22 83 views
3

我想填寫標記爲id =「admin_passsword」的兩個文本框。我可以輕鬆訪問第一個,但由於除了佔位符和上面的標籤之外沒有任何區別,我不知道如何訪問第二個文本框來填寫該字段。試圖填充水豚的第二個文本框

<div class="fields"> 
    <div class="field-row"> 
     <label for="admin_email">Email</label> 
     <input autocapitalize="off" id="admin_email" name="admin[email]" placeholder="Email" size="30" type="text" value=""> 
    </div> 
    <div class="field-row"> 
     <label for="admin_serial_number">Serial number</label> 
     <input id="admin_serial_number" name="admin[serial_number]" placeholder="Serial Number" size="30" type="text"> 
    </div> 
    <div class="field-row"> 
     <label for="admin_password">Password</label> 
     <input id="admin_password" name="admin[password]" placeholder="Password" size="30" type="password"> 
    </div> 
    <div class="field-row"> 
     <label for="admin_password_confirmation">Password confirmation</label> 
     <input id="admin_password" name="admin[password]" placeholder="Confirm Password" size="30" type="password"> 
    </div> 
    </div> 
+0

你試試我的答案?你能提供反饋嗎? – 2013-03-25 22:57:01

回答

2

有多種方式可以做到這一點。這裏有一些:

在水豚2.0中,你可以做例如這樣的:

all('label[for=admin_password_confirmation]').each {|field| field.set('123456')} 

水豚2.1支持新:exact選項:

fill_in('Password', with: '123456', exact: true) 
fill_in('Password Confirmation', with: '123456', exact: true) 

但我建議你設置:

# e.g. in features/support/env.rb 
Capybara.configure do |config| 
    config.exact = true # exact will be true by default in option hashes. It's false by default 
end 

# in your tests 
fill_in('Password', with: '123456') 
fill_in('Password Confirmation', with: '123456') 
3

隨着水豚2.1,這個工程:

fill_in("Password", with: '123456', :match => :prefer_exact) 
    fill_in("Password confirmation", with: '123456', :match => :prefer_exact) 

首選上述評論鏈接::prefer_exact是Capybara 1.x中的行爲。如果找到多個匹配,其中一些是確切的,其中一些不匹配,則返回第一個eaxctly匹配元素。

1

你也可以做一個塊中......

within('.class div:nth-child(div you want) do 
    fill_in("css", :with => "text") 
end