Watir与XPath的完美结合

Watir与XPath的完美结合
http://www.jointest.org/forum.php?mod=viewthread&tid=56

一.什么是XPath ?

XPath是在xml文档中查找信息的语言,可用来在xml文档中对元素和属性进行遍历。XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。Watir对xpath的支持提供给测试人员一种识别页面元素更为有效的解决方案, xpath是较多document对象所支持的识别属性。从原理上说,是把页面HTML转化成为XHTML,然后REXML来解析他,达到使用xpath表达式语言在文档结构中做查询定位的目的。并且,xpath可以操作html中的扩展tag,或者Watir不支持的tag操作等。Xpath的运用使得Watir自动化脚本更易于维护。


二.xpath常用路径表达式如下:

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

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

.
选取当前节点

@
指定属性


三.简单语法介绍

1.页面代码如:

<area shape="poly" coords="182,32,188,43,190,56,150,56,150,56" href="PieChart.html?category=Critical&pieIndex=0">

Watir语法:

ie.element_by_xpath("//area[contains(@href ,'PieChart.html')]/").click


2.页面代码如:

<td><img src="3.jpg">Third Image</td>

Watir语法:

ie.cell(:xpath, "//img[@src='3.jpg']/").click()


3.页面代码如:

<select foo="bar"> <option value="1">1< /option> < /select>

Watir语法:

element = browser.select(:xpath, "//select[@foo='bar']")


4.页面代码如:

<a href="test.htm">click me</a>

Watir语法:

ie.link(:xpath,"//a[@href='test.htm']/").clink


四.实际应用举例:相关的xml代码获取,请对照代码用火狐浏览器直接打开论坛http://www.jointest.org
相关页面,右键‘查看元素’即可。


  1. require 'rubygems'
  2. require 'watir'
  3. require 'test/unit'
  4. require 'watir/windowhelper'
  5. require 'win32ole'
  6. #当前所有ruby class文件编码格式选GB2312
  7. WIN32OLE.codepage = WIN32OLE::CP_ACP

  8. class XPath_Watir_Test < Test::Unit::TestCase  
  9.   
  10.   #关闭当前打开的所有IE
  11.   #方法调用举例:test_11_close_allie(1,10)
  12.   def test_11_close_allie(i,j)   
  13.     for i in i..j
  14.       Watir::IE.each do |ie|
  15.       ie.close
  16.       end
  17.       i=i+1
  18.     end      
  19.   end
  20.   
  21.   #写一个登录用的公用方法
  22.   def test_12_loginplan_jointest(username,password)
  23.     #调关闭IE的方法
  24.     test_11_close_allie(1,5)
  25.    
  26.     #打开自动化测试论坛首页
  27.     ie=Watir::IE.start("http://www.jointest.org/")
  28.     #最大化当前IE
  29.     ie.maximize   
  30.     #断言当前页面的title是否是 自动化测试论坛 -  JoinTest -  Powered by Discuz!
  31.     assert_equal(ie.title,"自动化测试论坛 - JoinTest - Powered by Discuz!")
  32.       
  33.     #判断打开页面是否已经有用户登陆,如果有点击退出按钮,退出登录。
  34.     if ie.contains_text("退出")
  35.        ie.link(:text,"退出").click
  36.        #等待5秒钟,从退出页面跳转到登陆页面
  37.        sleep 5
  38.     end   
  39.      
  40.     #控制已经打开的指定窗口
  41.     ie1 = Watir::IE.attach(:url, 'http://www.jointest.org/forum.php')
  42.     #输入账号密码登陆jointest
  43.     #ie1.text_field(:id,"ls_username").set(username)
  44.     #ie1.text_field(:id,"ls_password").set(password)
  45.     #ie1.button(:class,"pn vm").click
  46.     #为演示XPath 下面采用XPath写用例脚本
  47.     ie1.text_field(:xpath,"//input[@id='ls_username' and @class='px vm xg1' and @name='username']/").set(username)
  48.     ie1.text_field(:xpath,"//input[@id='ls_password' and @class='px vm' and @name='password']/").set(password)
  49.     ie1.button(:xpath,"//button[@class='pn vm']").click
  50.     #等待2秒钟
  51.     sleep 2
  52.     #用断言检查登陆是否成功
  53.     assert(ie1.text.include?("退出"))
  54.     assert(ie1.link(:xpath,"//a[@href='http://www.jointest.org/home.php?mod=space&do=friend']/").exists?)
  55.     assert(ie1.link(:xpath,"//a[@href='http://www.jointest.org/home.php?mod=space&do=pm']/").exists?)
  56.     assert(ie1.link(:xpath,"//a[@href='http://www.jointest.org/home.php?mod=space&do=notice']/").exists?)
  57.     puts "亲,欢迎登陆自动化测试论坛哦!赶快开始你的自动化测试之旅吧!"
  58.    
  59.     #开始论坛新手上路之旅
  60.     ie1.link(:xpath,"//a[@href='http://www.jointest.org/forum.php?mod=forumdisplay&fid=64']").click
  61.     ie1.link(:xpath,"//a[@class='xst' and @οnclick='atarget(this)' and @href='http://www.jointest.org/forum.php?mod=viewthread&tid=5&extra=page%3D1']").click
  62.     puts "感谢阅读'致广大自动化测试爱好者'"
  63.   end
  64.   
  65.   #调用登陆方法登陆jointest,输入你自己的账号密码
  66.   def test_13_login_jointest
  67.     username = ("这里输入你的账号")
  68.     password = ("这里输入你的密码")
  69.     test_12_loginplan_jointest(username,password)
  70.   end
  71.   
  72. end
复制代码

五.附表一:Watir识别HTML元素的方法,地址:http://wiki.openqa.org/display/WTR/Ways+Available+To+Identify+HTML+Element



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版本中从index1开始计数,但以后可能会从0开始计数。

:method

<form method=”get”>

ie.form(:method, “get”).click

仅可用于定位form元素,formmethod属性值可以是getpost

: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属性相同

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”的第二个链接



附表二:识别元素所支持的方法,地址:

http://wiki.openqa.org/display/WTR/HTML+Elements+Supported+by+Watir


更多资料请访问以下地址:

http://wiki.openqa.org/display/WTR/Tutorial

http://www.w3school.com.cn/xpath/xpath_syntax.asp



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值