动态识别对象,不通过对象库中的对象来识别动态生成的对象。只需要为QTP提供对象的一组属性和值,可以唯一表示对象的关键特征。对象属性特征相同的可以通过INDEX来区分,自定义分类脚本。需要注意的是,描述性编程具有后续强迫性,也就是说某一个对象使用了描述性编程,那么它之后的子对象或者从属对象必须要用描述性编程了。描述性编程的格式有以下两种,如下所示:
(1)Testobject(“”,“”,…),每一对“ ”里面封装的是 属性:=值 的形式,不同的属性描述组合用逗号隔开
比如这是一段录制的登陆代码:
Dialog("Login").WinEdit("Agent Name:").Set "Holly"
Dialog("Login").WinEdit("Password:").SetSecure "4a2e35fdad1551c3aa3fa4251fa6297ac892cd98"
Dialog("Login").WinButton("OK").Click
采用描述性编程修改后变成了这样:
SystemUtil.Run Environment.Value("ProductDir")& "\samples\flight\app\flight4a.exe"
Dialog("Regexpwndtitle:=Login").WinEdit("Attached text:=Agent Name:").Set "Holly"
Dialog("Regexpwndtitle:=Login").WinEdit("Attached text:=Password:").Set "Mercury"
Dialog("Regexpwndtitle:=Login").WinButton("Class Name:=WinButton", "text:=Cancel").Click
描述性编程,按照我的理解,说白了,就是属性—值的集合,这些集合就是能够唯一的确定运行时对象的键值对,当这些键值对如果不足以唯一确定RO时,当然是会报错的哦,这在QTP对象识别原理一张讲的很清楚了,这里只是知识迁移,拿来加以理解,当对象无法识别的时候,描述性编程也就决绝办法之一,这也在如何解决对象不识别一章有讲解。
(2)Set MyDescription =Description.Create()
MyDescription(“property”).value= “ ”
把上面的代码换成这种方式的话,会变成如下情况。新建一个test,然后把下面的代码粘贴上,看是不是不用录制就可以运行了,哈哈,我边写边调试过了,管用。这对于敏捷开发思想里的测试先行原则无疑是提供了技术支持呀。
SystemUtil.Run "C:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\flight4a.exe"
Set desDialog =Description.Create()
desDialog("text").value="Login"
Set desEditName =Description.Create()
desEditName("attached text").value="Agent Name:"
Set desEditPwd =Description.Create()
desEditPwd("attached text").value="Password:"
Set desButton =Description.Create()
desButton("text").value="OK"
Set desWindow =Description.Create()
desWindow("regexpwndtitle").value="Flight Reservation"
desWindow("regexpwndclass").value="Afx:"
Dialog(desDialog).WinEdit(desEditName).set "Holly"
Dialog(desDialog).WinEdit(desEditPwd).set "mercury"
Dialog(desDialog).WinButton(desButton).click
Window(desWindow).Close