2010-07-12 67 views
3

我想验证我的表单字段都使用Selenium有关联的标签,但是我在抓取页面上所有表单字段时遇到问题。 get_all_fields只获取文本字段;我没有办法还抢了密码,收音机,复选框等用红宝石中的硒遍历所有表单字段

我是想这样的事情:

num_fields = Integer(selenium.get_xpath_count("//input")) 

1.upto(num_fields) do |field_number| 
    input_id = selenium.get_attribute("//input[#{field_number}]@id") 

    selenium.element?("css=label[for=#{input_id}]") 

end 

的问题是,//输入[1]不工作;根据页面,输入嵌套在各种标记中。

有没有办法使用硒定位器一般抓住第一,第二等输入?

回答

2

尝试使用//body/descendant::input[#{field_number}]

1

了解XPath的工作原理可以帮助进行这种测试;戴夫亨特的建议//body/descendant::input[#{field_number}]是相当不错的; descendant::input部分将返回field_number将索引到的数组。

还有其他的XPath轴也会给出数组 - 你可能也想使用form元素作为后代的开始而不是主体。

唯一的缺点是xpath表达式每次都会在循环中得到评估。如果你有很多输入控件,或者IE浏览器这样的慢速浏览器,这可能需要相当长的时间 - 尤其是如果你有其他标准检查的话。您最好使用selenium.get_html_source并开发WebStandardsChecker类来一次评估页面。