使用红宝石中的硒迭代所有表单字段

时间:2010-07-12 16:58:00

标签: ruby testing selenium

我正在尝试使用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]不起作用;输入根据页面嵌套在各种标记中。

有没有办法使用selenium定位器来一般地抓取第一个,第二个等输入?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

了解XPath的工作原理将有助于进行此类测试;戴夫亨特对//body/descendant::input[#{field_number}]的建议非常好; descendant::input部分将返回field_number将索引的数组。

还有其他XPath轴也会给出数组 - 您可能还希望使用表单元素作为后代的开头而不是正文。

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