我正在寻找一种更优雅的解决方案来检查浏览器中是否有一系列HTML元素。
我想到了创建一个包含元素类型和ID的CSV文件,将其读入数组并使用它来检查浏览器中是否存在元素。
因此CSV文件/数组看起来像这样,
"select","srch-op-select"
"text_field","srch-filter"
"button","srch-button"
"image","srch-showhide-icon"
"div","srch-showhide"
然后我想我可以使用case语句进行检查,类似这样,
myElements.each do |row|
type = row[0]
id = row[1]
case type
when "button" : assert(browser.button(:id,id).exists?)
when "checkbox" : assert(browser.checkbox(:id,id).exists?)
when "div" : assert(browser.div(:id,id).exists?)
when "image" : assert(browser.image(:id,id).exists?)
when "label" : assert(browser.label(:id,id).exists?)
when "link" : assert(browser.link(:id,id).exists?)
when "radio" : assert(browser.radio(:id,id).exists?)
when "select" : assert(browser.select_list(:id,id).exists?)
when "span" : assert(browser.span(:id,id).exists?)
when "table" : assert(browser.table(:id,id).exists?)
else $log.debug "---Unsupported element type "+type
end
end
显然,如果你想覆盖所有支持的元素类型或选择HTML元素的不同方法中的因素,这个案例陈述会变得庞大而且难以处理。
有人能建议更优雅,更灵活的解决方案吗?
答案 0 :(得分:2)
用以下内容替换你的案例陈述:
assert(browser.send(type.to_sym, :id, id).exists?)
答案 1 :(得分:1)
Akephalos
谢天谢地,我们找到了Akephalos。 Akephalos提供了一个Capybara驱动程序,允许您在无头浏览器HtmlUnit中运行黄瓜集成测试。 HtmlUnit是一个“用于Java程序的GUI-Less浏览器”。它模拟HTML文档,并提供一个API,允许您调用页面,填写表单,单击链接等...就像在“普通”浏览器中一样。通过我们的Akephalos分支解决了我们遇到的一些问题,我们开始运行非常可靠的无头浏览器测试。HtmlUnit是用Java编写的,Akephalos使用jruby-jar启动并与HtmlUnit浏览器进行交互。它具有相当好的JavaScript支持(它能够处理我们能够投入的所有内容,包括jQuery 1.4.2和1.4.3,jQuery Mobile和jQuery live)。
编辑:摘自http://robots.thoughtbot.com/post/1658763359/thoughtbot-and-the-holy-grail