Capybara / Cucumber对类似标签的模糊匹配

时间:2013-01-13 19:58:34

标签: cucumber capybara

我的页面中有此代码

  <div>
    <label for="user_password">Heslo</label>
    <br />
    <input id="user_password" name="user[password]" size="30" type="password">
  </div>

  <div>
    <label for="user_password_confirmation">Heslo pro kontrolu</label>
    <br>
    <input id="user_password_confirmation" name="user[password_confirmation]" size="30" type="password">
  </div>

我想在Cucumber中使用这些步骤:

And I fill in "Heslo" with "NeznameHeslo328"
And I fill in "Heslo pro konrolu" with "NeznameHeslo328"

步骤定义很简单:

When /^I fill in "([^"]*)" with "([^"]*)"$/ do |name, text|
  fill_in(name, :with => text)
end  

BUT Capybara提出模糊匹配,发现2个元素匹配字段“Heslo”(Capybara :: Ambiguous)  第一步。

当我将标签中的名称更改为for="user_password_confirmation"至“ Hesla pro kontrolu ”时(相应的第二步),一切正常。

有没有办法强制Capybara匹配标签中的确切短语?在场景中不使用css选择器。

2 个答案:

答案 0 :(得分:2)

<强>更新

在Capybara 2.1 you can use :exact option

fill_in(name, with: 'Heslo', exact: true)

此选项默认设置为false


在以前版本的Capybara中,不可能进行精确的字符串匹配。所有匹配都使用子串完成。您只能使用其他选择器类型。

答案 1 :(得分:0)

这是我开始使用的。到目前为止,它对我有用:

Given /^I fill in "([^\"]*)" with "([^\"]*)"$/ do |field_name, text|
  page.find(field_name).set "#{text}"
end