QTP11使用DOM XPath以及CSS识别元素对象
我们知道,像DOM,Html,CSS,XPath等对对象的识别策略广泛运用于一些开源的工具,例如:Selenium,Watir,Watir-Webdriver,以前qtp版本是不支持这些东西的,现在qtp11对这些已经支持了,下面我们就看看这些特性:
Document Object Model(DOM):这东西干嘛的 ,百度之。
像下面的这些方法能应用在qtp中:
方法 |
描述 |
getElementById |
使用已知的元素id,返回第一个页面元素 |
getElementsByName |
返回具有指定名称的一个JavaScript数组中的所有元素 |
getElementsByTagName |
返回与指定的标记名的JavaScript数组的所有元素 |
在qtp里调用JavaScript 方法:
Object.RunScript(script)
例如:
Browser("title:=百度一下,你就知道").Page("title:=百度一下,你就知道").RunScript ("alert('hello');")
Using HTML DOM Methods & Properties in QTP:
要访问HTML DOM方法,我们需要使用的文档对象,我们可以使用getElementById这个方法,用他的id来获取页面元素。例如:
Set kws=Browser("title:=百度一下,你就知道").Page("title:=百度一下,你就知道").RunScript ("document.getElementById('kw');")
kws.value ="百度一下"
Set us=Browser("title:=百度一下,你就知道").Page("title:=百度一下,你就知道").RunScript ("document.getElementById('su');")
us.click
但是我们对于一些页面没有定义id的但是定义了名称,我们就可以使用getElementsByName这个方法来解决,例如:
Set kws=Browser("title:=百度一下,你就知道").Page("title:=百度一下,你就知道").RunScript ("document.getElementsByName('wd')(0);")
kws.value ="百度一下"
而这里使用getElementsByName注意需要索引值,因为他是返回一个JavaScript数组。
如果使用getElementsByTagName,我们就不需要name或者id了。例如:
Set kws=Browser("title:=百度一下,你就知道").Page("title:=百度一下,你就知道").RunScript ("document.getElementsByTagName('input')(0);")
kws.value ="百度一下"
这里不好的地方就是,当有多个的时候,它的index属性无法直接写出并且当index改变了,脚本也要改变。
通常情况下,我们都是使用组合键来识别相应的元素对象,例如:
set wd=Browser("name:=.* - 六间房秀场.*").Page("title:=.* - 六间房秀场.*").RunScript ("document.getElementById('chatForm').getElementsByTagName('input')(2) ;")
wd.value ="testing"
与此同时,我们也可以使用元素之间的关系来识别一些元素,例如:
document.getElementById(‘XXX’).firstChild |
通过使用getElementById返回第一个子元素 |
document.getElementById(‘XXX’).lastChild |
通过使用getElementById返回最后一个子元素 |
document.getElementById(‘XXX’).parentNode |
通过使用getElementById返回父节点 |
document.getElementById(‘XXX’). nextSibling |
通过使用getElementById返回下一个兄弟元素 |
document.getElementById(‘XXX’). previousSibling |
通过使用getElementById返回前一个兄弟元素 |
使用XPath:
在QTP11中,XPath是另一种重要的识别元素的方式,当然它也像其它工具一样被广泛的应用于开源工具中,下面就介绍下载qtp11中改方式的特性。
XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。
XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初 XPath 的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。但是 XPath 很快的被开发者采用来当作小型查询语言。(详细的介绍看这里:http://zh.wikipedia.org/wiki/XPath)
QTP提供了两种使用XPath的方式,一种是在tools-àoptions—>Webàadvanced中;另一种就是你自己通过编程使用XPath的方法和属性。
这里主要介绍第二种:
下面就看一个采用描述性编程来使用XPath的方法的例子:
Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").WebEdit("xpath:=//input").Set "testing"
在这个例子中,我们使用的是//input,”//”在xpath中表示贪婪查询,他会变量html中所有的元素,直到找到为止。
同时如果我们知道元素的确定位置,我们也可以利用绝对路径来定位,如:
Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").WebEdit("xpath:=/html/body/div[2]/div/form/input").Set "testing"
这里比较麻烦的是,这个绝对路径,我们可以通过火狐来查看同时采用这个定位是非常快的,不过元素如果改变了,就悲催了~~~,未完待续~~~
下面来介绍,在xpath中使用元素属性来定位元素:
常用的元素属性有,ID,name,index,value,type 等,在xpath中,我们可以这样使用:
Xpath:=//element[@attribute=’ attribute value’]
例如:
Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").WebEdit("xpath:=//input[@id='kw']").set "testing"
当然,我们也可以使用多个属性来定位元素,如:
Xpath:=//element[@attribute=’ attribute value’ and @attribute=’ attribute value’ ]
Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").WebEdit("xpath:=//input[@id='kw' and @type='text' ] ").set "testing"
在一些使用AJAX构建的网站,通常他们的元素属性是动态的,例如ids,name,他们随着网页动态加载变化而变化,此时我们可以使用部分匹配的原则来定位这些元素。
在xpath中,提供了一些常见的函数,例如:cotains(),start-with(),end-with(),语法如下:
//element[start-with(@attribute,’attribute partial value’)]
// element[end-with(@attribute,’attribute partial value’)]
//element[cotains(@attribute,’attribute partial value’)]
例如下面的例子:
<div id='login_area'>
<input type='text' id='text_1'>
</div>
我们可以这样定位元素:
Browser("name:=XXX").Page("title:=XXX").WebEdit("xpath:=//div[@id=' login_area '/input[start-with(@id,’text_’)]' ] ").set "testing"
同理,其它方法也是这样用。
在这里有一种方法,直接使用text()来定位元素,这个是很方便的。语法如下:
//element[text()='inner text']
例如:
Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").link("xpath:=//a[text()='注册']").Click
当然我们也可以结合contains(),start-with()来使用。
语法如下:
//element[contains(text(),’inner text’)]
例如:
ss=Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").link("xpath:=//a[contains(text(),'注')]").GetROProperty("name")
msgbox ss ‘ss=注册
在qtp11中还介绍了关于xpath轴的知识,这部分没找到相关例子,就不介绍了,感兴趣的去看下w3school上关于xpath轴的介绍。
CSS在QTP11中使用:
QTP11中也增加了CSS来识别页面对象属性,关于css的介绍以及使用可以看w3school。
在qtp11中使用css的语法如下:
Css:=Element.class_attribute
例如:
Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").WebEdit("css:=input.s_ipt ").set "testing"
在dom,xpath中均能使用id,在css中也可以使用id。在css中使用id的语法如下:
Css:=element#id
例如:
Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").WebEdit("css:=input#kw ").set "testing"
当然,在css中我们也可以使用元素的属性来识别页面对象,其语法如下:
Css:=element[attribute=value]
例如:
Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").WebEdit("css:=input[name=wd] ").set "testing"
另外,css中也提供了类似xpath中的部分识别属性的方法,具体方法如下:
Operator |
Description |
^=attribute_value |
找到以给定的属性值的开始的元素,这个和xpath中的 starts-with()函数相似。 |
*= attribute_value |
找到包含给定属性值的元素. 这个和xpath中的 contains()函数相似。 |
$= attribute_value |
找到以给定的属性值的结束的元素. 这个和xpath中的 ends-with()函数相似。 |
例如:
<div id='login_area'>
<input type='text' name='text_1'>
</div>
Browser(title:=XXX).Page(title:=xxx).WebEdit(“css:=div#login_area input[name^=’text_’]”).set “testing”
或者
Browser(title:=XXX).Page(title:=xxx).WebEdit(“css:=div#login_area input[name*=’text_’]”).set “testing”
在css中,也可以使用text()来定位,具体语法如下:
Css:=element:contains(‘text’)
Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").link("css:=a:contains('注册')").Click
QTP11使用DOM XPath以及CSS识别元素对象的更多相关文章
- Selenium自动化中DOM,XPATH,CSS定位Web页面对象的优劣性分析
加速IE浏览器自动化执行效率:Selenium自动化中DOM,XPATH,CSS定位Web页面对象的优劣性分析 1.技术背景 在Web应用中,用户通过键盘在输入框中输入值和鼠标点击按钮,链 ...
- 【WEB自动化】【第一节】【Xpath和CSS元素定位】
目前自动化测试开始投入WEB测试,使用RF及其selenium库,模拟对WEB页面进行操作,此过程中首先面对的问题就是对WEB页面元素的定位,几乎所有的关键字都需要传入特定的WEB页面元素,因此掌握常 ...
- UI自动化之元素定位(xpath、css)
很早之前就已经写过自动化了,不过点着功能久了就会容易忘记元素定位,尤其是xpath和css定位,所以就花点时间做下总结收集. xpath有两种定位: 一.绝对路径(不推荐使用,除非已经使用了所有方式仍 ...
- css选择器用法,使用css定位元素,css和xpath元素定位的区别
css定位元素 1.什么是css? CSS(Cascading Style Sheets)层叠样式表,是一种语言,用来描述html或者xml的显示样式.在css语言中有css选择器,在selenium ...
- 黄聪:HtmlAgilityPack中SelectSingleNode的XPath和CSS选择器
XPath和CSS选择器 原文:http://ejohn.org/blog/xpath-css-selectors 最近,我做了很多工作来实现一个同时支持XPath和CSS 3的解析器,令我惊讶的是: ...
- HTML DOM 元素对象
HTML DOM 元素对象 HTML DOM 节点 在 HTML DOM (Document Object Model) 中, 每个东西都是 节点 : 文档本身就是一个文档对象 所有 HTML 元素都 ...
- CSS隐藏元素的几种方法
使用CSS隐藏元素的方法很多,在这里简单总结一下: 1.display:none display:none 应该是最常用的一种隐藏元素的方法,使用该方法隐藏的元素脱离文档流不占据空间,不会被浏览器解析 ...
- JavaScript DOM编程基础精华01(DOM入门,DOM模型和获取页面元素,事件,window对象的方法)
DOM入门 DOM就是Html页面的模型,将每个标签都做为一个对象,JavaScript通过调用DOM中的属性.方法就可以对网页中的文本框.层等元素进行编程控制.比如通过操作文本框的DOM对象,就可以 ...
- DOM元素对象的属性和方法(1)
一.accessKey() 作用:获取元素焦点快捷键:设置快捷键后,使用Alt+快捷键,让元素快速获得焦点, <!DOCTYPE html> <html> <head&g ...
随机推荐
- MapReduce-join连接
join连接 MapReduce能够执行大型数据集间的连接(join)操作.连接操作的具体实现技术取决于数据集的规模及分区方式连接操作如果由mapper执行,则称为“map端连接”:如果由reduce ...
- linux平台及windows平台mysql重启方法
各个平台mysql 重启: inux平台及windows平台mysql重启方法 Linux下重启MySQL的正确方法: 1.通过rpm包安装的MySQL service mysqld restart ...
- css3表格样式
<caption> 关于表格存储内容的描述或总结. 1.border-spacing:0;border-spacing 属性设置相邻单元格的边框间的距离(仅用于“边框分离”模式). 2. ...
- v2.0 组件通信的总结
在vue.js现在比较流行,层出不穷的js框架越来越强调数据绑定,组件化开发. 正在给公司做一个管理后台,基本思路是编写几个通用组件,采用单页面应用的形式完成: 结构大致如下: mainVue lef ...
- SharedPreferences概述
SharedPreferences概述 一.简介 SharedPreferences简介 上图紫色标注的部分为使用方法. SharedPreferences成员(属性和方法) 二.核心函数及使用实例 ...
- SARG
SARG (Searchable Arguments)操作,因为它通常是指一个特定的匹配,一个值得范围内的匹配或者两个以上条件的AND连接. 中文名 SARG 全 称 Searchable ...
- 理解WCF(第一部分,有參考他人)
依舊不廢話 上乾貨! 1.什么是WCF? WCF全名是:WindowsCommunication Foundation ,是一个运行库和一组 API,用于创建在服务与客户端之间发送消息的系统.它使用 ...
- webpack vue-cli 一有空格和分号就报错
webpack vue-cli 一有空格和分号就报错 eslintrc.js 这是ESLint的配置文件,至于为什么用ESLint的话,就是为了自动检查代码,保持一致的代码风格,从而保证代码质量. 这 ...
- iostat相关参数说明——await:平均每次设备I/O操作的等待时间 (毫秒),如果%util接近 100%,说明产生的I/O请求太多
iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视.它的特点是汇报磁盘活动统计情况,同时也会汇报出 CPU使用情况.同vmstat一样, ...
- HANA Architecture
1 HANA 是基于内存计算的.行列都支持.使用列存储,列存储的特点是高压缩,查询快,节约空间, ---SAP HANA supports both, but is particularly opti ...