2010-06-03 61 views
1

我們有一個功能,可以訪問標準Windows應用程序中的按鈕和列表框等兩種類型的控件。該函數只使用控件名稱作爲參數,所以qtp無法理解它是什麼類型的控件。如何解決這個問題?寫2個單獨的功能 - 1個按鈕&另一個列表框?如何在qtp中運行時訪問對象?

回答

2

這取決於你想要什麼與對象的事,如果你想要做的東西是共同所有WinObjects(如ClickGetROProperty),你可以做到這一點,如果它是針對不同的測試對象,你必須有不同的方法(或至少把它不同內部)

示例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"))和關於轉執行你的具體行動。

+1

但是,請注意,在控件更改其狀態時,由ChildObjects返回的集合包含的引用變得無效。如果您嘗試覆蓋異步移動,消失,更改圖標等的控件,那麼這可能很糟糕 - 隨後您會得到隨機結果或運行時錯誤。 – TheBlastOne 2010-06-18 07:55:22

+0

@TheBlastOne如果控件本身發生變化(而不僅僅是它們的外觀),則這隻會有問題。如果瀏覽器導航,否則應該是OK。 – Motti 2010-06-19 19:17:14

+0

這也是我所期望的。但是,如果更改父容器的可見性,則ChildObjects集合中的任何子元素引用將變爲無效。這正是我所針對的(意外)問題。我的猜測是,通過WNHD處理QTP地址,如果子對象由於狀態更改而重新創建(如在UI框架中,如JBoss的ServerFaces或Delphi組件框架中的UI框架中經常這樣做),那麼這些地址會變得無效。 – TheBlastOne 2010-07-05 13:44:13

相關問題