在watir中运用xpath初级篇(zz)

上一篇 / 下一篇  2009-09-17 17:06:42 / 个人分类:ruby&watir

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

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

tme \,aPLmn P}051Testing软件测试网 t-v BP vg{ ~AL

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

,]}$N*g.l X051Testing软件测试网 WX3C;ea

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

b3h.J2c$K)N*a lp9_/nV0

8O)W0lLX\-H\0Watir对xpath的支持提供给测试人员一种识别页面元素更为有效的解决方案,从附图一中可以看出来:xpath是较多document对象所支持的识别属性。从原理上说,是把页面HTML转化成为XHTML,然后REXML来解析他,达到使用xpath表达式语言在文档结构中做查询定位的目的。并且,xpath可以操作html中的扩展tag,或者Watir不支持的tag操作,对于Watir扩展是很有效的,这使得xpath在Watir如何运用的研究变得有那么些意义。51Testing软件测试网*Q[W5X C:K!^'IP`"p#vm

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

^^)P%c$UsX0

3QF0w#O M[m(J+O0示例节选代码如下:

7I#p7[i!}+bVS0
<div id=’firstone’><div>

*O'a+H`2B j051Testing软件测试网g0vpA+QF9W7c!uQ

51Testing软件测试网-d%@ Vgp_ n Fe

<table border=”0″ cellpadding=”0″ cellspacing=”0″>51Testing软件测试网~)v!y:F5X

*im"Ei |Z|0<tr>

wYrj'G*m.s)jk[0

zSf?nJ:oO[0<td valign=”top”>51Testing软件测试网@k-R9Qzd"W `V

$}Gb1Ga0<a title=”Furniture | Rugs, Carpets | Silver | More” href=”http://antiques.ebay.com/”>Antiques</a>51Testing软件测试网*{YFL[|

51Testing软件测试网C*T RK0Q]

<a title=”Paintings | Posters | Prints | More” href=”http://art.ebay.com/”>Art</a>51Testing软件测试网5X Ng~jvi.l,c#O

3Kj M([y_nA7S0<a title=”Drawing | Painting | Scrapbooking | Sewing | More” href=”http://crafts.ebay.com/” >Crafts</a>51Testing软件测试网cAn:rIA

51Testing软件测试网VU(ga5o2c?

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

'ty5L%Oq0

H4P;o7J0h3H7\ ];L0</td>

}sH`*t,r{OBS2x*|4R0

)d;n2sIQ+J0</tr>

,d2r4E }m7QOj2U_O0

&E Z_~[g*a*LT-h*v s0</table>

ID _8]'])e`$|051Testing软件测试网,S:@[\{p&Z

</div>

w O)`?U|051Testing软件测试网 jL*Eb?)Sw LxC7Wl

<div>

0h;xy&em051Testing软件测试网:^gQ4S(\1ez7iR

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

+\ Jh#WUxC_0

j{vo%SxD*u0<select name=”_sacat” size=”1″ tabindex=”2″>

G2iU'cu8z \5[0

4}(R.v,W-qVD6zH3O0<option value=”See-All-Categories” selected=”selected”>All Categories</option>51Testing软件测试网6_B'~'U!u

51Testing软件测试网X MR)a~ c

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

mls$|Lw5sk[0

y9qo&l8i"sf"^0<option value=”2984″>Baby</option><option value=”267″>Books</option>51Testing软件测试网/s^`4E9C+D|J8L3U9gBr

51Testing软件测试网 f?y S~ Yc&k^

<option value=”625″>Cameras &amp; Photo</option>51Testing软件测试网#BOL ]H S"D)@

[\nT bUz0<option value=”15032″>Cell Phones &amp; PDAs</option>

%A1E0cHa*M.K b0

0K/b\;d4b#br4\t0<option value=”11450″>Clothing, Shoes &amp; Accessories</option>

7w k#v)W)G B~|051Testing软件测试网7p pF Y/_t,`E/Q2nh

</select>

$x MD9T"sY~ V9B!z051Testing软件测试网/a6|5C1{M?v5n

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

2Q8G`7]W0

t i [_dlxwBa0<object name=”obj”></object>51Testing软件测试网;PGQ/W#xe&I

51Testing软件测试网&V*EXo.Do*_

</div>51Testing软件测试网'nG7i9O\%e8f

51Testing软件测试网B l Ax\ j t b

</div>

4M3`)^ o&Q,Y f9X'`0

-nV*W6?.m$jP"O0xpath常用路径表达式如下:51Testing软件测试网C-a-LhF

cB&L+A'O9V$h0// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置

i-o;a~ l0

7qx9xYGi t0. 选取当前节点

"D,IN,XeLor051Testing软件测试网#[5i!XTBsh;pEQ

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

\B|F;gN,X051Testing软件测试网1t:j]6Z? M

@ 指定属性51Testing软件测试网,\ SZ`n M z)A

51Testing软件测试网 ` CR ^inw

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

Fu`o0S051Testing软件测试网J^hl7V*|yw1k$L

//div[@id=’categories’]

+s,ei/m*d,?1N051Testing软件测试网:Nx C b%Mfz2iU

选取id为categories的div,返回所有符合条件节点51Testing软件测试网1k8^ ?!Y/Hy

51Testing软件测试网+P Je^*Y.R xA[g8_:d

Watir代码:

+h)e!G0@}W.y H6Q!R051Testing软件测试网(Z h}8q3X"^)b5K{

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

R-Z4z*\i)}] y$n051Testing软件测试网 zm b3L+b2c

示例二:使用tag以及数组位置定位元素51Testing软件测试网'a%w&z"Lx5xbWy)D

cF[;z/L0//a51Testing软件测试网?v/?-Ly Xb)@.Q

Hz\^K9C_]0返回所有a子元素,无论它们在文档中的位置51Testing软件测试网aAN!hm0i

51Testing软件测试网Dc!s[F[SO._'|c)z

Watir代码:

(^8?!c d8w{_7A`051Testing软件测试网Ns SKxAw

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

;b qMXl6g0? Zh!x g051Testing软件测试网Xg0})i/tJFp

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

