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>
4

3 回答 3

3

使用 Capybara 2.1,这有效:

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

更喜欢上述评论的链接: :prefer_exact 是 Capybara 1.x 中存在的行为。如果找到多个匹配项,其中一些是完全匹配的,而另一些不是,则返回第一个完全匹配的元素。

于 2013-06-04T23:26:46.573 回答
2

有多种方法可以做到这一点。这里是其中的一些:

在 Capybara 2.0 中,您可以这样做:

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

Capybara 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')
于 2013-03-22T20:13:59.070 回答
2

你也可以做一个内块......

within('.class div:nth-child(div you want) do 
  fill_in("css", :with => "text")
end
于 2013-06-05T21:31:39.923 回答