我在医院表格中有一个针对部门的嵌套模型。代码段如下所示:
<%= f.simple_fields_for :hospital do |h| %>
.
.
.
<%= h.simple_fields_for :departments do |builder| %>
<%= render "department_fields", :f => builder %>
<% end %>
.
.
<% end %>
_department_fields部分看起来像这样:
<div class="fields">
<%= f.input :name %>
<%= link_to_remove_fields "remove", f %>
</span>
</div>
因此,表单底部有一个位置供用户输入最多三个部门名称。
我正在使用Rails 3,Cucumber,Capybara和Selenium进行集成测试。
在Cucumber中测试此表单时,是否有一种简单的方法可以填写重复字段?
理想情况下,我希望能够像这样编写我的功能:
And I fill in the first "Name" with "Cardiology"
And I fill in the second "Name" with "Radiology"
有没有办法在Cucumber / Capybara轻松估算这个?有人已经找到了解决这个问题的一些步骤吗?
答案 0 :(得分:7)
Capybara有办法通过使用内部来解决这个问题。例如:
And I fill in "Name" with "Radiology" within "fields"
例如,如果你在两个表单区域周围都有'hospital_fields'和'department_fields'的id,你可以这样做,以区分你正在填写的字段:
And I fill in "Name" with "Cardiology" within "hospital_fields"
And I fill in "Name" with "Radiology" within "department_fields"
您还可以使用文本字段ID而不是字段标签名称来更具体。例如,如果第一个文本字段的id为“hospital_name”,而第二个文本字段的id为“hospital_department_name”,则可以执行以下操作:
And I fill in "hospital_name" with "Cardiology"
And I fill in "hospital_deparment_name" with "Radiology"
更新:您还可以添加自定义黄瓜步骤以使用编号输入:
When /^(?:|I )fill in the (\d+)(?:st|nd|rd|th) "([^"]*)" with "([^"]*)"$/ do |num, name, value|
find(:xpath, ".//form/input[@name='#{name}'][#{num}]").set(value)
end
And I fill in the 1st "name" with "Cardiology"
And I fill in the 2nd "name" with "Radiology"
更新:要与标签匹配,请使用以下表达式:
find(:xpath, ".//input[@id=//label[contains(.,'#{name}')]/@for][#{num}]").set(value)
答案 1 :(得分:1)
Pan似乎会帮助您找到问题的答案。
但是我想在这里加两分钱。正如许多人推荐的那样,包括Dan North [1],Ben Mabey [2],Jonas Nicklas [3]甚至AslaskHellesøy建议你删除web_steps.rb [4],你应该尽量不写黄瓜场景步骤显示实施细节。
When I fill in "Name" with "Cardiology"
这是关于根据标签或ID或其他方式填写HTML表单输入......这是实现。
我猜你可以采取以下措施:
When I create a department called "Cardiology"
And I create a department called "Radiology"
Dan North甚至建议只有一个“事件”[5](“当”步骤):
When I create departments called "Cardiology" and "Radiology"
然后将所有表单/ html处理封装在单个步骤定义中。当然,在那里你可以应用上面提到的XPath表达式。