*M jOo&z^!Q0

3Y-OG$GZ8WWG \:g0示例三:使用相对路径识别元素51Testing软件测试网fX$AE3E? |

51Testing软件测试网!W }k)_5m&Gon,g

//a[1]/../../../../../../div[2]/input51Testing软件测试网NI4Dv_!`'e)q!X z

51Testing软件测试网 A'rr SNG4JYE

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

H P%qL\b'jG$H051Testing软件测试网Wa+N&hi9W}

Watir代码:51Testing软件测试网6v {K%L5I~MY

51Testing软件测试网2VV5z)r gL&E'Jw

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

Rb3A[.Wc0G.}0

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

'l8k&u t c R+pAB0

Z ^x-{B6fWu/Z%x0示例四:根据模糊属性定位元素

+o*S#g8P,jY K051Testing软件测试网"f {X Ve;R5J+G?Ls"]

//a[contains(@href , ' crafts ')]51Testing软件测试网%jo#zDb2r`

51Testing软件测试网m U1\r[,R {a

定位到href属性值中含有crafts的a元素51Testing软件测试网J'_'~s;pq

51Testing软件测试网8b0y~"k'[:Ht

Watir代码51Testing软件测试网;ar;F@]4Si`8G

{0SE nW`!I V.s)g0@ie.link(:xpath,”//a[contains(@href,'crafts')]“).click51Testing软件测试网FX4O0\8L.oV#Z

51Testing软件测试网q1l8hu,z[)|t$@:L

示例五:属性不被Watir支持,但可通过xpath识别51Testing软件测试网Z$?5@YCXR

51Testing软件测试网 WsI~$KfxRY

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

m0j x(u.k051Testing软件测试网'_)D!\M,l.A"\3wl

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

Lm]&Z v CU051Testing软件测试网9U-]8th'o2s,f

Watir代码:51Testing软件测试网OMD#|r0iS

Fo't6CI{3Ns\0@ie.select_list(:xpath,”//select[@foo='bar')]“).select ‘Art’

4[%~RF9g-@+D|0

%B z*iD-m6Y}{*S0示例五:使用element_by_xpath扩展Watir不支持的控件51Testing软件测试网1^0`[a'd.D;C$G!sw

'I/vp$A*}K?~0Watir代码:51Testing软件测试网5YOAB[G3I r

51Testing软件测试网Jn2AD.u!T

puts @ie.element_by_xpath(”//object”).name51Testing软件测试网E PO;[#bL9B8q

51Testing软件测试网0C S+UE;PA

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

o9L.g E"U-Mx051Testing软件测试网`4R;l7mYnx*XH

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

+I}/U H aPx Zi0

txU1Ban8If0附表一:Watir识别HTML元素的方法(From Wiki51Testing软件测试网f*F~1|l3gy

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/).clickurl属性和href属性相同
:xpath<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”的第二个链接

{3{"H \r:B2LuMA0附图一:识别元素所支持的方法(From Wiki

;g}5R"|;O0f051Testing软件测试网&A"n]0cU-A2{|2U`"H!z

151Testing软件测试网5tx9_&E-HIf0W


TAG:

 

评分:0

我来说两句

Open Toolbar