引言:
- QTP的描述性编程能够摆脱测试对象库德限制,编制出更为复杂、适应力更强的测试脚本。
- 录制方式的测试脚本创建是最简单和快捷的测试脚本开发方式,但是,它带来的问题也是明显的,就是依赖测试对象库,测试脚本中使用的对象都必须是测试对象库中的对象。
什么时候使用描述性编程
- 在测试过程中,有些界面元素是动态出现或动态变化的,在录制的时候并没有添加到对象库。
描述性编程的运行原理
- 用描述性编程编写的测试脚本在运行时,QTP会使用测试脚本中给出的对象描述来查找对象,查找的位置不是对象库,而是与测试程序运行的QTP为其创建的临时对象版本进行匹配。
描述性编程的使用方法
- 一种是直接描述的方法
TestObject("PropertyName1:=PropertyValue1","...")
- 另一种是使用Description对象的方法
源码:
Browser("百度一下,你就知道").Page("百度一下,你就知道").Link("新 闻").Click
If Browser("百度一下,你就知道").Page("百度新闻搜索——全球最大的中文新闻平台").Exist Then
reporter.ReportEvent micPass,"新闻链接有效性测试","新闻链接有效"
else
reporter.ReportEvent micFail,"新闻链接有效性测试","新闻链接无效"
End If
Browser("百度一下,你就知道").Page("百度新闻搜索——全球最大的中文新闻平台").Sync
Browser("百度一下,你就知道").CloseAllTabs
用描述性编程方法1编写如下:
Browser("百度一下,你就知道").Page("百度一下,你就知道").Link("text:=新 闻").Click
If Browser("百度一下,你就知道").Page("百度新闻搜索——全球最大的中文新闻平台").Exist Then
reporter.ReportEvent micPass,"新闻链接有效性测试","新闻链接有效"
else
reporter.ReportEvent micFail,"新闻链接有效性测试","新闻链接无效"
End If
Browser("百度一下,你就知道").Page("百度新闻搜索——全球最大的中文新闻平台").Sync
Browser("百度一下,你就知道").CloseAllTabs
注意:此时对象库中的“新闻”对象已删除。
用描述性编程方法2编写如下:
Set news=Description.Create
news("text").value="新 闻"
news("html tag").value="A"
Browser("百度一下,你就知道").Page("百度一下,你就知道").Link(news).Click
If Browser("百度一下,你就知道").Page("百度新闻搜索——全球最大的中文新闻平台").Exist Then
reporter.ReportEvent micPass,"新闻链接有效性测试","新闻链接有效"
else
reporter.ReportEvent micFail,"新闻链接有效性测试","新闻链接无效"
End If
Browser("百度一下,你就知道").Page("百度新闻搜索——全球最大的中文新闻平台").Sync
Browser("百度一下,你就知道").CloseAllTabs
描述性编程的特点
- 如果在测试对象层次结构的某一点开始使用了描述性编程,则该测试对象层次结构下的后续测试对象都要使用描述性编程的方式来描述对象。(一般称为“后续强迫性”)
如图: