1
我們有一個功能,可以訪問標準Windows應用程序中的按鈕和列表框等兩種類型的控件。該函數只使用控件名稱作爲參數,所以qtp無法理解它是什麼類型的控件。如何解決這個問題?寫2個單獨的功能 - 1個按鈕&另一個列表框?如何在qtp中運行時訪問對象?
我們有一個功能,可以訪問標準Windows應用程序中的按鈕和列表框等兩種類型的控件。該函數只使用控件名稱作爲參數,所以qtp無法理解它是什麼類型的控件。如何解決這個問題?寫2個單獨的功能 - 1個按鈕&另一個列表框?如何在qtp中運行時訪問對象?
這取決於你想要什麼與對象的事,如果你想要做的東西是共同所有WinObjects
(如Click
或GetROProperty
),你可以做到這一點,如果它是針對不同的測試對象,你必須有不同的方法(或至少把它不同內部)
示例CALC.EXE在科學模式:
Public Function Click(ByVal Name)
Window("text:=Calculator").WinObject("text:=" & Name).Click
End Function
Click "8" ''# This is a button
Click "Oct" ''# This is a radio button
運行結果之後是10
(八進制8)
另一種方式來做到這一點是使用ChildObjects
爲了取得與這個屬性(在這種情況下,一個)的所有對象,檢查它是什麼類型的對象(GetROProperty("micclass")
)和關於轉執行你的具體行動。
但是,請注意,在控件更改其狀態時,由ChildObjects返回的集合包含的引用變得無效。如果您嘗試覆蓋異步移動,消失,更改圖標等的控件,那麼這可能很糟糕 - 隨後您會得到隨機結果或運行時錯誤。 – TheBlastOne 2010-06-18 07:55:22
@TheBlastOne如果控件本身發生變化(而不僅僅是它們的外觀),則這隻會有問題。如果瀏覽器導航,否則應該是OK。 – Motti 2010-06-19 19:17:14
這也是我所期望的。但是,如果更改父容器的可見性,則ChildObjects集合中的任何子元素引用將變爲無效。這正是我所針對的(意外)問題。我的猜測是,通過WNHD處理QTP地址,如果子對象由於狀態更改而重新創建(如在UI框架中,如JBoss的ServerFaces或Delphi組件框架中的UI框架中經常這樣做),那麼這些地址會變得無效。 – TheBlastOne 2010-07-05 13:44:13