`
tengzejun508
  • 浏览: 27269 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

QTP11使用DOM XPath以及CSS识别元素对象

    博客分类:
  • QTP
 
阅读更多

我们知道,像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补丁 - 增强WPF对象识别以及问题修复

    【QTP11补丁 - 增强WPF对象识别以及问题修复】 QuickTest Professional(QTP)是HP公司推出的一种自动化测试工具,主要用于功能和回归测试。QTP11是其的一个版本,该版本在自动化测试领域具有广泛的应用。这次的...

    QTP11补丁发布 - 增强WPF对象识别以及修复一些问题

    QTP11补丁发布 - 增强WPF对象识别以及修复一些问题 This hotfix fixes the following problems: 1. QuickTest Professional sometimes caused .Net 4 WPF applications with multiple AppDomains to crash. 2. Quick...

    QTP识别对象的原理

    2. **对象识别机制**:QTP使用一套复杂的算法来识别屏幕上的对象。这些算法包括属性匹配、位置识别、对象层次结构分析等。例如,如果一个按钮的类、名称、位置、大小等属性与对象库中的模板匹配,那么QTP就会认为它...

    QTP 对象识别原理

    以上就是QTP对象识别的原理以及测试流程的主要方面,包括错误处理机制。理解这些概念对于有效地使用QTP进行自动化测试至关重要。在实际应用中,还需要结合具体的测试场景和需求,灵活运用这些知识来创建高效且可靠的...

    QTP11使用教程(中文版)

    QTP11 使用教程(中文版) QTP(Quick Test Professional)是 HP 公司花了 45 个亿收购的美科利产品套件之一,是一款用于功能测试的自动化测试工具。它支持功能测试和回归测试自动化,用于每个主要软件应用程序和...

    QTP对象识别常用方法介绍

    QTP的对象识别能力是其核心功能之一,它允许测试人员通过对象库来识别并操作应用程序中的各种元素。下面将详细介绍QTP对象识别的常用方法。 一、默认对象识别 QTP在录制测试时,会自动识别屏幕上的对象并将其转换为...

    QTP & DOM.rar

    QTP通过其智能对象识别技术和强大的数据驱动测试能力,使得非编程背景的测试人员也能进行自动化测试。 DOM,Document Object Model,是W3C组织制定的一种标准,用于表示XML和HTML文档的结构化表示方式。DOM将网页或...

    QTP疑难问题解答(不能识别对象)

    ### QTP疑难问题解答:无法识别对象 #### 一、识别对象描述问题(Idenfirying Test Object Description Problems) ...通过这些步骤,可以有效地解决QTP中对象识别的相关问题,提高自动化测试的效率和准确性。

    QTP11补丁全集

    QTP11补丁下载 - 增强WPF对象识别以及问题修复 QTPNET_00062.EXE QTP11补丁下载 - 支持FireFox 3.6 QTPWEB_00063.EXE QTP11补丁下载 - 支持IE保护模式 QTPWEB_00073.EXE QTP11补丁下载 - 支持IE9浏览器识别 ...

    QTP识别JAVA界面元素的大概技术原理

    - **内存和性能监控**:除了界面元素识别,QTP还能利用JVMTI监控JVM的内存使用情况和性能指标,有助于在测试过程中优化资源管理。 #### QTP的自定义JVMTI Agent实现 QTP的Java支持依赖于一个名为`jvmhook.dll`的...

    QTP对象识别常用方法

    【QTP对象识别常用方法】 QuickTest Professional(QTP,现称为UFT,Unified Functional Testing)是一款自动化测试工具,主要用于功能测试和回归测试。在QTP中,对象识别是核心功能之一,它决定了QTP如何识别和...

    QTP11补丁下载 - 支持64位应用对象识别

    总的来说,"QTP11补丁下载 - 支持64位应用对象识别"是QTP11用户在64位环境测试中必不可少的更新。通过这个补丁,用户可以充分利用QTP的功能,进行高效、准确的自动化测试,确保软件在各种环境下的质量和性能。因此,...

    QTP对象库简介QTP对象库简介

    ### QTP对象库简介 ...其对象识别和管理机制、脚本编写能力以及丰富的插件支持使得QTP成为自动化测试领域的佼佼者。对于想要提高测试效率和质量的企业和个人来说,熟练掌握QTP的使用将是非常有益的。

    QTP11下载地址

    1. **对象识别**:熟悉QTP11的对象识别机制,合理设置对象属性,以提高测试的稳定性和可靠性。 2. **脚本优化**:学习如何编写高效、易维护的测试脚本,利用函数库和业务流程等高级特性简化复杂逻辑。 3. **错误处理...

    解决QTP在win7_64bit识别不了对象问题的补丁包

    总之,解决QTP在Windows 7 64位系统中的对象识别问题需要综合考虑多个因素,包括补丁更新、版本兼容性、对象描述符设置以及系统环境的调整。通过对问题的深入理解和针对性的解决策略,我们可以使QTP在64位环境中发挥...

    QTP11完全从零开始学习包

    QTP11是其一个重要版本,引入了更多新特性和改进,如增强的对象识别能力、更好的数据驱动测试支持以及更完善的报告功能。 首先,了解QTP的基础知识至关重要。这包括理解QTP的工作原理,例如它的对象库、测试脚本...

    QTP:虚拟对象需要注意的两点

    本文将详细介绍在使用QTP时关于虚拟对象管理器中显示的虚拟对象集合存储以及如何正确处理虚拟对象的两个关键点。 #### 一、虚拟对象管理器中显示的虚拟对象集合存储 1. **虚拟对象的概念**: - 在QTP中,虚拟对象...

Global site tag (gtag.js) - Google Analytics