偏向喜歡使用對象庫操作的QTP用戶,在添加對象時候,會出現某幾個子對象,都識別成一個對象,因為里面的所有屬性幾乎是一樣的,很為難的不知道如何解決這個問題,借鑒與描述編程中的索引值index的使用,例如:
dim Input_Dec
set Input_Dec=description.create()
Input_Dec("Html tag").value="Input"
Input_Dec("Index").value=1
.....
如何把index添加進去或者如何把這些描述的東西添加進去?在這里給了大家一個小的html page,大家下載下去后,可以先試試看,然后再看看下文,如何使用Index。自然這個不會識別成一個對象,因為它們的類型有區別,只是特定或者模擬某些情況而已。
首先,我們添加了其中第一個文本框進去我們的對象庫,里面會有3個屬性,分別是type,name,html tag,但由于文本框類型不同,我們只選擇了他的html tag,并添加進去一個index的索引值,預設為0。
在這里我們就運行下:
browser("Browser").Page("Page").WebEdit("EmpNo").Set "111"
發現成功了,好,再手動修改下index的值為1,刷新下page,運行下代碼。
這時候讀者可能發現,被填寫的還是原來的第一個webedit?!如何解決這個問題呢,我們只需要手動把智能識別的按鈕“Enable Smart Identification”勾選掉。再運行一次這個代碼,發現成功設置了第2個文本框。
其次,為什么我們手動添加的index會和我們設置只能識別掛上夠呢?這個是QTP對象庫的機制。在這里就簡單介紹2條給讀者饞下。
1,對象庫添加對象時候會因為對象的數量或者屬性不同,自主添加能區別的屬性進去。
驗證步驟:
打開對象庫,打開一個IE,點擊添加對象,把browser添加進去,你會發現這個browser的什么屬性都沒有(根據實際Object Identification 設置,如果用戶有添加識別屬性是另外一話)。哪么,你打開2IE時候,再做添加對象,添加進來的browser會多出個creationtime的區別標示或者其它。
2,使用智能識別“Enable Smart Identification”會讓非存在“Object Identification”中的屬性成為QTP識別的第2選擇。
驗證步驟:
依次打開2個不同title的Browser,分別是51Testing主頁與一個空page的Browser,添加51主頁進瀏覽器中,并且去掉識別屬性,添加index(不一定指index,其它屬性也可以)。
1)index設置為0,事實上51Testing的index是1。不要選中“智能識別”。
msgbox browser("[QuickTest Pro] - 51Testing軟件測").getroproperty("title")
出現的是“無標題”
2)選中智能識別。
msgbox browser("[QuickTest Pro] - 51Testing軟件測").getroproperty("title")
出現的是“51....”
最后,如果喜歡研究的讀者可以會想,哪么IE的Creationtime和Index有區別嗎?
可能有人會說其實就一樣,但其實不一樣,Creationtime的識別是IE的打開順序。但如果是index的區別,他和打開順序沒關系,關系到的是它的被激活順序。
打個比方:就A,B 2個人,并排一起,他們沒有生日的區別,但是,當B被叫出隊列時候,B就是index 0,A就是index 1。但如果B被叫出隊列,A也被后來叫出隊列,哪么A就是index 0,B就是index 1。在實際大的項目中,對IE的標示,個人不推薦使用index。
就好像之前有人發帖子寫到得到IE一樣,其實原理就是基于index。
dim Ie_Dec
Set Ie_Dec=description.Create()
Ie_Dec("NativeClass").value = "IEFrame"
Ie_Dec("NativeClass").RegularExpression = false
Set child_a=desktop.ChildObjects(Ie_Dec)
如果沒辦法很好控制IE的操作順序,不建議單獨使用index去標示IE并操作。
原文轉自:http://www.anti-gravitydesign.com