2013-03-22 2 views
3

Я пытаюсь заполнить оба текстовых поля, которые обозначены id = "admin_passsword". Я могу получить доступ к первому легко, но поскольку нет никаких отличий, кроме заполнителя и надписи над ним, я не знаю, как получить доступ ко второму текстовому полю, чтобы заполнить это поле.Попытка заполнить второе текстовое поле в capybara

<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

Пробовали ли вы мой ответ? Можете ли вы дать отзыв? –

ответ

2

Существует несколько способов сделать это. Вот некоторые из них:

В Capybara 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 
Смежные вопросы