QTP描述性编程(descriptive programming)<转>
上一篇 / 下一篇 2007-01-09 22:46:59 / 个人分类:QTP
描述性编程(descrīptive programming)51Testing软件测试网r*t"@!~ y9b.vk R
irqgh Ku01、descrīptive programming概述
c3M2i LT%J1@mI.gz051Testing软件测试网%VF8D5u/b8f
通常情况下,当在录制一个操作时,QTP会将被操作对象加入到对象库里(Object Repository)。一旦对象存在于对象库里,我们就可以在专家视图里通过添加相关的对象方法来对该对象进行操作。我们可以通过引用层次型对象库里的对象描述(Object Descrīption)来添加相应的方法。
*xH-~/[ [0
v3f,yTXT0因为QTP对象库中的每个对象都具有唯一名称,所以在引用时对象名是必须需要指定的。然后在测试运行期间,QTP在对象库中根据这个对象的名称和父对象来查找对象,并使用为这个测试对象存储的测试对象描述,在网站或应用程序中标识该对象。
q?[1YV!oG0
@]vh"f6W0例如我们用QTP录制Yahoo Mail登录情况时我们需要输入用户名,于是在录制时我们就会录下一个WebEdit对象,它的缺省逻辑名为“login”,该编辑字段位于名为“Yahoo! Mail - The best” 的页面上,并且该页面在浏览器中使用名称Yahoo!进行录制。
h0bg's vlQ051Testing软件测试网`4wc;I.b1W,Nv
那么如果我们想要应用该对象,就可以在专家视图输入以下信息:
*h F;WjS C4HI051Testing软件测试网+j~3Wd:Nma$s)]
Browser("Yahoo!").Page("Yahoo! Mail - The best").WebEdit("login").Set “xxx”
XR[w-k4TtmUCm0
%P4JP`,?Sd}v F0或者我们也可以调用一些方法,获取改对象在运行时的对象名,如:
:H4i ^6l1G(t,g Z)M0
~ @J#T/L Zb1Su$Y0Browser("Yahoo!").Page("Yahoo! Mail - The best").WebEdit("login").GetROProperty(“name”)
c!N[T`:@%v051Testing软件测试网3^1X4B1t5?k.x
然而,我们可以发觉到,上面的例子在处理对象时,对象已经存在于对象库里,因此我们可以应用这个对象的逻辑名。实际使用中,情况往往并非如此简单,我们经常会遇到很多在页面上动态产生的对象,换而言之,对象库里没有这些对象,我们也无从引用。因此我们必须采用其他的技术来完成这类操作,这也就是我们需要讲解的Descrīptive Programming。51Testing软件测试网OK'bz{4AI^)|
51Testing软件测试网T USN3l
为了满足上面提到的动态对象的处理问题,QTP允许用户通过将对象属性编码到测试脚本里来动态识别对象,这就是我们通常意义下称为的Descrīptive Programming。通过这种方式,我们可以指示QTP不通过引用对象库和对象名来对实际对象进行操作。具体操作中,我们只需要为QTP提供对象的一组属性和值,这样QTP就可以来识别相应的对象并对其进行操作。这相当于,告诉QTP要识别对象的一些关键特征,根据这些特征QTP就可以一一匹配然后识别出来这个对象。
q4? Bl$dy5Cz8y051Testing软件测试网G"MlUk6B
而且,更为重要的是,通过这种Descrīptive Programming的方式,还可以让QTP识别具有某些相同属性的对象。我们先来举个例子来看一下:我们假设当前的Windows系统中打开了若干的Yahoo主页面(多于一个),现在我们要关闭所有的正在浏览Yahoo主页面的浏览器。51Testing软件测试网4nH~)gx$EV
-Aq9j sh7a2l#n(TV0对于上面那个例子来说,我们先看一个简单一点的情况,假设只有且仅有一个Yahoo主页面:那么我们可以用下面的方法来
;_vG|3?#kdKu0
cW Bg(~t]9x0Window("Text:=Yahoo! - Microsoft Internet Explorer").Close51Testing软件测试网GM+`"MO/Q8HN
51Testing软件测试网.A+I!o~ x
我们可以看到语句里我们要查找的对象是Window窗口标题为“Yahoo! - Microsoft Internet Explorer”,然后把它关闭,具体的语法说明我们稍后为解释。但是上面的语句仅仅适合前面提到的条件“只有且仅有一个Yahoo主页面”,如果有多个同样的窗口就会出错,原因是通过语句可以匹配到多个对象,而QTP不知道应该对哪个对象进行关闭动作。我们需要进一步的缩小匹配范围:
/h#POE _Y yLhl0
2vu$?-Tf(e3e:|uy#]0Dim i
"M;h+m:{,[{,n051Testing软件测试网S2\}gs;^z^z
i = 051Testing软件测试网.Ve#to CG@4u}~
51Testing软件测试网_c6iCjEt(O q
while (Window("Text:="Yahoo!" - Microsoft Internet Explorer", "index:="&i).exist)
/W^&w4o$d[J"X E0
!`Osr9Y+NG0Window("Text:=Yahoo! - Microsoft Internet Explorer", "index:="&i).close
0m]7HA3c(V051Testing软件测试网&O*[9rCB)h*E
i = i +151Testing软件测试网Kj0hu2nGB hU-KJr6x
51Testing软件测试网,L [YF,j0z}
wend
^3U N%kZa._n#p0
'H?)sIo:s7d0这里我们可以看到,对于具有相同属性的对象,我们可以通过index参数来对其进行区别,第一个对象为index=0,第二个为index=1等等,依次类推。当然我们还可以通过CreationTime和Location参数来定位对象,这里就不详细叙述了。51Testing软件测试网xDW+e'KL
-E+Vo.AO~1S0通过上面的例子,我们对Descrīptive Programming有一个基本了解了,下面我们详细讲解一下Descrīptive Programming:在具体实现中,我们有两种类型的Descrīptive Programming方法。可以列出直接在测试语句中描述对象的属性和值的集合;或者向Descrīption 对象中添加属性和值的集合,然后在语句中输入Descrīption 对象的名称。下面我们分别举例介绍。51Testing软件测试网iNg s%pO
nj%QtD(C0
? IE!g%u8H g/W0
.E6b?h5a;b1j02、直接在语句中输入编程描述
Y} }2zk7^051Testing软件测试网#JmY+Rxe
通过多个指定描述对象的property:=value对,可以直接在语句中描述对象,这是最直接有效的方法。51Testing软件测试网X_:wct,}I
51Testing软件测试网+Gg5`-y4E/d5RpnN6fh
常规语法为:51Testing软件测试网~3M4q"HU
irqgh Ku01、descrīptive programming概述
c3M2i LT%J1@mI.gz051Testing软件测试网%VF8D5u/b8f
通常情况下,当在录制一个操作时,QTP会将被操作对象加入到对象库里(Object Repository)。一旦对象存在于对象库里,我们就可以在专家视图里通过添加相关的对象方法来对该对象进行操作。我们可以通过引用层次型对象库里的对象描述(Object Descrīption)来添加相应的方法。
*xH-~/[ [0
v3f,yTXT0因为QTP对象库中的每个对象都具有唯一名称,所以在引用时对象名是必须需要指定的。然后在测试运行期间,QTP在对象库中根据这个对象的名称和父对象来查找对象,并使用为这个测试对象存储的测试对象描述,在网站或应用程序中标识该对象。
q?[1YV!oG0
@]vh"f6W0例如我们用QTP录制Yahoo Mail登录情况时我们需要输入用户名,于是在录制时我们就会录下一个WebEdit对象,它的缺省逻辑名为“login”,该编辑字段位于名为“Yahoo! Mail - The best” 的页面上,并且该页面在浏览器中使用名称Yahoo!进行录制。
h0bg's vlQ051Testing软件测试网`4wc;I.b1W,Nv
那么如果我们想要应用该对象,就可以在专家视图输入以下信息:
*h F;WjS C4HI051Testing软件测试网+j~3Wd:Nma$s)]
Browser("Yahoo!").Page("Yahoo! Mail - The best").WebEdit("login").Set “xxx”
XR[w-k4TtmUCm0
%P4JP`,?Sd}v F0或者我们也可以调用一些方法,获取改对象在运行时的对象名,如:
:H4i ^6l1G(t,g Z)M0
~ @J#T/L Zb1Su$Y0Browser("Yahoo!").Page("Yahoo! Mail - The best").WebEdit("login").GetROProperty(“name”)
c!N[T`:@%v051Testing软件测试网3^1X4B1t5?k.x
然而,我们可以发觉到,上面的例子在处理对象时,对象已经存在于对象库里,因此我们可以应用这个对象的逻辑名。实际使用中,情况往往并非如此简单,我们经常会遇到很多在页面上动态产生的对象,换而言之,对象库里没有这些对象,我们也无从引用。因此我们必须采用其他的技术来完成这类操作,这也就是我们需要讲解的Descrīptive Programming。51Testing软件测试网OK'bz{4AI^)|
51Testing软件测试网T USN3l
为了满足上面提到的动态对象的处理问题,QTP允许用户通过将对象属性编码到测试脚本里来动态识别对象,这就是我们通常意义下称为的Descrīptive Programming。通过这种方式,我们可以指示QTP不通过引用对象库和对象名来对实际对象进行操作。具体操作中,我们只需要为QTP提供对象的一组属性和值,这样QTP就可以来识别相应的对象并对其进行操作。这相当于,告诉QTP要识别对象的一些关键特征,根据这些特征QTP就可以一一匹配然后识别出来这个对象。
q4? Bl$dy5Cz8y051Testing软件测试网G"MlUk6B
而且,更为重要的是,通过这种Descrīptive Programming的方式,还可以让QTP识别具有某些相同属性的对象。我们先来举个例子来看一下:我们假设当前的Windows系统中打开了若干的Yahoo主页面(多于一个),现在我们要关闭所有的正在浏览Yahoo主页面的浏览器。51Testing软件测试网4nH~)gx$EV
-Aq9j sh7a2l#n(TV0对于上面那个例子来说,我们先看一个简单一点的情况,假设只有且仅有一个Yahoo主页面:那么我们可以用下面的方法来
;_vG|3?#kdKu0
cW Bg(~t]9x0Window("Text:=Yahoo! - Microsoft Internet Explorer").Close51Testing软件测试网GM+`"MO/Q8HN
51Testing软件测试网.A+I!o~ x
我们可以看到语句里我们要查找的对象是Window窗口标题为“Yahoo! - Microsoft Internet Explorer”,然后把它关闭,具体的语法说明我们稍后为解释。但是上面的语句仅仅适合前面提到的条件“只有且仅有一个Yahoo主页面”,如果有多个同样的窗口就会出错,原因是通过语句可以匹配到多个对象,而QTP不知道应该对哪个对象进行关闭动作。我们需要进一步的缩小匹配范围:
/h#POE _Y yLhl0
2vu$?-Tf(e3e:|uy#]0Dim i
"M;h+m:{,[{,n051Testing软件测试网S2\}gs;^z^z
i = 051Testing软件测试网.Ve#to CG@4u}~
51Testing软件测试网_c6iCjEt(O q
while (Window("Text:="Yahoo!" - Microsoft Internet Explorer", "index:="&i).exist)
/W^&w4o$d[J"X E0
!`Osr9Y+NG0Window("Text:=Yahoo! - Microsoft Internet Explorer", "index:="&i).close
0m]7HA3c(V051Testing软件测试网&O*[9rCB)h*E
i = i +151Testing软件测试网Kj0hu2nGB hU-KJr6x
51Testing软件测试网,L [YF,j0z}
wend
^3U N%kZa._n#p0
'H?)sIo:s7d0这里我们可以看到,对于具有相同属性的对象,我们可以通过index参数来对其进行区别,第一个对象为index=0,第二个为index=1等等,依次类推。当然我们还可以通过CreationTime和Location参数来定位对象,这里就不详细叙述了。51Testing软件测试网xDW+e'KL
-E+Vo.AO~1S0通过上面的例子,我们对Descrīptive Programming有一个基本了解了,下面我们详细讲解一下Descrīptive Programming:在具体实现中,我们有两种类型的Descrīptive Programming方法。可以列出直接在测试语句中描述对象的属性和值的集合;或者向Descrīption 对象中添加属性和值的集合,然后在语句中输入Descrīption 对象的名称。下面我们分别举例介绍。51Testing软件测试网iNg s%pO
nj%QtD(C0
? IE!g%u8H g/W0
.E6b?h5a;b1j02、直接在语句中输入编程描述
Y} }2zk7^051Testing软件测试网#JmY+Rxe
通过多个指定描述对象的property:=value对,可以直接在语句中描述对象,这是最直接有效的方法。51Testing软件测试网X_:wct,}I
51Testing软件测试网+Gg5`-y4E/d5RpnN6fh
常规语法为:51Testing软件测试网~3M4q"HU