dlgLogin = “Login”
這樣腳本可以被修改為:
Dim descEditLogin
Set descEditLogin = Description.Create()
descEditLogin("Class Name").Value = "Dialog"
descEditLogin("Regexpwndtitle").Value = Environment.Value("dlgLogin")
Dialog(descEditLogin).WinEdit("Attached text:=Agent Name:").Set "Holly"
Dialog(descEditLogin).WinEdit("Attached text:=Password:").Set "Mercury"
Dialog(descEditLogin).WinButton("Class Name:=WinButton", "text:=Cancel").Click
當然,參數化的方式很多,這邊介紹的是使用環境變量
總結:優點是當對象的一些屬性變更后,腳本更容易維護。比如說對于一個通用對象,比如save, reset, cancel等按鈕,一個頁面有3個,30個頁面就有90個對象,假如save變成保存,reset變成重置,cancel變成取消,那么對象庫就會產生很大的變動。而使用了描述性編程只需要在導入的XML文件中修改一個值就可以了。當然描述性編程的作用遠遠不止這些,這次只是拋磚引玉,希望大家共同進步。在QTP中使用描述性編程是一個提高QTP腳本利用率的很好的方式。通常QTP是通過對象庫來識別不同的對象,而描述性編程是QTP另外一種能夠識別對象的途徑,它不依賴于對象庫,通過增加一些對象的描述來識別對象的。
QTP的工作原理有點類似人類社會的某些場景.比如一個朋友委托你帶東西給A,如果你認識A,這表明A的容貌特征以及一些聯系已經在你腦海有了印象,那么你只要找到了A的住所,那么這個任務就很容易完成了,如果你根本就不認識A,則這個任務就很難完成了. 那在QTP中有沒有一種方法,無須在對象庫中記錄任何關于某個對象的信息,就可以完成對該對象的操作呢,有.那就是描述性編程,其工作原理就象上面這個例子.
在QTP中,有一按鈕對象,對它的操作如下:Dialog("Login").WinButton("OK").Click但是如果我們在對象庫中刪除這個對象后,執行這句話就會出錯,提示找不到對象,在這個時候,我們就可以通過描述性編程給他指定對象及其他的一些屬性,修改如下Dialog("Login").WinButton("text:=OK").Click
上面腳本中,通過WinButton("text:=OK")明確告訴QTP去尋找文本屬性為OK的按鈕,于是QTP正確識別到該對象,順利的執行了腳本.這種不需要在對象庫中存儲對象的信息,就可以執行對象操作的方法,就是QTP中比較高級的用法:描述性編程(descrīptive progamming).描述性編程和傳統的QTP腳本的區別是:他把需要識別的對象的屬性從對象庫中轉移到了腳本里面,通過在腳本里面的特殊語法格式.來告訴QTP識別對象的方法.描述性編程更加靈活,因為他不需要經過錄制這個步驟,可以直接通過編程的方式操作任何一個你想操作的對象,只要你在測試腳本代碼里提供給QTP識別該對象的足夠信息
描述性編程的語法格式如下:
micClases("property1:=value1","property2:=value2")
micClass標志某個對象的類別,括號里面通過jproperty:=value的形式告訴QTP識別該對象的必要屬性.我們繼續修改一下測試腳本:Dialog("Login").WinButton("text:=OK").Click修改后:Dialog("Login").WinButton("nativeclass:=Button","text:=OK").Click.F5執行,結果運行順利.這次修改,我們使用了一個通用的對象類WinObject,而把按鈕當作一個基本屬性nativeclass:=Button,同樣可以完成對該按鈕的操作
由上面的敘述我們可以看出來,描述性編程沒有嚴格的要求,只要遵循一個原則:在代碼中告訴QTP足夠他識別該對象的屬性,QTP就可以不通過對象庫,而是通過描述性編程的方式完成對指定對象的操作.所以描述性編程沒有什么神秘的,他無非是把原來存儲在對象庫中的信息提到代碼中來了而已.
文章來源于領測軟件測試網 http://www.kjueaiud.com/