我有方法用水豚为我填写表格。
从FactoryGirl
获取一些默认参数后,我循环播放:
form_attributes.each do |field, value|
if value == false
value == true ? check("#{model}_#{field}") : uncheck("#{model}_#{field}")
elsif try(:select,value, from: "#{model}_#{field}")
select value, from: "#{model}_#{field}"
elsif try(:fill_in, "#{model}_#{field}", with: value)
fill_in "#{model}_#{field}", with: value
else
raise Capybara::ElementNotFound
end
end
不幸的是try(:select,value, from: "#{model}_#{field}")
会引发错误Capybara::ElementNotFound: Unable to find select box
...
如何在元素为checkbot时将capybara告诉check
并在元素为<select>
时选择?
以下是form_attributes
的一些示例:
{:attitude=>"happy",
:feedback_date=>2014-08-19 15:35:14 +0200,
:feedback_action=>"Refund",
:feedback_details=>"....",
:approved=>"true"}
答案 0 :(得分:1)
假设#{model}_#{field}
始终是相同的属性(即id,name或label),您可以:
以下代码假定#{model}_#{field}
是元素的id:
form_attributes.each do |field, value|
e = find("##{model}_#{field}")
if e.tag_name == 'select'
e.select(value)
elsif e.tag_name == 'input' && e['type'] == 'checkbox'
# Assumes that value is true or false (not a String)
e.set(value)
else
# Assumes e is a text field
e.set(value)
end
end
在此代码中,我们检查元素的tag_name和type属性(如果需要)。由于输入标记可以是文本字段的方式有很多种,因此假定任何不是选择列表或复选框的内容都必须是文本字段。如果你还想处理单选按钮等,你需要扩展if-else语句。
答案 1 :(得分:0)
我建议你在elsif中使用has_selector?
方法。它返回一个布尔值,指示它是否在页面中可见。这是a link页面的文档。
TL; DR:
page.has_selector?('p#foo')
page.has_selector?('li', :text => 'Horse', :visible => true)