Watir,寻找更优雅的HTML元素检查解决方案

时间:2011-01-21 12:44:56

标签: ruby watir

我正在寻找一种更优雅的解决方案来检查浏览器中是否有一系列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元素的不同方法中的因素,这个案例陈述会变得庞大而且难以处理。

有人能建议更优雅,更灵活的解决方案吗?

2 个答案:

答案 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