Capybara不会填写带有重复标签的字段

时间:2012-05-18 19:32:18

标签: ruby-on-rails-3 capybara form-for

我有一个表单页面,其中包含电子邮件地址和密码的确认字段,两者都带有“确认”标签。按预期运行RSpec时失败。如果我将标签设为唯一,例如将电子邮件标签更改为“电子邮件确认”,则会通过。我宁愿保持标签相同。如果我使用form_for生成的电子邮件ID,Capybara似乎很高兴,但测试失败了。我也尝试过同样的结果。

RSpec / Capybara提取物:

fill_in "company_contact_email_confirmation", with: "example@example.com"

form_for extract:

<div class="field">
  <%= f.label :contact_email_confirmation, "Confirmation" %><br />
  <%= f.email_field :contact_email_confirmation %>
</div>

生成来源:

<div class="field">
  <label for="company_contact_email_confirmation">Confirmation</label><br>
  <input id="company_contact_email_confirmation" name="company[contact_email_confirmation]" size="30" type="email">
</div>

错误讯息:

1)注册有效信息的公司页面应该创建公司

 Failure/Error: expect { click_button submit }.to change(Company, :count).by (1)
   count should have been changed by 1, but was changed by 0

如果我按照其他地方的建议使用Capybara within,它仍然不起作用:

RSpec / Capybara提取物:

within ".email_stuff" do
  fill_in "Confirmation", with: "example@example.com"
end

form_for extract:

<div class="email_stuff">
  <div class="field">
    <%= f.label :contact_email_confirmation, "Confirmation" %><br />
    <%= f.email_field :contact_email_confirmation %>
  </div>
</div>

生成来源:

<div class="email_stuff">
  <div class="field">
    <label for="company_contact_email_confirmation">Confirmation</label><br />
    <input id="company_contact_email_confirmation" name="company[contact_email_confirmation]" size="30" type="email" />
  </div>
  </div>

Capybara似乎没有抱怨,但测试失败并出现同样的错误。如何让Capybara允许我在同一表格上使用相同的标签两次?

1 个答案:

答案 0 :(得分:0)

我在ActiveRecord after_validation回调中添加了一些调试语句,以查看虚拟确认字段的状态。如上面的代码所示,我通过名称或ID引用了电子邮件确认字段,但未使用ID识别密码确认和电子邮件确认字段。 Capybara将密码数据放在错误的确认字段中,因为电子邮件确认字段首先在表单上。如果我将ID放在密码字段上,那就可以了。两者的ID都是最安全的。