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识别元素对象相关推荐

  1. JavaScript DOM / BOM (查询获取元素对象【增、删、改、查】 )以及常见鼠标事件

    1.查询获取元素(查) 1.1.根据ID获取 document.getElementById('id'); 1.2.根据标签名获取1(使用 getElementsByTagName() 方法可以返回带 ...

  2. Selenium自动化中DOM,XPATH,CSS定位Web页面对象的优劣性分析

    加速IE浏览器自动化执行效率:Selenium自动化中DOM,XPATH,CSS定位Web页面对象的优劣性分析 1.技术背景       在Web应用中,用户通过键盘在输入框中输入值和鼠标点击按钮,链 ...

  3. WebMagic功能——XPath、CSS选择器、正则表达式 || 抽取元素API、获取结果API || ​​​​​​​获取链接||​​​​​​​使用Pipeline保存结果

    WebMagic功能 实现PageProcessor 抽取元素Selectable WebMagic里主要使用了三种抽取技术:XPath.正则表达式和CSS选择器.另外,对于JSON格式的内容,可使用 ...

  4. UI自动化之元素定位(xpath、css)

    很早之前就已经写过自动化了,不过点着功能久了就会容易忘记元素定位,尤其是xpath和css定位,所以就花点时间做下总结收集. xpath有两种定位: 一.绝对路径(不推荐使用,除非已经使用了所有方式仍 ...

  5. HtmlAgilityPack中SelectSingleNode的XPath和CSS选择器

    XPath和CSS选择器 原文:http://ejohn.org/blog/xpath-css-selectors 最近,我做了很多工作来实现一个同时支持XPath和CSS 3的解析器,令我惊讶的是: ...

  6. JavaScript知识点整理(十三)- DOM -(2)操作元素

    目录 一.改变元素内容 1.1 innerText 和 innerHTML 区别 二.常用元素的属性操作 2.1 案例练习 - 修改元素属性 src 2.2 案例练习 分时显示不同图片,显示不同问候语 ...

  7. DOM概述 选取文档元素

    脚本化文档 客户端js的存在使得静态的html文档变成了可交付式的web应用 DOM概述 文档对象(DOM)是表示和操作html和xml文档内容的基础api. <!doctype html> ...

  8. By.Xpath快速定位页面元素常用方法

    先看一看xpath的语法 我们将在下面的例子中使用这个 XML 文档. <?xml version="1.0" encoding="ISO-8859-1" ...

  9. Chrome 技术篇-console控制台检测xpath、css唯一性

    $x 可以获得xpath的dom集合,$$ 可以获得css的dom集合. length 可以反映出集合里的dom个数. 等于1的话就代表只有一个dom,就说明xpath或css是唯一的. 喜欢的点个赞 ...

最新文章

  1. linux 在执行命令过程中,反单引号(`)这个符号代表的意义为何?
  2. sql a 表 若包含b表 则a 表 列显示_几道常见的SQL面试题,看你能答对几道?
  3. VS与Matlab混合编译 - mexw64 (C++版)
  4. Python网络编程——socket套接字实现UDP/TCP信息传输
  5. Opencv--undistortPoints()和cvUndistortPoints()
  6. 【iOS】Swift3 Swift2 String转int,从TextField里面获取Int类型的数值
  7. 华为MSTP负载均衡配置示例
  8. NLP学习—22.Transformer的代码实现
  9. c# 判断两个集合是否有交集
  10. 微信小程序 访问locolhost_微信小程序 数据访问实例详解
  11. 如何使用浏览器网络监视工具进行黑客攻击
  12. Java软件开发工程师级别
  13. 制作一键架设服务器,制作一键端方法
  14. Linux基础-分区规划与使用
  15. 谭浩强c语言第五版视频,张子枫平胸
  16. android九宫格控件,IKNinePhotoView是一个开源的Android九宫格控件
  17. 为什么苹果6没有录屏_苹果iPad为什么没有计算器应用程序
  18. 分享职场心得《14》
  19. redux与react-redux
  20. HTML表单基本格式与代码

热门文章

  1. 启动QQ失败,正在迁移个人文件夹,为了保证数据完整,请等待迁移完成后再启动QQ...
  2. ftcs格式 matlab,计算流体力学_对流方程_有限差分法_Lax格式_迎风格式_FTCS格式(8页)-原创力文档...
  3. ssm毕设项目西仰陵农贸市场网销系统0m1k5(java+VUE+Mybatis+Maven+Mysql+sprnig)
  4. Netfilter 网桥日志
  5. 个位+百位=十位+千位
  6. 只需一键,即可快速去除图片水印!
  7. 三峡计算机学院官网,三峡大学计算机与信息学院-王纪华
  8. 分享一些行业经验,巩固知识体系
  9. 利用Bing Search API进行搜索
  10. 大我6岁的女友回复我的雷人短信