我想我会一直走在测试的道路上,既然 我已选择了测试这条路 欢迎测试界的XDJM一起交流、共同进步

QTP那点事之对象识别篇

上一篇 / 下一篇  2009-05-02 23:42:38 / 个人分类:QTP

QTP那点事之对象识别

一、QTP对象识别原理

从所周知,QTP是通过将对象添加到对象库来识别运行时对象的。那么究竟它是怎么样来识别对象的呢?

Object Identification中我们可以看到对象识别时四种模式:

1.      强制属性识别

可以一个或多个属性的组合,如果根据此级别识别了对象,则退出识别流程。

如果根据对象库的属性值与运行时不匹配,则报错(无法找到对象)。

如果属性在当前Application中有多个对象匹配,则使用辅助属性识别模式。

2.      辅助属性识别

辅助属性识别是对强制属性识别的一个补充,当强制属性识别识别时匹配多个对象,就根据辅助属性识别设置的属性及属性值来进行识别。

3.      顺序标识符

顺序标识符有两个取值:一是Location,根据控件在窗口上的Location值来进行识别,每个控件对应自己的Location值,按从上到下从左到右的顺序取值。二是Index,根据控件各自的Index值来进行识别。比如在windows中的计算器程序,它的数字按钮都被识别为WinButton类型的对象,抛开它们的text值,每个按钮都有各自的Location值和Index值。

4.      智能识别

智能识别属性可以分为基本过滤属性和可选过滤属性,它们的关系就像强制属性和辅助属性。

二、QTP对象模型

在对象库中保存的对象以树形的结构存在,如果你了解面向对象,那么就很容易理解对象的层级结构。从一个顶层的对象开始(通常是windows对象或者Dialog对象,web程序通常是Browser对象或Page对象),此对象有很多的子对象,子对象下一层又有子对象,直到最底层的对象,例如一个button

三、QTP对象类型

曾经看到过有人问ROTO的区别,其实我们可以从它们的写法来判断。RORun-time object的缩写,很明显它是运行时的对象,也就是在实际运行的Application中的对象。而TOTest object的缩写,是测试对象,就是存在于对象库中的对象。

录制的对象就成为了TOQTP就通过TO来操作RO,所以在TO中必须含有RO的特征才能正确识别RO。说到这,不得不提到其中的四个方法:

GetRoProperty获取运行时对象属性

GetToProperty获取测试对象属性

GetToProperties获取测试对象的属性集

SetToProperty 设置测试对象属性

通过这些方法,我们可以对对象进行实时的监控,更重要的是可以在脚本回放过程动态的来修改对象的属性值。

四、对象库管理

对象的添加

1.      录制时自动添加

2.      对象库里添加

3.      Active Screen添加

4.      Step Generator添加

1 2 4三种都需要Application,通过点击Application上的对象来进行添加,而3是通过Active Screen保存的快照中来点击添加,说穿了,它们都必要要有实际存在的对象才能添加。总不能无中生有,天降对象。

除此之外,QTP还能实现怎样的对象管理?

有时为了便于对象的管理,我们可能需要将不同的Action中的对象进行统一管理。这时候我们就可以将每个Action的对象导出到本地,然后比较和合并,进而做一些参数化的设置,最后进行对Action的映射。

五、描述性编程

      在前面谈到的都是录制回放,必须要通过对象库中对象来识别RO时的对象,当Test工程比较大的时候,对于大量的对象管理也是一件比较费力的事。QTP提供了另外的一种机制,那就是描述性编程。意义在于通过录制下来的测试对象在回放时可能存在比较多的问题,不能回放,使用描述性编程将会灵活的操作对象。描述性编程可以分为行描述性编程和对象级描述性编程。以下代码来显示两者的区别:

1.行描述性编程

SystemUtil.Run "C:\WINDOWS\system32\calc.exe","","C:\WINDOWS\system32","open"
with Window("regexpwndtitle:=计算器","regexpwndclass:=SciCalc")
.WinButton("text:=1","nativeclass:=Button").Click
.WinButton("text:=\+","nativeclass:=Button").Click
.WinButton("text:=2","nativeclass:=Button").Click
.WinButton("text:=\=","nativeclass:=Button").Click
.WinButton("text:=C","nativeclass:=Button").Click

.Close
end with

对象类型(“属性1=属性值”,“属性2=属性值”)

注意:只需指出对象的类型,而不必指定是哪个对象,具体的哪个对象通过属性来识别。

2.对象创建方式

需要通过自己创建对象来实现,然后设置对象的N个属性值,达到识别RO的目的。

MyObj(“属性名”).value=“属性值”

 

 

Option explicit

Dim objWin,objBut

SystemUtil.Run "C:\WINDOWS\system32\calc.exe","","C:\WINDOWS\system32","open"

Set bjWin=description.Create()

Set bjBut=description.Create()

objWin("regexpwndtitle").value ="计算器"

objBut("text").value="1"

objBut("nativeclass").value="Button"

Window(objWin).WinButton(objBut).Click

objBut("text").value="\+"

Window(objWin).WinButton(objBut).Click

objBut("text").value="2"

Window(objWin).WinButton(objBut).Click

objBut("text").value="="

Window(objWin).WinButton(objBut).Click

Window(objWin).Close

Set bjBut=nothing

Set bjWin=nothing

 


TAG: QTP RO to TO 对象识别

引用 删除 susie2000   /   2010-09-14 21:05:10
 

评分:0

我来说两句

我的栏目

日历

« 2024-04-22  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 25412
  • 日志数: 42
  • 建立时间: 2008-12-06
  • 更新时间: 2009-06-15

RSS订阅

Open Toolbar