QTP基础及描述性编程

上一篇 / 下一篇  2009-03-04 17:34:03 / 个人分类:qtp

51Testing软件测试网&hDg#s'F TD

我们简单介绍一下有关功能测试的基本方法,这实际上对于所有自动化功能测试产品来说都是一样的。一般情况下,用QTP来进行功能测试的基本方法主要包括三个主要阶段: 
b7FOV9B0

$G)Qd%C"Pbw+]051Testing软件测试网d Zm'i0}x'fh8h \

1、创建测试或组建51Testing软件测试网 {u:|L)\^

%lG dw$}-TOV0首先可以通过在应用程序或网站上录制会话,或者建立对象库并使用关键字驱动功能向关键字视图中手动添加步骤来创建测试或组件。在QTP里面我们可以通过两种方式添加步骤来创建测试或组件:51Testing软件测试网 }]J}'} h2wL

P~6H;OZ:eAA0在应用程序或网站上录制会话。
JF*{v#N#`m0建立对象库并使用这些对象在关键字视图或专家视图中手动添加步骤51Testing软件测试网H}l#tADPc^
然后在在测试或组件中插入检查点,检查页面、对象或文本字符串中的特定值或特征,通过它可以标识网站或应用程序是否正常运行。或是通过用参数替换固定值扩展测试或组件的范围。提供数据表中的数据,定义环境变量和值,定义测试、组件或操作参数和值,或者使用QTP生成随机数字或当前用户和测试数据等。51Testing软件测试网n4x_H_

d:RK S(W$MZ,k;x lku0最后如果需要的话使用QTP中众多的功能测试功能来增强测试或组件或添加编写语句来实现更复杂的测试目标。51Testing软件测试网`k.Ek\2r%B3f {

k7@x5Z5O:n-kr$K02、运行测试和组建51Testing软件测试网j&q*s5yk4a3@2z

r tm ],U3h0控制运行会话,帮助标识和消除测试或组件中的缺陷。使用“单步执行”、“单步跳过”和“单步退出”命令逐步运行测试或组件,或设置断点使测试或组件在预定点暂停。每当测试或组件在断点处停止时,可以在“调试查看器”中查看其变量的值。

3Gb|p[ l1{051Testing软件测试网:zW |&D$Y,U%U

3、分析结果

v4qG9L}vRL051Testing软件测试网:TLI'xcC

在运行测试或组件之后,通过两种方式可以查看其结果:在“结果”窗口中查看结果;自动报告在运行会话过程中检测到的缺陷,可能的话并上报到其他缺陷管理产品中。

S owYH h0

lD_;Y3o0.试图与对象模型51Testing软件测试网VcToR u

51Testing软件测试网2fM(S&`e#F(r

在介绍QTP中的Descriptive Programming前,我们有必要先介绍一下ExpertView及在ExpertView里进行编码的一些基本知识。

Ya:F RkB3n)o051Testing软件测试网 g8M|wp |

在QTP里面提供了两种视图,第一种我们把它称为KeywordView(关键字视图,在早期的版本中称为TreeView),第二种把它成为ExpertView(专家视图),这两种视图分别是针对两种类型的人进行使用的。

@Of@Q ]V051Testing软件测试网M%T| qbK5Ug

1、KeywordView(关键字视图)

E g Y |%^|yd;a0

D5x$P!^9h$L)H!a*V0通过关键字视图,QTP提供了一种模块化的表格格式创建和查看测试或组件的步骤。每个步骤在关键字视图中都是一行,这样用户可以轻松的修改任何一部分组成。51Testing软件测试网yIr*` h1R nJ

51Testing软件测试网~ `!QY0D^Qx|u

在录制会话过程中,用户在应用程序上执行的每个步骤在关键字视图中记录为一行。例如,在51testing的页面上执行的下列三个步骤:

wh:O ^DJ(d^l^051Testing软件测试网 P#s)s%taR6B*j CA

在“用户名”编辑框中输入zhoda02。
IiAHT0在“密码”编辑框中输入加密字符串41c630a213508cd49eb35089db1b893144b9。
-u.F(f9xj#@9B\7vR0单击“登录”按钮。51Testing软件测试网7e2RPdD~*X
那么,关键字视图将包含下列行:

9sS7v` nZo1W+q&BzG}051Testing软件测试网j5fwT#O.S

51Testing软件测试网%n#w'h NE+H@b,m

P&h$Ss7} uG OX0  51Testing软件测试网~JO#r!O

1Tycs&G.x051Testing软件测试网+Z*Ze%Lp

很显然,关键字视图非常直观有效,使用的人可以很清晰的看到被录制对象的录制层次及运行步骤,比较适合那些对于业务操作流程熟悉的人员使用。但是,如果需要一些增强型的操作,那就需要切换到专家视图里进行了。51Testing软件测试网-m4opB|sHkDs

51Testing软件测试网5?(e'}:U{ Ulu

2.ExpertView(专家视图)

D4F um_ c;b~051Testing软件测试网)Ah ~mx2A

QTP在关键字视图中的每个节点在专家视图中对应一行脚本。上面例子对应的脚本如下:(删除后一句是因为前后重复,一句可以说明问题

Y3ac6kb(b!c6@0

h2d,lUf(? J+?3^0Browser("51Testing软件测试网:软件测试的专业网站").Page("51Testing软件测试网:软件测试的专业网站").WebEdit("username").Set "zhoda02"51Testing软件测试网R d~4g$L*~

-\\ x ep_"]4b2w Hw0Browser("51Testing软件测试网:软件测试的专业网站").Page("51Testing软件测试网:软件测试的专业网站").WebEdit("password").SetSecure "41c630a213508cd49eb35089db1b893144b9"

a*E0{}z;A3P?0jec0

lg i(o%]`F;GVj8}#n0Browser("51Testing软件测试网:软件测试的专业网站").Page("51Testing软件测试网:软件测试的专业网站").WebButton("登录").Click51Testing软件测试网_p!E!k*a8F

51Testing软件测试网ldL B?{/\

对于QTP来说,其核心编码语言是Visual Basic Script,因此,如果用户熟悉VBScript,可以运用自如的添加和更新语句,并通过编程方式增强测试和脚本,而这一切必须在专家视图中完成。51Testing软件测试网 ~ YzM lpj

51Testing软件测试网;a:`L9l%u(P

更为重要的是,有些操作是必须在专家视图中才可以完成的,例如:要处理动态对象、客户化报告、获取对象运行时的属性值(Run-time Value)等等,这些都必须通过专家视图中的VBScript编码完成。

K Y}U5o;Gk2iz q/S%G051Testing软件测试网 dg(E` sb:W

然而,QTP里所有的操作都是基于对象进行的,所以我们必须对对象模型有一个基本了解,才可以在专家视图内进行Descriptive Programming。

s7W-vq f-eh0

H1C5?\.K$J+E;NDY}03、测试对象模型

3e(J4g+u.yV1n051Testing软件测试网0cE'nT9h"]S^|*]

测试对象模型是一大组对象类型或类,QTP用这些对象类型或类来表示应用程序中的对象。每个测试对象类都有一个可以唯一标识属于该类的对象的属性列表,以及一组QTP可以对其进行录制的方法。它包括测试对象(TestObject)和运行时对象(RunTime Object)。51Testing软件测试网-ER \ BQh8|a+?

4R1Q5W zKS3b0pj0测试对象是QTP在测试或组件中创建的用于表示应用程序中的实际对象的对象。QTP存储有关该对象的信息,这些信息有助于它在运行会话期间标识和检查该对象。

}+v-T%ng!rk{U0

0{-G#dcC1Nz}E0运行时对象是网站或应用程序中的实际对象,在运行会话期间执行针对该对象的方法。51Testing软件测试网 YJQ+uIF.^v3i

51Testing软件测试网]F'I2{/V,S

如果录制时执行应用程序的相应操作,则一般情况下QTP将完成以下操作:51Testing软件测试网$T*{aPIf H

51Testing软件测试网ucQ-_;g5CN"Uaa

标识QTP测试对象类(表示执行了操作的对象),并创建相应的测试对象51Testing软件测试网+K|2i:rPe
读取应用程序中对象属性的当前值,然后将属性和属性值列表与测试对象一起存储。
2|5~*a6\ } a!g0选择该对象的唯一名称,一般使用该对象某个重要属性的值。51Testing软件测试网Ret1e2Sm V
使用适当的QPT 测试对象方法录制对对象执行的操作。51Testing软件测试网f4o;`a;Qo
例如,假定使用以下HTML 源代码单击“查找”按钮:

4fG U%hS0

| `8U2mn0<INPUT TYPE="submit" NAME="Find" VALUE="Find">51Testing软件测试网PZ/c9W"e$Hk!L

e6xA XS+u+u q;S0QTPl将单击的对象标识为WebButton 测试对象。它将创建一个名为Find 的WebButton 对象,然后为该Find WebButton 对象录制下列属性和属性值,同时还会录制对WebButtion的Click方法。51Testing软件测试网%jo%g y/S

51Testing软件测试网Vv^/KKw/o

51Testing软件测试网;q_0EcU7{Aa8u

Ra9w]#B,?0  
s.TzS!ly*Z$M0

jHqTc051Testing软件测试网klpp!EH5n*Y

在关键字视图及专家视图中显示内容分别为:

f `+Q1t*E0]7f6g051Testing软件测试网EK6k:Zar

51Testing软件测试网UV&lZNI*@!`
51Testing软件测试网:UxhEC-`f2]j0kq
  
*j7w%k*O'`kz Q8j5p J0

2]zf~M4y x)}051Testing软件测试网de'@ ~c$F#w

