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

来源:互联网 发布:淘宝导航条怎么做 编辑:程序博客网 时间:2024/05/17 20:41

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

 

常用的定位方法如下:

 

 

Ruby代码  收藏代码
  1. :id                => 'id',  
  2. :name              => 'name',  
  3. :class             => 'class name',  
  4. :class_name        => 'class name',  
  5. :link              => 'link text',  
  6. :link_text         => 'link text',  
  7. :partial_link_text => 'partial link text',  
  8. :xpath             => 'xpath',  

 

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

使用id进行定位

 

比方说针对下面的控件

 

Html代码  收藏代码
  1. <input type="text" class="s_ipt" maxlength="100" id="kw" name="wd" autocomplete="off">  

 进行ID定位,可以这样写

 

Ruby代码  收藏代码
  1. b.text_field(:id=>"kw").set "rex"  

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

 

使用name进行定位

 

还是使用这个例子

 

Html代码  收藏代码
  1. <input type="text" class="s_ipt" maxlength="100" id="kw" name="wd" autocomplete="off">  

使用name定位,是这样写的

 

 

Ruby代码  收藏代码
  1. b.text_field(:name=>"wd").set "rex"  

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

 

使用class或者class_name的定位

同样的例子

 

Html代码  收藏代码
  1. <input type="text" class="s_ipt" maxlength="100" id="kw" name="wd" autocomplete="off">  

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

 

Ruby代码  收藏代码
  1. b.text_field(:class=>"s_ipt").html  

 

使用XPath定位

 

 

同样的例子

 

Html代码  收藏代码
  1. <input type="text" class="s_ipt" maxlength="100" id="kw" name="wd" autocomplete="off">  

使用XPath定位,是这样写的

 

 

Ruby代码  收藏代码
  1. b.text_field(:xpath=>'//*[@id="kw"]').html  
 

 

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

 

使用其他方法定位

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

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

 

多种定位方式同时使用

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

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

Ruby代码  收藏代码
  1. b.button(:name=>"a",:index=>0).click  

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

 

使用层级关系定位

举个例子

Html代码  收藏代码
  1. <span id="news">  
  2.     <input type="text" />  
  3. </span>  

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

Ruby代码  收藏代码
  1. b.span(:id=>"news").text_field(:index=>0).set "rex"  
  

使用这种方式,寻找页面控件更加稳定,效率更高,也算是一种技巧。