我正在尝试使用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定位器来一般地抓取第一个,第二个等输入?
答案 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
类来一次性评估页面。