1. 使用描述性编程的时机

录制方式的测试脚本创建是最简单和快捷的测试脚本开发方式,但是它太依赖测试对象库,有时会有一些问题。比如相同的元素,部分属性(比如名称、标题等)是动态产生的,那么在回放脚本中会导致找不到对象。如果用描述性编程编写的测试脚本,QTP会使用测试脚本中给出的对象描述来查找对象,查找的不是对象库,而是与测试程序运行时QTP为其创建的临时测试对象版本进行匹配,例如:

Browser("title:=百度一下*")

这里通过正则表达式来匹配Browser的标题,即使窗口是动态生成的,但标题都是以“百度一下”开头,所以可以用这个方式匹配所有标题以“百度一下”为开头的Browser对象。也可以组合几个属性来标识控件,例如:

Browser("title:=百度一下*", "index:=0")


2. 描述性编程的使用方法

这种直接描述的方式的一般使用格式如下:

TestObject("ProName1:=ProValue1", "...", "ProName2:=ProValue2")

通过直接指定测试对象的一个或多个PropertyName来描述控件,需要注意的是,属性和属性值之间要用":="分隔。

QTP还提供了一个Description对象,用于返回对象包含的属性,例如:

Set MyDescription = Description.Create();
MyDescription("title").Value="百度一下*"
MyDescription("index").Value=0
Browser(MyDescription)

另外还可以使用ChildObjects方法来获取某个父对象下面的所有子对象,例如:

Set childObjects = Browser("title:=百度一下*", "index:=0").ChildObjects()
msgBox childObjects.Count


3. 用编程方式创建检查点

通过编程方式创建检查点,对于不能使用普通检查点对象的情况来说会非常有用。比如需要检查的对象属性没有存储在对象库中,仍然可以自己创建检查点,把检查的结果写入测试结果中。

GetROProperty用来获取控件动态属性,例如:

If Browser("title:=百度一下*", "index:=0").GetROProperty("openurl") = "about:blank" Then
  Reporter.ReportEvent micPass, "CheckBrowser = PASS ", "测试通过"
End If