说说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的方法,不过说实话这个不经常用
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来定位
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来唯一性定位
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
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来定位元素比较好。
另外还可以使用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"
使用这种方式,寻找页面控件更加稳定,效率更高,也算是一种技巧。
常用的定位方法如下:
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"
使用这种方式,寻找页面控件更加稳定,效率更高,也算是一种技巧。
相关文章推荐
- python+selenuim webdriver 页面跳转后如何定位元素
- Webdriver如何解决页面元素过期:org.openqa.selenium.StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up
- webdriver定位页面元素插件-WebDriver Element Locator
- 如何在 Watir 中使用 XPath 定位和操作页面元素
- 【Selenium】webdriver进行页面元素定位
- selenium webdriver(Appium)如何等待页面元素加载完成
- selenium webdriver学习(四)------------定位页面元素(转)
- 在Selenium WebDriver中使用By.Xpath快速定位页面元素
- Selenium-webdriver—如何定位测试元素
- 如何在 Watir 中使用 XPath 定位和操作页面元素
- selenium webdriver xpath 定位页面元素
- webdriver如何定位多层iframe中元素
- 【selenium webdriver】 XPath 多条件查询语句(处理同一个页面上出现相同文本按钮的动态ID元素定位)
- WebDriver 如何获取页面中的隐藏元素(悬浮菜单)
- 【selenium学习笔记】webdriver进行页面元素定位
- WebDriver 如何获取页面中的隐藏元素(悬浮菜单)
- WebDriver API(1)定位Web 页面上的元素
- 轻松自动化---selenium-webdriver(python) (四)--如何定位一组元素?
- 在Selenium WebDriver中使用By.Xpath快速定位页面元素
- selenium webdriver(Appium)如何等待页面元素加载完成