描述性编程(Descriptive Programming), 在QTP文档中又称Programmatic Descriptions,是QTP的一种运行时动态识别对象的的机制。在运行时通过代码中指定的对象属性来识别对象,这样不需要事先在respository中保存要识别的对象信息,如:
Dialog("text:=Login").WinEdit("attached text:=Agent Name:").Set "wheetle"
表示识别text内容为"Login"的对话框,再定位对话框中attached text为"Agent Name"的文本框,然后在文本框中输入"wheetle".
描述性编程有两种方式:静态编程描述(Static Programmatic Descriptions)和动态编程描述(Dynamic Programmatic Descriptions)。前者直接在一个VB语句中指定对象属性值,如上面的例子。后者创建Description对象然后把对象属性保存到Description对象中。前者的优点是代码简洁方便,后者的优点是代码可灵活应用,便于维护和修改。特别是对象的属性值可以被定义在外部数据文件,在运行时再载入,有利于代码的通用性。
以下代码使用静态编程描述来识别Flight的登录对话框,用动态编程描述来识别主窗口 (代码在Win7 64bits + QTP 11 下运行通过):
'登录对话框Dialog("Regexpwndtitle:=Login").WinEdit("attached text:=Agent Name:").Set "wheetle"
Dialog("Regexpwndtitle:=Login").WinEdit("attached text:=Agent Name:").Type micTab
Dialog("Regexpwndtitle:=Login").WinEdit("attached text:=Password:").SetSecure "50cfda13f88e1aff562c68b65791e88de04949ba"
Dialog("Regexpwndtitle:=Login").WinEdit("attached text:=Password:").Type micReturn
wait(5)'等待主窗口载入,该值可设为变量
Dim winRez '主窗口Flight Reservation对象
Set winRez = Description.Create() '创建一个Description对象,并绑定主窗口的类名和titlewinRez("Class Name").Value = "Window"
winRez("Regexpwndtitle").Value = "Flight Reservation"
'输入日期并选择地点'注意:日期输入框对QTP来说是陌生对象,所以事先要用对象映射把它映射为SingleLine Edit对象,见截图Window(winRez).WinEdit("attached text:=Date of Flight:" , "nativeclass:=MSMaskWndClass").Type "010113"
Window(winRez).WinEdit("attached text:=Date of Flight:" , "nativeclass:=MSMaskWndClass").Type micTab
Window(winRez).WinComboBox("attached text:=Fly From:").Select "Paris"
Window(winRez).WinComboBox("attached text:=Fly To:").Select "Portland"
'打开航班列表对话框选择航班Window(winRez).WinButton("text:=FLIGHT").Click
Dialog("text:=Flights Table").WinButton("text:=OK").Click
'回到主窗口,输入名字并下单Window(winRez).WinEdit("attached text:=Name:" , "nativeclass:=Edit").Set "wheetle"
Window(winRez).WinButton("text:=&Insert Order").Click '该按钮设置了快捷键,所以不能缺少&,否则无法识别
wait(5) '等待下单完成,该值可设为变量