Browser("Mercury Interactive").Page("Mercury Interactive").WebButton("Find").Click51Testing软件测试网$fV k `m~O,O

51Testing软件测试网*?j4}h/b%d0G2DP

运行测试或组件时,QTP通过其测试对象类及其描述(一组用于唯一标识该对象的测试对象属性和属性值)来标识应用程序中的每个对象。测试对象及其属性和属性值的列表存储在对象库中。例如在上例中,QTP将在运行会话期间在对象库中搜索WebButton 对象,通过名称Find 来查找其描述。QTP根据找到的描述,在应用程序中查找WebButton 对象,该对象带有HTML 标记INPUT、类型为submit、值为Find。找到对象后,它将对其执行Click 方法。51Testing软件测试网+V2{QI^.{

,ZDF$FE&^:c0在这样一组对象模型的基础上,QTP为各类应用对象都提供了一组方法和属性,例如Web Objects,Windows Objects,SAPGUI Objects,ActiveX,Java等。下面是一些Web Objects的方法和示例:

}$XE*[L051Testing软件测试网 rL,oupS\(X*T&N

对象51Testing软件测试网dodu)V}3nbWe;Q
方法
&b-A9Yy+vm \6o051Testing软件测试网#I4RB&hd dE
Browser
\-t+?~^+Q+Oj0Check51Testing软件测试网j_'\M$W+jz

y)u J$G/Y"OX)q[0Frame51Testing软件测试网 F+SQ+n{"P}1J O
Click51Testing软件测试网/i `4AP3f5J-n
51Testing软件测试网.N/lr(d$_,P'^(u2D2F
Image
[%mbP @,U"\X!k P0Exist
y#CJe]0@ f\051Testing软件测试网%@9^!L&P,S5Eb/t(]-s
Link51Testing软件测试网#P ~L9JI*Zb.f3l
GetCellData
eT2p4P\{051Testing软件测试网4BLx RI-@s5`
Page
lN"^:| n x8o*v(S0GetProperty51Testing软件测试网(@&t9a7P(TS9N
51Testing软件测试网-A"G1g xt(S2_g-n
WebArea51Testing软件测试网i7U[+C$i,C(rk2V
GetROProperty
*u+j@t@/oq0
#u-CZE"V3T3f6K0WebButtion
3{1B)q5cm;_4gxDx0Mouseover
_'aa]W8Q051Testing软件测试网CG'T8rO
WebCheckBox
:{d3A8sZF0RowCount
9o4J,t(YA MO051Testing软件测试网2^,k ]MCP
WebEdit51Testing软件测试网m XBLw)f6A[#Y?t
Select
/{i Geb051Testing软件测试网M9]hXJm
WebList
4J!M)[ C/G] e0Set
"w;~+{,vAm*EN051Testing软件测试网8@(G/g g*j
WebRadioGroup
9uO"R$BDd)x |$cJ,\0SetProperty
*qj D].O/h!S4c? c051Testing软件测试网Da]Z`z;?-z
WebTable
P2`5oCv!k.\y0Submit51Testing软件测试网L3adh U.q4HQ
51Testing软件测试网? VNx cF;Ir [

{:Bm1st)?"L0例1:获取单元格中的值51Testing软件测试网'W6eY)|4L'l

51Testing软件测试网 Bp"D8F IH[Xu/DU$_X

thisText = Browser(…).Page(…).Frame.(…).WebTable("sample").GetCellData(2,1)

6R d r.h3Ej0

%L#L)PFaPah UWD|0例2:获取图片的名称51Testing软件测试网3hzXDDv3U ]

qKW*`UP DP O0ObjectName = Browser(…).Page(…).Image("Find").GetProperty("Name")51Testing软件测试网 A#e#\dyv6fw

%X0MR,|p'_N(i0例3:检查某个对象是否存在,如果存在弹出对话框说明对象存在。

"h0^ B1N*o8t0

U~Xi8s e [)Y0If Browser("Browser").Page("Page").Applet("login.html").JavaEdit("username").Exist Then

}o5H+oURN4}g0

|VT+{+[r5\0MsgBox("The object exists.")51Testing软件测试网H:W-jX7mPR

51Testing软件测试网f0WGI7U+S d~`

End if

;@.L] {TN1F051Testing软件测试网Rs]$mL E!yZ-{-O

.描述性编程(descriptive programming)

s{Bc ` jLL&sm051Testing软件测试网 |&Mb/x DhVV

1、descriptive programming概述

+SPr"@GV/_8n5W051Testing软件测试网e-L_-Z YI"mDum

通常情况下,当在录制一个操作时,QTP会将被操作对象加入到对象库里(Object Repository)。一旦对象存在于对象库里,我们就可以在专家视图里通过添加相关的对象方法来对该对象进行操作。我们可以通过引用层次型对象库里的对象描述(Object Description)来添加相应的方法。

W9a1[|hz#L u t051Testing软件测试网Q N h?+j3{V5M8Y-QI

因为QTP对象库中的每个对象都具有唯一名称,所以在引用时对象名是必须需要指定的。然后在测试运行期间,QTP在对象库中根据这个对象的名称和父对象来查找对象,并使用为这个测试对象存储的测试对象描述,在网站或应用程序中标识该对象。51Testing软件测试网l%P0zr:}"Y'W%xC

6k h {.rF*]0例如我们用QTP录制Yahoo Mail登录情况时我们需要输入用户名,于是在录制时我们就会录下一个WebEdit对象,它的缺省逻辑名为“login”,该编辑字段位于名为“Yahoo! Mail - The best” 的页面上,并且该页面在浏览器中使用名称Yahoo!进行录制。如图所示,即为录制时的对象库的内容:

X2a$@y#Y0e!aA;p2N051Testing软件测试网 GIi0\ m*t6o

51Testing软件测试网Nbr6l8e

yh U5{Ye.g?4e2TZ0  
J6MY}3S&{0

z,zY!j ]]0

$SJ9c*h4j0那么如果我们想要应用该对象,就可以在专家视图输入以下信息:51Testing软件测试网 Zc+lU b+V;B6B8Suv

51Testing软件测试网wD rg7s3Wb

Browser("Yahoo!").Page("Yahoo! Mail - The best").WebEdit("login").Set “xxx”51Testing软件测试网 zZj2eDrwAW

?'U\5R5^vmE0或者我们也可以调用一些方法,获取改对象在运行时的对象名,如:51Testing软件测试网2gA+rnRK

51Testing软件测试网-_ | Pi!z+y

Browser("Yahoo!").Page("Yahoo! Mail - The best").WebEdit("login").GetROProperty(“name”)51Testing软件测试网M ki$l&r

#wBp1@'|lms/^0然而,我们可以发觉到,上面的例子在处理对象时,对象已经存在于对象库里,因此我们可以应用这个对象的逻辑名。实际使用中,情况往往并非如此简单,我们经常会遇到很多在页面上动态产生的对象,换而言之,对象库里没有这些对象,我们也无从引用。因此我们必须采用其他的技术来完成这类操作,这也就是我们需要讲解的Descriptive Programming。

2C ov!P(H.V9`p0

)j7B-\$Gx/R0为了满足上面提到的动态对象的处理问题,QTP允许用户通过将对象属性编码到测试脚本里来动态识别对象,这就是我们通常意义下称为的Descriptive Programming。通过这种方式,我们可以指示QTP不通过引用对象库和对象名来对实际对象进行操作。具体操作中,我们只需要为QTP提供对象的一组属性和值,这样QTP就可以来识别相应的对象并对其进行操作。这相当于,告诉QTP要识别对象的一些关键特征,根据这些特征QTP就可以一一匹配然后识别出来这个对象。

,`!@f YG051Testing软件测试网Af#o?7K1P+qP l

而且,更为重要的是,通过这种Descriptive Programming的方式,还可以让QTP识别具有某些相同属性的对象。我们先来举个例子来看一下:我们假设当前的Windows系统中打开了若干的Yahoo主页面(多于一个),现在我们要关闭所有的正在浏览Yahoo主页面的浏览器。51Testing软件测试网!AR#j\9d+\Uk3d4vT

51Testing软件测试网 ~"d.gQZ

对于上面那个例子来说,我们先看一个简单一点的情况,假设只有且仅有一个Yahoo主页面:那么我们可以用下面的方法来51Testing软件测试网,b x[Rx3o

;Y._(v4KSv0Window("Text:=Yahoo! - Microsoft Internet Explorer").Close51Testing软件测试网lU6i R7DZ

51Testing软件测试网(]Z)w_ rF0?V

我们可以看到语句里我们要查找的对象是Window窗口标题为“Yahoo! - Microsoft Internet Explorer”,然后把它关闭,具体的语法说明我们稍后为解释。但是上面的语句仅仅适合前面提到的条件“只有且仅有一个Yahoo主页面”,如果有多个同样的窗口就会出错,原因是通过语句可以匹配到多个对象,而QTP不知道应该对哪个对象进行关闭动作。我们需要进一步的缩小匹配范围:

,b%err6@3i1Nr0

;\`:LP5`M:z?,V6Gjim i51Testing软件测试网+kLe _ Tfh

I [,b D'osjdC;_p0i = 051Testing软件测试网 E S5Y(vPV S#{7`

51Testing软件测试网 ojD6o7n*X1}]

while (Window("Text:="Yahoo!" - Microsoft Internet Explorer", "index:="&i).exist)

W,d5B3N2J?0

H4} dQ7WL0c)K0Window("Text:=Yahoo! - Microsoft Internet Explorer", "index:="&i).close

*h2~P`0P&i051Testing软件测试网/f&e-T']0| CnnO?

i = i +151Testing软件测试网 Rj1cZ3]E)G

51Testing软件测试网HH/T `ZN.W{-C

wend

A9v4X![Xmi([^:u051Testing软件测试网Ju qN G\7W

这里我们可以看到,对于具有相同属性的对象,我们可以通过index参数来对其进行区别,第一个对象为index=0,第二个为index=1等等,依次类推。当然我们还可以通过CreationTime和Location参数来定位对象,这里就不详细叙述了。51Testing软件测试网;W,~w E\ _#Y

]l uR v T q7jo%[0通过上面的例子,我们对Descriptive Programming有一个基本了解了,下面我们详细讲解一下Descriptive Programming:在具体实现中,我们有两种类型的Descriptive Programming方法。可以列出直接在测试语句中描述对象的属性和值的集合;或者向Description 对象中添加属性和值的集合,然后在语句中输入Description 对象的名称。下面我们分别举例介绍。

2FB {:G0Eq0

2fKc [ sv02、直接在语句中输入编程描述

v0cn }p,G'|051Testing软件测试网m2hSI plc![

通过多个指定描述对象的property:=value对,可以直接在语句中描述对象,这是最直接有效的方法。

0cx,iP.`Yv0

$RU!b6O+R7V#t0常规语法为:

2zc1V/lx051Testing软件测试网(M HB#sjk:g1f

TestObject("PropertyName1:=PropertyValue1", "..." , "PropertyNameX:="PropertyValueX""}

3J$f+W W;yNf0

dt6g)`'J9el"e6| r0TestObject - 测试对象的类。

'}?!|M7I ^6h&t)ZO s0

,X]U'Wo0PropertyName:=PropertyValue - 测试对象的属性及其值。各个property:="value" 对之间应用逗号和引号分开。51Testing软件测试网 Y+{}4j5M&P$C"VZ

51Testing软件测试网,B\@(^ o hm

例如:以下语句指定Mercury Tours 页面中名为author且索引值为3 的WebEdit 测试对象。当测试运行时,QTP 将查找具有匹配属性值的WebEdit 对象,并输入文本jojo。

${&RH ud#s0Jr0

-B$|z Uu/[e y sI0Browser("Mercury Tours").Page("Mercury Tours").WebEdit("Name:="Author"", "Index:="3"").Set "Mark Twain"51Testing软件测试网s\m.b.h2g!UR)Tq#h

7x&~(@ { z9wh0我们也可以从从描述中的特定位置(从Page 对象描述开始)开始使用Descriptive Programming。51Testing软件测试网~:v#J [,ts

tup;lz0Browser("Mercury Tours").Page("Title:="Mercury" Tours").WebEdit("Name:="Author"", "Index:="3"").Set "jojo"51Testing软件测试网7QJN#p)U$i

51Testing软件测试网q3TTD)Z?Gjl(j

此外,如果我们希望在在一个测试或组件中多次使用相同的Descriptive Programming,则可以将创建的对象赋值给变量,这样使用会方便很多。

9Dts%b-JK.I`E051Testing软件测试网j `j Wb\&VqN

例如:我们需要完成下面一系列操作

'rC.@c$O.w051Testing软件测试网 v `!]T;J E+N

Window("Text:=HyperSna").WinButton("Caption:=日期").Click51Testing软件测试网Gr4z;cJ8^v

51Testing软件测试网 J-W"CN'c/}.QB

Window("Text:=HyperSna").WinButton("Caption:=时间").Click

2@*xr9fLs.O0

!^Gy J/c1gVK0Window("Text:=HyperSna").WinButton("Caption:=确定").Click

/f/kS&ej8Go H0

+NE `Y,r ID0那么,为了方便其见,我们可以将Window("Text:=HyperSna")赋值到一个变量,然后再使用,参见下面的代码:

*L2wc9U6u~0

;Q+m`,a2s0p r:`/I0Set WinHyper = Window("Text:="HyperSna"")

nz p)E+e2]051Testing软件测试网;U["q+m!j

WinHyper.WinButton("Caption:=日期").Click

e3],K3@!C'U:S5?a051Testing软件测试网 U y {;r#rC

WinHyper.WinButton("Caption:=时间").Click

L'dIsO{ t2W051Testing软件测试网#^@wTt7O L

WinHyper.WinButton("Caption:=确定").Click51Testing软件测试网L,D4s8h-N4}(D

51Testing软件测试网BfTu-B5I2C

如果使用了VBScript里面的With语句,还可以简化为以下代码:51Testing软件测试网$T+g*F%~v7Nw2k

51Testing软件测试网;{c6}IOL3w q

With Window("Text:="HyperSna"")51Testing软件测试网r"fGu:S

S0{9j-N9a"]X |[0C0.WinButton("Caption:=日期").Click51Testing软件测试网*z+e\$\ FV

51Testing软件测试网nJl5_jY

.WinButton("Caption:=时间").Click51Testing软件测试网/|-df|.p

&{bn0`:K]L-c L0.WinButton("Caption:=确定").Click

f.BFMnFa Yh7U*U0

A2M `|-MQC/|#g0End With

i0KA` {(~0

8Y-FIM b cQY0下面我们来看一个更为详细的例子,在QTP产品缺省安装里面自带了一个网上订机票的示例称为Mercury Tour,我们看一下在订票过程中何时需要用Descriptive Programming。51Testing软件测试网#r1s[7U JC3mU$r

51Testing软件测试网C gV#Sc

首先登入系统后,如果需要订票,就要先搜索航班,此时系统要求输入订票乘客的数量,假设我们在第一次录制脚本时选择了1个Passenger,并成功完成订票。然后,我们需要参数化乘客数量来测试订票系统,我们会发现回放会失败。原因在于,不同的乘客的数量导致在订票时需要输入每个乘客的姓名,而录制时,只输入了一个乘客的姓名。而乘客姓名的输入框是随着乘客数量的变化而动态生成的,我们不可能从对象库里得到没有录制的对象,因此必须使用Descriptive Programming。

y{:rqN\051Testing软件测试网 G0f x,rnEU


.@W|1LvS1Y051Testing软件测试网"u6b)\1pLY
  51Testing软件测试网:i*\ ]!zz
51Testing软件测试网KT$G5X9]8F{O

51Testing软件测试网+CyzJL:@ P`,Q

在录制单个乘客时,我们得到的录制语句是:

;i+U,M }3| k051Testing软件测试网5F} FdQ4S

Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebEdit("passFirst0").Set "Michael"

(R7f A\;Y0cO E051Testing软件测试网TP.VAr o:Y!x

Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebEdit("passLast0").Set "Wang"51Testing软件测试网1SB%P H sd+@

*E)}el)Z0显然WebEdit("passFirst0")和WebEdit("passLast0")是录制时产生的对象并存放到对象库里的。通过对象库,我们可以看到对象的属性如下51Testing软件测试网`"porJM0v5yKM:f$^R

U.{ [4eNP0
9p5p/aD7\ z7y051Testing软件测试网(S0j.U[| e;f&w zG
  51Testing软件测试网$h^z*B$\_}"A

*]-?1W6W#J051Testing软件测试网+z[,B6uMW0t,Ks

系统对于发生多个FirstName时,命名规则是passFirst0,passFirst1…依次类推。因此只要通过简单的Descriptive Programming就可以完成动态FirstName与LastName的识别工作。这里我们假设参数化的乘客数已经赋值给intPassNum,下面是脚本中的关键语句:

m"hX@D'CM051Testing软件测试网"VPI8g2P3l$Op t%_

counter = 051Testing软件测试网J6S)[LS:\U

zRT y._z5D0For i = 0 to (intPassNum)

+B @[4w2l'u'n051Testing软件测试网fgxh(l)Dc5z v

Browser("Find a Flight:").Page("Book a Flight:").WebEdit("name:="passFirst""&i).Set "Michael"51Testing软件测试网Y;X2] [-f+J*[%\

6J0R$dZRjO0Browser("Find a Flight:").Page("Book a Flight:").WebEdit("name:="passLast""&i).Set "Wang"51Testing软件测试网3yg|%JS@ib

51Testing软件测试网{t+jUbuU9Xo

counter = counter + 1

z ^ PRGWR0

S5m n1W^.d!J0Next51Testing软件测试网NG f-}[#Z'u0yK&E

Lqv(a*x$LrI03、使用description对象

$ly"c:C$bDt0

z@k0qJ/` ~0使用Description 对象可以返回包含一组Property 对象的Properties 集合对象。Property 对象由属性名和值组成。然后,可以在语句中指定用返回的Properties 集合代替对象名。(每个property 对象都包含一个属性名和值)。51Testing软件测试网&G3|u_mEg

3z [R1_I#p,V&x^5_0要创建Properties 集合,可以使用以下语法输入Description.Create 语句:

v ~ eX'l/P@K9W0

a(r5oI]9g:r%r(Q0Set MyDescription = Description.Create()

"qUy9I!gJH051Testing软件测试网7R7D @U]!e.E

创建Properties 对象(例如,以上示例中的MyDescription)后,就可以输入语句,以便在运行会话期间在Properties 对象中添加、编辑、删除或检索属性和值。这样,就可以在运行会话期间,使用动态方法确定哪个属性以及多少个属性应包含在对象描述中。51Testing软件测试网~&o_[~$a7rXa

E0wEZ*d`B Q4N0在Properties 集合中填充一组Property 对象(属性和值)后,可以在测试语句中指定用Properties 对象代替对象名。

bS ?*YH(bF&E"z051Testing软件测试网;x#Tgv#c0Z\2h

例如,假设我们需要完成以下一个操作:

"yk|0ustyb C051Testing软件测试网 x%Z gm!rS"d

Window("Error").WinButton("text:=OK", "index:="1"").Click51Testing软件测试网QMQPl4Q;H4H*P

8_e7~Jb'g ~0我们可以通过Description对象来实现同样的功能,参加下面的代码:

Z$Z_J*o b W3P0?051Testing软件测试网_V2?$H`4z c [4q

Set MyDescription = Description.Create()

U&\*L~a#{vd8an051Testing软件测试网/GJ2K\K3l5b

MyDescription("text").Value = "OK"

Z4r)U7CD0

"K*P Hfm2[D0MyDescription("index").Value = 151Testing软件测试网.CC6zP)L:I)I

uEWH{^U7X5m0Window("Error").WinButton(MyDescription).Click51Testing软件测试网/V Suf%nA

51Testing软件测试网rac@V{

Set MyDescription = Nothing

@!Y[;JZb'^051Testing软件测试网H h_:w(_w

【小结】以上是对QTP中有关处理动态对象中的Descriptive Programming的简单介绍,希望对大家能够有所帮助,就总体而言,如果能够熟练掌握Descriptive Programming,那么有很多实际中的问题就可以迎刃而解。当然Descriptive Programming只是QTP中的一个功能,QTP在实际功能测试中还有很多强大的功能,作为QTP学习的一个系列有机会我会一一介绍。

rA$OXF0q&N ^;\ h[0

Feedback


TAG:

 

评分:0

我来说两句

日历

« 2024-04-09  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 228143
  • 日志数: 58
  • 文件数: 305
  • 书签数: 21
  • 建立时间: 2007-01-31
  • 更新时间: 2009-07-27

RSS订阅

Open Toolbar