`

QTP中Description对象使用

阅读更多

描述性编程(descriptive programming)

1、descriptive programming概述

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

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

例如我们用QTP录制Yahoo Mail登录情况时我们需要输入用户名,于是在录制时我们就会录下一个WebEdit对象,它的缺省逻辑名为 “login”,该编辑字段位于名为“Yahoo! Mail - The best” 的页面上,并且该页面在浏览器中使用名称Yahoo!进行录制。

那么如果我们想要应用该对象,就可以在专家视图输入以下信息:

Browser("Yahoo!").Page("Yahoo! Mail - The best").WebEdit("login").Set “xxx”

或者我们也可以调用一些方法,获取改对象在运行时的对象名,如:

Browser("Yahoo!").Page("Yahoo! Mail - The best").WebEdit("login").GetROProperty(“name”)

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

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

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

对于上面那个例子来说,我们先看一个简单一点的情况,假设只有且仅有一个Yahoo主页面:那么我们可以用下面的方法来

Window("Text:=Yahoo! - Microsoft Internet Explorer").Close

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

Dim i

i = 0

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

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

i = i +1

wend

这里我们可以看到,对于具有相同属性的对象,我们可以通过index参数来对其进行区别,第一个对象为index=0,第二个为index=1等等,依次类推。当然我们还可以通过CreationTime和Location参数来定位对象,这里就不详细叙述了。

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



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

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

常规语法为:

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

TestObject - 测试对象的类。

PropertyName:=PropertyValue - 测试对象的属性及其值。各个property:="value" 对之间应用逗号和引号分开。

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

Browser("Mercury Tours").Page("Mercury Tours").WebEdit("Name:="Author"", "Index:="3"").Set "Mark Twain"

我们也可以从从描述中的特定位置(从Page 对象描述开始)开始使用Descriptive Programming。

Browser("Mercury Tours").Page("Title:="Mercury" Tours").WebEdit("Name:="Author"", "Index:="3"").Set "jojo"

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

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

Window("Text:=HyperSna").WinButton("Caption:=日期").Click

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

Window("Text:=HyperSna").WinButton("Caption:=确定").Click

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

Set WinHyper = Window("Text:="HyperSna"")

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

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

WinHyper.WinButton("Caption:=确定").Click

如果使用了VBScript里面的With语句,还可以简化为以下代码:

With Window("Text:="HyperSna"")

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

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

.WinButton("Caption:=确定").Click

End With

下面我们来看一个更为详细的例子,在QTP产品缺省安装里面自带了一个网上订机票的示例称为Mercury Tour,我们看一下在订票过程中何时需要用Descriptive Programming。

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







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

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

Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebEdit("passLast0").Set "Wang"

显然WebEdit("passFirst0")和WebEdit("passLast0")是录制时产生的对象并存放到对象库里的。通过对象库,我们可以看到对象的属性如下







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

counter = 0

For i = 0 to (intPassNum)

Browser("Find a Flight:").Page("Book a Flight:").WebEdit("name:="passFirst""&i).Set "Michael"

Browser("Find a Flight:").Page("Book a Flight:").WebEdit("name:="passLast""&i).Set "Wang"

counter = counter + 1

Next



3、使用description对象

使用Description 对象可以返回包含一组Property 对象的Properties 集合对象。Property 对象由属性名和值组成。然后,可以在语句中指定用返回的Properties 集合代替对象名。(每个property 对象都包含一个属性名和值)。

要创建Properties 集合,可以使用以下语法输入Description.Create 语句:

Set MyDescription = Description.Create()

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

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

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

Window("Error").WinButton("text:=OK", "index:="1"").Click

我们可以通过Description对象来实现同样的功能,参加下面的代码:

Set MyDescription = Description.Create()

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

MyDescription("index").Value = 1

Window("Error").WinButton(MyDescription).Click

Set MyDescription = Nothing

分享到:
评论

相关推荐

    QTP虚拟对象的使用

    在QTP中,虚拟对象的使用是一个重要的特性,它允许测试工程师在面对无法识别或不稳定的对象时,能够创建自定义的对象模型,以确保测试脚本的稳定性和准确性。 当QTP在录制脚本过程中遇到对象不能被正确识别的情况,...

    QTP之Description秒用

    - **使用Description对象**:这种方式通常用于告诉QTP:“我现在有某个父控件对象,请帮我查找所有子控件中符合特定条件的那些。”例如,如果你知道所有要操作的`Edit`控件都位于某个窗体内,你可以使用`Description...

    QTP

    【QTP常用技巧展示】:在QTP测试过程中,有许多提高效率的技巧,如使用`Sync`确保对象就绪再进行操作,使用`Smart identification`优化对象识别,以及利用`Test Run Settings`定制测试运行参数等。 【QTP对象识别...

    软件测试工具QTP中的Description对象详解

    MacBook对象软件测试工具QTP中的Description对象详解QTP是MercuryQuickTest企业级自动化测试工具!目前已经被惠普收购,正式名字为HPQuickTestProfessionalsoftware,最新的版本为HPQuickTestProfessional10.0....

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

    当你可以在被测应用程序中看到某个对象,但在执行测试脚本时却出现了此错误信息,这意味着QTP对象仓库中的对象描述与实际应用中对象的描述之间存在不匹配之处。为了解决这一问题,我们首先需要找出这些描述之间的...

    第15篇-QTP对象管理与维护1

    在QTP中,对象的识别基于其特有的“对象描述”(Object Description)。对象描述由一系列的属性和值组成,例如控件类型、名称、位置、大小等。当QTP运行时,它会根据这些属性来匹配并操作相应的对象。因此,理解并...

    QTP描述性编程简介

    - **ChildObjects方法**:可以获取父对象的所有子对象,或者使用Description对象筛选特定子对象。 **用编程的方式创建检查点** QTP允许通过编程方式创建检查点,例如使用`GetRPProp`函数来检查对象的属性值。这有...

    QTP描述性编程

    - Description方式(Description Programming):这种方式是在测试语句中直接列出所描述对象的属性及属性值集合,或者先向Description对象中添加属性及属性值的集合,然后在后续测试语句中输入Description对象的名称...

    QTP9.0常用方法及实例

    本知识点将深入探讨在QTP9.0中如何进行Web页面对象的操作,包括获取对象属性以及通过专家视图修改对象属性值。 一、获取Web页面中对象属性 1. **对象识别**:在QTP中,首先需要正确识别Web页面上的对象。通过...

    QTP中使用描述性语言编程

    ### QTP中使用描述性语言编程 #### 一、引言与背景介绍 在软件测试领域,自动化测试工具如QTP(QuickTest Professional)扮演着举足轻重的角色。QTP是一款广泛应用于功能回归测试的工具,它允许用户创建自动化测试...

    QTP描述性编程.

    4. **使用Description对象** - `Description`对象是QTP提供的一种用于描述对象属性的机制。通过设置多个属性值,可以更精确地定位目标对象。 ```vb Description desc = new Description desc.Add("Class", "Edit...

    怎么让vbs在qtp中运行

    - **使用QTP的文件导入功能**:通过菜单栏中的“文件”>“导入”,选择VBS脚本文件进行导入。 - **注意**:如果使用的是外部VBS脚本文件,需要确保这些文件的路径正确无误,并且QTP能够访问它们。 #### 6. **调试...

    vb api to qtp api

    QTP的对象模型包括Test、Action、Description、Resource等主要对象,每个对象都有相应的属性和方法。例如,Test对象可以用来管理整个测试,Action对象则代表测试中的一个独立操作步骤。 要将VB与QTP API连接起来,...

    QTP常见问题

    在使用QTP进行自动化测试时,经常会遇到“Cannot identify object”的错误提示,这通常意味着QTP无法找到测试脚本中指定的对象。 ##### 1.1 去识别问题:Identifying Test Object Description Problems 当出现...

    QTP脚本录制回放

    2. **对象识别**:QTP使用对象库来识别和操作应用程序中的对象。录制过程中,QTP会捕获用户的交互,并将其转换为对象属性和方法。理解对象的属性和识别规则是使用QTP的关键。 3. **脚本编辑**:录制后的脚本通常...

    qtp安装和调试方法

    3. **对象识别与关联**:在调试过程中,确保QTP能正确识别并匹配应用程序的对象是关键。如果对象识别错误,可能导致脚本执行失败。可以使用Object Spy工具检查对象属性。 4. **使用调试器**:QTP内置了强大的调试...

    在QTP中使用描述性编程.txt

    ### 在QTP中使用描述性编程 #### 一、描述性编程概述 描述性编程(Descriptive Programming,简称DP)是QTP(Quick Test Professional,现称为UFT,即Unified Functional Testing)提供的一种灵活的对象识别机制,...

    QTP11操作手册整理.rar

    1. **对象与对象库**:QTP通过对象识别技术,自动识别应用程序中的对象,并存储在对象库中。通过对象库,我们可以对对象进行操作。 2. **动作**:动作是测试脚本的基本单位,包含一系列操作步骤。可以将相同操作...

    qtp编程,qtp编程

    在传统的QTP脚本中,对象是通过对象库中的属性来识别的。而在描述性编程中,测试者可以直接在脚本中定义对象的属性,增强了脚本的可读性和维护性。 例如: ```vbscript Dim objButton Set objButton = Description....

    QTP的基础设置

    此外,理解QTP内置的函数和对象模型,如`Action`、`Test`、`Description`、`Browser`和`Page`等,对于编写高效测试脚本至关重要。 ### 五、数据驱动测试 数据驱动测试允许我们使用外部数据源(如Excel表格)驱动...

Global site tag (gtag.js) - Google Analytics