Watir的element定位,是可以使用xpath来进行定位的,它的实现过程如下:
通过DOM组件来获得HTML文件的源文件
清除HTML源文件的格式,然后转化为一个正确的XHTML文件
将XHTML作为一个输入传递给REXML
使用REXML来解析XPath的表达式,从而获得指定元素的路径
将路径通过COM方式返回给DOM,从而获得定位
我们一般使用的XPath的路径表达式有:
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。
实例:
1. 指定查找
我们有一个a元素为:<a href="test.htm">click me</a>
browser.link(:xpath,"//a[@href='test.htm']").text
# => "click me“
如果这个a是第一个,我们可以用
browser.link(:xpath, “//a”).html #//a 返回第一个
browser.link(:xpath, //a[1]).html #//a[1] 数组是以1开始,非0
2. 完全定位查找
百度的页面上有:
<input type="submit" value="百度一下" id="su" class="s_btn" nmousedown="this.className='s_btn s_btn_h'" nmouseout="this.className='s_btn'">
browser.button(:xpath,"//input[@id=‘su’]").type
# => “submit"
3. 也可以模糊查找
browser.button(:xpath,"//input[contains(@id, ‘su’)]").type
# => “submit"
4. 相对路径
例如有:
<div id="u">
<a href="http://www.baidu.com/gaoji/preferences.html" name="tj_setting">搜索设置</a>
</div>
我们可以对a的父节点进行搜索:
browser.element(:xpath, "//a/..").tag_name
#=> "div"
5. 完全模糊查找
当我们只知道id,不知道type信息的情况下
browser.element(:xpath, "//×[@id='u']").tag_name