在Watir中运用xpath初级篇

在Watir中运用xpath初级篇

对于Watir操作IE浏览器,目前并没有录制工具来帮助测试人员,一般靠测试人员使用IE Developer Toolbar辅助进行元素识别,然后编写测试脚本。

在编写脚本过程中,主要通过是使用Watir::IE的一个实例化对象@ie来获得页面上的各种元素,比如button,link…然后可以对这些 元素进行操作。(Watir识别HTML元素的方法详见附表一),识别元素时各不同元素支持不同的属性识别,详见附图一,这里不做赘述。

Watir::IE封装的是一个当前页面的DOM Tree,而不是页面源代码。比如页面如果用javascrīpt动态产生一个元素,在Watir中仍然可以访问。本文主要介绍通过xpath来定位并识别页面元素,达到灵活操作控件的目的。

首先简单介绍一下xpath,xpath是在xml文档中查找信息的语言,可用来在xml文档中对元素和属性进行遍历。XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。Xpath的运用使得Watir自动化脚本更易于维护、更健壮。

Watir对xpath的支持提供给测试人员一种识别页面元素更为有效的解决方案,从附图一中可以看出来:xpath是较多document对象所 支持的识别属性。从原理上说,是把页面HTML转化成为XHTML,然后REXML来解析他,达到使用xpath表达式语言在文档结构中做查询定位的目 的。并且,xpath可以操作html中的扩展tag,或者Watir不支持的tag操作,对于Watir扩展是很有效的,这使得xpath在Watir 如何运用的研究变得有那么些意义。

首先看一下xpath的简单语法以及在Watir中如何运用。

示例节选代码如下:

<div id=’firstone’><div>

<table border=”0″ cellpadding=”0″ cellspacing=”0″>

<tr>

<td valign=”top”>

<a title=”Furniture | Rugs, Carpets | Silver | More” href=”http://antiques.ebay.com/”>Antiques</a>

<a title=”Paintings | Posters | Prints | More” href=”http://art.ebay.com/”>Art</a>

<a title=”Drawing | Painting | Scrapbooking | Sewing | More” href=”http://crafts.ebay.com/” >Crafts</a>

<a title=”DVD | Film | Laserdisc | VHS | More” href=”http://dvd.ebay.com/” >DVDs &amp; Movies</a>

</td>

</tr>

</table>

</div>

<div>

<input tabindex=”1″ id=”_nkw” foo=”bar”>

<select name=”_sacat” size=”1″ tabindex=”2″>

<option value=”See-All-Categories” selected=”selected”>All Categories</option>

<option value=”20081″>Antiques</option><option value=”550″>Art</option>

<option value=”2984″>Baby</option><option value=”267″>Books</option>

<option value=”625″>Cameras &amp; Photo</option>

<option value=”15032″>Cell Phones &amp; PDAs</option>

<option value=”11450″>Clothing, Shoes &amp; Accessories</option>

</select>

<input type=”submit” value=”Search” tabindex=”3″/>

<object name=”obj”></object>

</div>

</div>

xpath常用路径表达式如下:

// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置

. 选取当前节点

.. 选取当前节点的父节点

@ 指定属性

示例一:使用属性定位识别元素

//div[@id=’categories’]

选取id为categories的div,返回所有符合条件节点

Watir代码:

@ie.div(:xpath,”//div[@id='categories']“)

示例二:使用tag以及数组位置定位元素

//a

返回所有a子元素,无论它们在文档中的位置

Watir代码:

@ie.link(:xpath,”//a”)

注:watir中使用该xpath自动返回元素集中的第一个元素,该代码与@ie.link(:xpath,”//a[1]”)效果相同。若需要识 别其他位置元素,可使用数组方式定位识别,如:@ie.link(:xpath,”//a[2]”).click点击第二个tag为a的元 素,@ie.link(:xpath,”//a[last()]”)点击最后一个tag为a的元素

示例三:使用相对路径识别元素

//a[1]/../../../../../../div[2]/input

首先找到第一个a元素,一层层定位到根节点下第二个div,再选取input节点

Watir代码:

@ie.text_field(:xpath,”//a[1]/../../../../../../div[2]/input”).set ‘test’

注:使用相对路径可以去除对id,name等属性的依赖,当页面元素缺乏类似属性来定位识别时,可以使用该方法进行控件操作

示例四:根据模糊属性定位元素

//a[contains(@href , ' crafts ')]

定位到href属性值中含有crafts的a元素

Watir代码

@ie.link(:xpath,”//a[contains(@href,'crafts')]“).click

示例五:属性不被Watir支持,但可通过xpath识别

//select[@foo='bar')]

当遇到有属性名为foo的情况,watir并不支持通过该属性来定位查询元素,但可通过xpath查询识别

Watir代码:

@ie.select_list(:xpath,”//select[@foo='bar')]“).select ‘Art’

示例五:使用element_by_xpath扩展Watir不支持的控件

Watir代码:

puts @ie.element_by_xpath(”//object”).name

注:某些页面标签并不被Watir所支持,比如object,可以通过这种方法获取元素

还有很多其他用法这里不一一举例了,有兴趣的同学可以深入研究xpath语法,并灵活运用到我们的自动化脚本中。当然在使用当中也遇到一些问题,比 如在Watir中使用xpath时,中文页面似乎经常会解析出问题,具体问题还在研究当中,也希望对此有了解的同学能给些方向和建议。

附表一:Watir识别HTML元素的方法(From Wiki)

How? HTML源码 Watir代码 注 :action <form action=”page.htm”> ie.form(:action, /page/).click 只可用于form元素, 通过指定form提交的url来识别 :after? <a>one</a> <a>two</a> <a>one</a> ie.link(:after?, ie.link(:text, “two”)).click 定位到指定元素之后的页面控件 :class <a> ie.link(:class, “header”).click 当元素有class属性时可以使用其进行定位、识别 :for <label for=”header”> ie.label(:for, “header”).click 只可用于定位label元素 :href <a href=”page.htm”> ie.link(:href, /page/).click 可使用href属性定位超链接 :id <a> ie.link(:id, “header”).click 用于通过id识别控件,由于xhtml说明中定义了id唯一,推荐使用这种最为可靠的识别方式 :index <button> ie.button(:index, 1).click 用于定位页面指定类别第N个元素。目前的Watir版本中从index为1开始计数,但以后可能会从0开始计数。 :method <form method=”get”> ie.form(:method, “get”).click 仅可用于定位form元素,form的method属性值可以是get或post :name <a> ie.link(:name, “header”).click 用于通过name属性识别元素,对于之前版本的HTML比较有用,但对于XHTML来说识别度较低。 :src <img src=”photo.png”> ie.image(:src, /photo/).click 当需要通过URL来识别一个图片元素时使用 :text <a>click me</a> ie.link(:text, “click me”).click 可用于识别包含文本的页面元素,如link,span,div等 :title <a title=”header”> ie.link(:title, “header”).click 识别含有title属性的元素 :value <input value=”text”> ie.text_field(:value, “text”).click 用于识别含有默认值的text field元素或button元素 :url <a href=”page.htm”> ie.link(:url, /page/).click url属性和href属性相同 :x path <a href=”page.htm”> ie.link(:xpath,”//a[@href='page.htm']“).click 使用xpath定位元素 multiple attribute <a>click me</a> <a>click me</a> ie.link(:text => “click me”, :index => 2).click 可以使用多个属性联合定位识别,如本例所示,将点击文本为”click me”的第二个链接

附图一:识别元素所支持的方法(From Wiki)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值