您的位置:首页 > 其它

说说watir-webdriver那些事(三)如何定位页面元素

2013-01-24 23:57 375 查看
功能自动化测试做的就是,找到页面的控件元素,然后操作这些控件,完成模拟人工的测试操作。所以开头肯定是要定位到页面上的元素。watir-webdriver提供了多方方法,帮助我们定位Web页面上的元素。

常用的定位方法如下:

Ruby代码


:id => 'id',
:name => 'name',
:class => 'class name',
:class_name => 'class name',
:link => 'link text',
:link_text => 'link text',
:partial_link_text => 'partial link text',
:xpath => 'xpath',

目前webdriver还不支持:css的方法,不过说实话这个不经常用

使用id进行定位

比方说针对下面的控件

Html代码


<input type="text" class="s_ipt" maxlength="100" id="kw" name="wd" autocomplete="off">

进行ID定位,可以这样写

Ruby代码


b.text_field(:id=>"kw").set "rex"

id一般是惟一的标示,不会有重复,所以尽量使用id来定位

使用name进行定位

还是使用这个例子

Html代码


<input type="text" class="s_ipt" maxlength="100" id="kw" name="wd" autocomplete="off">

使用name定位,是这样写的

Ruby代码


b.text_field(:name=>"wd").set "rex"

name可能会有重复,有的时候要加入:index=>1来唯一性定位

使用class或者class_name的定位

同样的例子

Html代码


<input type="text" class="s_ipt" maxlength="100" id="kw" name="wd" autocomplete="off">

使用class或者class_name定位,是这样写的

Ruby代码


b.text_field(:class=>"s_ipt").html

使用XPath定位

同样的例子

Html代码


<input type="text" class="s_ipt" maxlength="100" id="kw" name="wd" autocomplete="off">

使用XPath定位,是这样写的

Ruby代码


b.text_field(:xpath=>'//*[@id="kw"]').html

不过像我在第一篇文章中介绍的,xpath虽然可以用,不过代码会显得非常丑陋,在实际使用过程中,尽量避免使用用xpath来定位元素比较好。

使用其他方法定位

在定位link对象的时候,可以使用link和link_text属性;

另外还可以使用tag_name属性定位任意元素;

多种定位方式同时使用

在很多时候一种定位方式不能完全定位唯一元素,需要多个定位方式综合使用

比方说有两个name一模一样的控件,只能通过index来识别,如下

Ruby代码


b.button(:name=>"a",:index=>0).click

这种写法,将定位name为a的第一个元素(这里注意:incex在watir-webdriver里是从0开始的,而在Watir里是从1开始的。)。可以说这种写法是与的关系,即name符合也要index符合。有的时候我们需要或的关系,就是如果名称或者ID只要一个相等就可以,当然你可以写XPath搞定,同时也可以利用 exists?来进行判断,不过代码看似很丑,必要的时候使用吧。

使用层级关系定位

举个例子

Html代码


<span id="news">
<input type="text" />
</span>

这种情况,可能在很多使用前台组件的页面中,经常碰到,如果使用上面的方法定位,你会发现没有id,没有name,整体上会有很多input,单纯用index很痛苦,这个时候用层级管理会好很多,如下

Ruby代码


b.span(:id=>"news").text_field(:index=>0).set "rex"

使用这种方式,寻找页面控件更加稳定,效率更高,也算是一种技巧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: