通常情况下,当在录制 一个操作时,QTP 会将被操作对象 加入到对象库里 (Object Repository)。一旦对象存在于对象库
里,我们就可以在专家视图 里通过添加相关的对象方法来对该对象进行操作。我们可以通过引用层次型对象库 里的对象描述
(Object Description)来添加相应的方法。
因为QTP 对象库 中的每个对象 都具有唯一名称 ,所以在引用时对象名是必须需要指定的 。然后在测试运行期间 ,QTP 在对象库
中根据这个对象的名称和父对象来查找对象 ,并使用为这个测试对象存储的测试对象描述 ,在网站或应用程序中标识该对象 。
然而,我们可以发觉到,在实际使用中,情况往往并非如此简单,我们经常会遇到很多在页面上动态产生的对象,
换而言之,对象库里没有这些对象,我们也无从引用 。因此我们必须采用其他的技术来完成这类操作,这也就是我们需要讲解的
Descriptive Programming 。
为了满足上面提到的动态对象的处理问题,QTP 允许用户通过将对象属性编码到测试脚本里来动态识别对象 ,这就是我们通常
意义下称为的Descriptive Programming。通过这种方式,我们可以指示QTP 不通过引用对象库和对象名来对实际对象进行操
作。
具体操作中,我们只需要为QTP 提供对象的一组属性和值 ,这样QTP 就可以来识别相应的对象并对其进行操作。这相当
于,告诉QTP 要识别对象的一些关键特征,根据这些特征QTP 就可以一一匹配然后识别出来这个对象。
而且,更为重要的是,通过这种Descriptive Programming 的方式,还可以让QTP 识别具有某些相同属性的对象 。我们先来举
个例子来看一下:
我们假设 当前的Windows 系统中打开了若干的Test主页面(多于一个) ,现在我们要关闭所有的正在浏览Test主页面的浏览器。
对于上面那个例子来说,我们先看一个简单一点的情况,假设只有且仅有一个Test主页面:那么我们可以用下面的方法来
Window("Text:=Test! - Microsoft Internet Explorer").Close
我们可以看到语句里我们要查找的对象是Window 窗口标题为“Test! - Microsoft Internet Explorer” ,然后把它关闭 ,
具体的语法说明我们稍后为解释。但是上面的语句仅仅适合前面提到的条件“只有且仅有一个Test主页面”,如果有多个同
样的窗口就会出错,原因是通过语句可以匹配到多个对象,而QTP 不知道应该对哪个对象进行关闭动作。我们需要进一步的缩
小匹配范围:
Dim i
i = 0
while (Window("Text:=Test! - Microsoft Internet Explorer", "index:="&i).exist)
Window("Text:=Test! - Microsoft Internet Explorer", "index:="&i).close
i = i +1
wend
这里我们可以看到,对于具有相同属性的对象,我们可以通过index 参数来对其进行区别 ,第一个对象为index=0,第二个为
index=1 等等,依次类推。当然我们还可以通过CreationTime 和Location 参数来定位对象,这里就不详细叙述了。
通过上面的例子,我们对Descriptive Programming 有一个基本的了解,希望对以后的 的学习有很好的帮助。