第三章對象庫
QTP在對象庫(OR)里為每一個被測對象存儲了一個對象定義。該定義包含了一些用來唯一識別運行時對象的參數值。QTP Object Repository Manager 是用來查看和修改對象庫中的對象及其屬性的。

圖 3-1. Object Repository Manager
圖3-1,展示了一個簡單的對象庫。這個對象庫有一個WinToolbar對象,包含了一個可以用來識別的邏輯名"Running Applications"和兩個屬性:"Text" 和"nativeclass" .我們可以點擊"Add/Remove"按鈕來添加或者刪除屬性。圖3-2顯示了從Object Identification打開的Add/Remove Properties對話框,它可以用來添加或刪除任意的屬性。
提示:在對象庫的樹視圖中選擇一個對象后,點擊'Highlight'按鈕,應用程序(必須是打開的)中的對象將會高亮顯示。同樣,在代碼中也可以實現高亮:Window("Window").WinToolbar("Running Applications").Highlight.

圖3-2.Add/Remove Properties
對象是如何被添加到對象庫的?
對象可以通過兩種方式添加到對象庫:
● 通過錄制與被測應用程序的交互過程添加。
● 手工添加一個或多個對象。
我們可以點擊"Add Objects"按鈕,然后點擊我們要添加的對象,通過這種方式,我們便可以手工添加對象到對象庫中。
注意:假如我們要添加的對象是在鼠標點擊之后才出現,那么我們可以先按下Ctrl鍵,然后再去點擊。這個方法可以讓我們臨時屏蔽對象選擇模式,從而進行鼠標操作。一旦我們準備好了要添加的對象,就可以放開Ctrl鍵,進行添加了。
如果我們需要在應用程序間切換,可以先按住Ctrl+ALT鍵去屏蔽對象選擇模式,然后使用例如Alt+Tab鍵來在不同的應用程序間切換,完成切換后,再次按下Ctrl+ALT鍵后便可進入對象選擇模式并添加對象了。
對象一旦被選中,便會在對象選擇窗口中出現

圖3-3.對象選擇
本對象選擇窗口顯示了Web頁面上的完整的對象結構。選擇你需要添加的對象然后點"OK"鍵就可以了。
小提示:對象選擇窗口顯示的對象可能會和錄制到對象庫的不一致。QTP只保留能識別對象的必須的對象結構,這樣就可以在測試腳本使用對象時,減少代碼的長度。
如果我們選擇一個Page對象,然后繼續,QTP就會詢問我們是否要添加它的子對象。

圖 3-4. 對象選擇
選擇Selected object and all its descendants這個單選按鈕,然后點擊OK, 頁面上所有的對象都會被添加到對象庫中去。
提示:對象庫不能添加頁面上的隱藏對象。
測試對象和運行時對象
測試對象(TO):測試對象是QTP定義的一些類,用它們來代表被測應用的各種對象。
運行時對象(RO):運行時對象是實際的被測應用的對象,是測試執行過程中,TO用來關聯的對象。
理解這兩種對象類型的區別是非常重要的。可以看成兩輛車;車A和車B,QTP能在腳本里用一輛車的測試對象來描述出兩輛車A和B。除此之外,每個測試對象也提供了用來和運行時對象交互時相關聯的方法和屬性。
比如Start,Run和Stop都是汽車對象提供的有用的方法。
TO屬性
測試對象的屬性是QTP為了識別在測試執行過程中的運行時對象而保留在對象庫中的屬性。QTP提供GetTOProperties方法來列舉對象的所有的TO屬性.GetTOProperty和SetToProperty則分別用了讀取和修改TO的屬性值。
問題 3-1. Test Object 屬性的使用
'獲取webeidt對象 Set oWebEdit = Browser("").Page("").WebEdit("") '獲取webedit對象封裝屬性集合 Set TOProps = oWebEdit.GetTOProperties() Dim i, iCount iCount = TOProps.Count - 1 '遍歷所有封裝屬性 For i = 0 ToiCount '獲取屬性名 sName = TOProps(i).Name '獲取屬性值 sValue = TOProps(i).Value '檢查是否為正則表達式 isRegularExpression = TOProps(i).RegularExpression '顯示結果 MsgboxsName&"->" &sValue&"->" &isRegularExpression Next |
問題 3-2. 運行時改變Test Object 屬性
'獲取webedit對象 Set oWebEdit = Browser("Browser").Page("Page").WebEdit("txtName") '獲取webedit的name封裝屬性值 oldName = oWebEdit.GetTOProperty("name") '變更webedit對象的name封裝屬性 oWebEdit.SetTOProperty"name","new value" '獲取已修改的屬性 newName = oWebEdit.GetTOProperty("name") MsgBoxnewName |
問題 3-3. 測試中獲取運行時對象屬性
'x為WebEdit對象運行時的value屬性值 x = Browser("").Page("").WebEdit("").GetROProperty("value") MsgBoxx |
提示:QTP不提供修改運行時對象屬性的方法。換言之,沒有SetROProperty這個方法。同樣, 不同的測試對象都有一個它支持的屬性列表,在QTP幫助的對象模型參考中可以找到。
對象庫模式
有兩種對象庫,更確切的說是對象庫模式。

圖 3-5. 每個Action的對象庫設置
每個Action對應的公共對象庫
Action的對象庫 | 公共對象庫 |
若對象還為添加到對象庫,那么可以添加到Action對象庫。 | 若對象還為添加到對象庫,那么可以添加到公共對象庫。 |
重命名對象不會影響其他的腳本。當前的腳本會自動更新對象的命名。 | 重命名對象并不會更新所有使用公共對象庫的腳本,所以這會有比較大的影響。 |
如果被測對象的屬性發生改變,那么需要更改所有腳本。 | 被測對象的屬性發生改變,將會更新到所有腳本中。 |
如果不是很多的測試腳本來運行同一個應用程序的情況,可以使用Action對象庫。 | 如果有很多不同的腳本都在與相同的對象進行交互,那么建議使用公共對象庫。 |
| 公共對象庫可能會變的很大,所以需要經常備份以免損壞。 |
對象探測器 (Object Spy)
對象探測器是用來查看對象所支持的方法和屬性。啟動對象探測功能:Tool->Object Spy…
點擊指針按鈕,然后選擇一個對象。當選擇了Test Object Properties按鈕,屬性標簽頁中就會顯示出所有可得到的TO屬性,并且在方法標簽頁中會顯示所有可獲得的方法,如圖3-6

圖 3-6. 對象探測對象屬性
若選擇了Run-time Object Properties按鈕,那么將會顯示對象的實際屬性或方法,如圖3-7

Figure 3-7. 對象探測實際屬性
大多數的屬性值可以通過GetROProperty方法獲得。想要了解對象支持的所有屬性,可以參考QTP手冊。
'獲取對象運行時的outerhtml封裝屬性值
sOuterHTML = Browser("").Page("").WebEdit("").GetROProperty("outerhtml")
小提示:對象探測器不會顯示出任何帶有序數識別的屬性,例如CreationTime, index or location.
它們只能在添加到對象庫以后計算出來。
(未完待續)
版權聲明:51Testing軟件測試網及相關內容提供者擁有51testing.com內容的全部版權,未經明確的書面許可,任何人或單位不得對本網站內容復制、轉載或進行鏡像。51testing軟件測試網歡迎與業內同行進行有益的合作和交流,如果有任何有關內容方面的合作事宜,請聯系我們。
相關鏈接:
QTP自動化測試權威指南 連載(一)