描述性编程(descriptive programming) 1、descriptive programming概述 通 常情况下,当在录制一个操作时,QT
- 博客分类:
- QTP自动化测试
描述性编程(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
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访问DOM的方法
2011-04-19 11:34 1384QTP支持直接访问DOM(Document Object Mo ... -
QTP随笔集
2011-04-12 14:14 1143QTP随笔集 问题一:WinObject回放时无法识别 因 ... -
QTP对象识别机制
2011-04-12 14:12 1686QTP对象识别机制 (转 ... -
透析QTP自动化测试框架SAFFRON
2011-03-25 17:29 12481、为什么要使用框架? 框架是一组自动化测试的规范、测试脚本 ... -
QTP对象参数化的几种方法
2011-03-25 17:07 1799以前查看过对象参数化的资料说SetTOProperty 方法可 ... -
自动化框架构思
2011-03-24 17:43 909★通过QTP现有的功能管理脚本,对象和数据的缺点 1.脚本文件 ... -
QTP常用VB函数
2011-03-24 17:42 1241Left 函数 返回 Variant (String),其中包 ... -
The HTML DOM defines a standard way for accessing and manipulating HTML document
2011-03-24 17:42 665The HTML DOM defines a standard ... -
QTP 常用函数二
2011-03-24 17:41 1477'****************************** ... -
QTP常用函数一
2011-03-24 17:41 884''''''''''''''''''''''''''''''' ... -
QTP DataTable
2011-03-24 17:40 1009DataTable是QTP整合的一种创建数据驱动,参数化测试的 ... -
QTP对象库
2011-03-24 17:40 1362Note1:对象库-Object Repository 所谓对 ... -
QTP插件破解
2011-03-24 17:39 984QTP插件破解方法 第一步:完成安装.net插件,这是,插件界 ... -
QTP运行过程中弹出无法识别对象和对象不唯一的解决方法
2011-03-24 17:39 2361问题一:Cannot Identify Obj ... -
QTP对象识别技术
2011-03-24 17:38 851'****************************** ... -
'******************************************************************************
2011-03-24 17:38 706'****************************** ...
相关推荐
例如,当需要操作一个未命名或动态变化的文本框时,可以使用描述性编程指定该文本框的位置、大小或其他唯一属性,而不是硬编码其名称。 以下是一个简单的描述性编程示例: ```vb Browser("Title:=51Testing软件...
在QTP中,描述性编程(Descriptive Programming)是一个重要的概念,它为自动化测试提供了一种灵活的、不依赖于对象库的方式来定位和操作应用程序中的对象。 描述性编程的核心思想是将需要识别的对象的属性直接写入...
1. **描述性编程**:描述性编程允许测试人员在脚本中直接定义对象的属性,而无需依赖对象库。这种技术特别适用于当对象库无法满足特定需求或对象动态变化时,如参数化的对象属性。 2. **函数应用**:QTP提供了多个...
然而,QTP还提供了一种更为灵活的方法——描述性编程(Descriptive Programming),允许测试者直接在脚本中定义对象属性,而非依赖于对象库,从而增强了脚本的适应性和灵活性。 #### 二、QTP工作原理探究 QTP的...
描述性编程(Descriptive Programming,简称DP)是QTP(Quick Test Professional,现称为UFT,即Unified Functional Testing)提供的一种灵活的对象识别机制,使得测试脚本能更加稳定地运行。描述性编程允许用户指定...
描述性统计分析Descriptive Statistics 菜单详解 描述性统计分析是统计分析的第一步,对于正确的统计推断至关重要。SPSS 提供了多种模块来完成描述性分析,其中 Descriptive Statistics 菜单中有四个常用的过程:...
SPSS的许多模块均可完成描述性分析,但专门为该目的而设计的几个模块则集中在Descriptive Statistics菜单中,最常用的是列在最前面的四个过程: Frequencies过程、Descriptives过程、Explore过程和Crosstabs过程。...
描述性编程(Descriptive Programming)是QTP的一种编程方式,它允许测试者用自然语言式的语句来定义对象的属性,以便更准确地识别和操作对象。在QTP中,我们可以通过设置对象的属性如Name、Classname、Caption等来...
QTP使用描述性编程(Descriptive Programming)作为其核心技术之一,允许测试人员在不依赖对象库的情况下编写测试脚本,增加了脚本的可移植性和可读性。 描述性编程允许测试者以一种详细的方式定义对象的属性,例如...
在探讨“主要的编程范式”这一主题时,我们需要首先理解编程范式的含义。编程范式是一种编程风格或者是一种编程方法,它定义了编写代码和解决问题的方式。不同的编程范式反映了不同的设计理念、语言特性和计算模型。...
标题:"Supervised Descriptive Pattern Mining"(监督式描述模式挖掘)揭示了数据挖掘领域中的一个重要研究方向,即在监督条件下通过算法识别和提取数据中的模式。监督式模式挖掘不同于无监督学习,它依赖于已有的...
当对象属性发生变化或者动态对象出现时,描述性编程(Descriptive Programming)可以提供更灵活的对象定位方式,允许直接指定对象的多个属性来精确识别。 总之,QTP作为一个强大的自动化测试工具,提供了多种录制...
Descriptive set theory.pdf
3. **关键词描述性编程(Descriptive Programming)**:QTP中的核心概念,它允许测试者通过对象的属性来描述和识别对象,如`Browser("name:=Yahoo!")`。即使对象库中没有该对象,也能通过属性值动态识别。 4. **...
当确定了一个大腿的角度时,如果踝关节与末端执行器断开连接,则踝关节的R轴将在与髋关节R轴平行的直线束中自由移动。此外,每个腿上的三点——髋关节点Di、膝关节点Ei和踝关节点Ci(i=1,2,3)对于逆向和直接运动学...
【descriptive writing】是一种写作方式,也被称为“展示性写作”,其主要目的是通过详细描绘人物、地点或事件,让读者仿佛亲历其境。这种写作形式不仅记录了作者的思想和感受,还分享了由这些印象引发的感官体验。 ...
JEDEC标准和出版物的内容涵盖了电子设备包装和_footprints的描述性命名系统,旨在提供一个统一的命名规则,以便于制造商和购买者之间的沟通和合作。该标准的制定和实施将有助于提高电子设备行业的整体水平,提高产品...