QTP描述性编程二

来源:百度文库 编辑:神马文学网 时间:2024/04/28 04:14:30

在编程性描述中使用Descrīption对象(Using Descrīption Objects for Programmatic Descrīptions)

你可以使用Descrīption对象,来返回一个Properties collection对象,该集合对象包括一系列Property对象。每个Property对象由Property name及value组成。

然后在语句中用Properties collection对象替代被测对象的名称。

注意:默认情况下,所有被添加到Properties collection中的Property对象的值被当成正则表达式对待。因此,当Property Value中包含正则表达式的特殊字符(如*,?,+)时,要在特殊字符前使用“\”符号。

你也可以在Properties Collection中,将RegularExpression属性值设置为False,这样即使在Property Value中用到了正则表达式的特殊字符,也会被视为普通字符。更多信息参考QuickTest Professional Object Model Reference的Utility部分。

要创建Properties collection,使用Dexcription Create语句,语法如下:

SetMyDescrīption= Descrīption.Create()

一旦创建了Properties对象(例如上例中的Mydescrīption),在运行过程中,你就可以使用语句向Properties对象添加、编辑、移除或获取属性及属性值。这使你在运行过程中可以动态的决定:在对象描述中使用哪些属性、使用多少属性。

当你将一系列的属性及属性值加入到Properties collection中以后,你就可以在脚本语句中用Properties对象替代被测对象的名称。

例如,有如下语句:

Window("Error").WinButton("text:=OK", "width:=50").Click

通过改造,成为:

Set MyDescrīption = Descrīption.Create()
MyDescrīption("text").Value = "OK"
MyDescrīption("width").Value = 50
Window("Error").WinButton(MyDescrīption).Click

注:当为一个ActiveX对象创建编程性描述时,如果该对象的run-time对象是windowless的(即没有相应的window handel),就必须在属性描述中将它的windowless property设置为Ture。

例如:

Set ButDesc = Descrīption.Create
ButDesc("ProgId").Value = "Forms.CommandButton.1"
ButDesc("Caption").Value = "OK"
ButDesc("Windowless").Value = True
Window("Form1").AcxButton(ButDesc).Click

获取Child Objects(Retrieving Child Objects)

通过ChildObjects方法,可以获取指定对象下的所有子对象,或只获取那些符合编程性描述的子对象。为了获取某对象的子对象的子集,首先需创建一个descrīption对象,然后在该对象的descrīptions collection中添加一系列的属性及属性值,这些属性及属性值必须符合子集的要求。

注意:你必须使用Descrīption对象来为ChildObjects描述参数 创建编程性描述,不能使用property:=value语法直接将编程性描述添加到参数中。

一旦你已经在descrīption对象中“built”了描述,就可以使用下面的语法来获取与描述匹配的子对象:

SetMySubSet=TestObject.ChildObjects(MyDescrīption)

例如:下面的语句使QTP选中网页中的所有选择框:

Set MyDescrīption = Descrīption.Create()

MyDescrīption("html tag").Value = "INPUT"

MyDescrīption("type").Value = "checkbox"

Set Checkboxes = Browser("Itinerary").Page("Itinerary").ChildObjects(MyDescrīption)

NoOfChildObjs = Checkboxes.Count

For Counter=0 to NoOfChildObjs-1

Checkboxes(Counter).Set "ON"

Next

For more information about theChildObjectsmethod, refer to theQuickTest Professional Object Model Reference.

WebElement对象使用编程性描述(Using Programmatic Descrīptions for the WebElement Object)

如果没有录制WebElement对象,也可以使用编程性描述,来对Web网站中的任何一个WebElement对象进行操作。

例如:

Browser("Mercury Tours").Page("Mercury Tours").WebElement("Name:=UserName", "Index:=0").Click

set WebObjDesc = Descrīption.Create()

WebObjDesc("Name").Value = "UserName"

WebObjDesc("Index").Value = "0"

Browser("Mercury Tours").Page("Mercury Tours").WebElement(WebObjDesc).Click

QuickTest clicks on the first Web object in the Mercury Tours page with the nameUserName.

关于WebElement对象的更多信息,参考QuickTest Professional Object Model Reference

在编程性描述中使用Index属性(Using the Index Property in Programmatic Descrīptions)

在需要唯一识别一个对象时,index属性有时候可能非常有用。index属性是对象在源代码中出现的顺序,第1次出现时,index值为0。

Index属性是object-specific的。因此,当你用index属性值“3”来描述一个WebEdit对象时,QTP会在被测程序的当前页面中查找第4个WebEdit对象。

如果你使用index属性值3来描述一个WebElement对象时,QTP会在被测程序的当前页面中查找第4个Web对象。

例如,当前页面中存在下面的对象:

  • 一个名为Qpple的Image对象
  • 一个名为UserName的Image对象
  • 一个名为UserName的WebEdit对象
  • 一个名为Password的Image对象
  • 一个名为Password的WebEdit对象

下面的语句中指的是列表中的第3个对象,因为它要求指向的是第1个名为UserName的WebEdit对象。

WebEdit("Name:=UserName", "Index:=0")

下面的语句中指的是列表中的第2个对象,因为它要求指向的是第1个名为UserName的WebElement对象。

WebElement("Name:=UserName", "Index:=0")

注:如果当前只有一个对象,使用index=0将无法查找到对象,因此就不能在对象描述中使用index属性。