如何使用水豚 HTML 文件中两种形式之一的 fill_in 字段?

How to fill_in field in one of two forms in a HTML file using capybara?

我在一个 html 文件中有两种形式(注册和登录),我正在使用 Capybara 的 fill_in 语法对其进行测试。但是,两者都有一个用户名字段,都有一个密码字段,我得到 Ambiguous match, found 2 elements matching field :username 。我如何才能在我的规范帮助程序方法中确保我填写正确表格的字段。我想我需要 id= 每种形式,但我找不到任何有水豚语法的地方。

我的html

<form id="signUpForm"action='/user' method="post">
  <!-- more fields -->
  <input class="entryField" type="text" name="username" required>
  <input class="entryField" type="password" name="password" required>
  <!-- more fields -->
  <input type="submit" value="Sign up">
</form>

<form id="signInForm" action="/session" method="post">
  <input class="entryField" type="text" name="username" placeholder="Username">
  <input class="entryField" type="password" name="password" placeholder="Password">
  <input type="submit" value="Sign in">
</form>

还有我的辅助方法

def sign_in user
  visit '/'
  fill_in :username, with: user.username
  fill_in :password, with: user.password
  click_button 'Sign in'
end

您需要将 'fill_in' 指令的范围限定为特定形式。您可以使用 Capybara 的 #within 语法来执行此操作,如下所示:http://www.rubydoc.info/github/jnicklas/capybara/Capybara%2FSession%3Awithin

所以您的#sign_in 助手可能是:

def sign_in user
  visit '/'
  within('form#signInForm') do 
    fill_in :username, with: user.username
    fill_in :password, with: user.password
    click_button 'Sign in'
  end
end