GUI: 使用者圖形介面。
1. Windows API
FindWindow, EnumWindows可用於尋找到視窗控制代碼。
GetWindowText, GetWindowRect, GetWindowLong可用於擷取視窗屬性。
SetWindowText, GetWindowText可用於操作控制項上顯示的文字。
SetForegroundWindow用於設定頂層視窗。
GetForegroundWindow用於擷取當前的頂層視窗。
GetActiveWindow
SetActiveWindow
...
優點:對標準Windows的控制項支援還不錯,較底層。
缺點:底層意味著複雜,需要多層的封裝,開發效率低下,對Windows API的完全依賴。對非標準(自訂)控制項,較難實現自動化,就算實現了代碼不穩定,維護和分析結果的成本也很高。
2. MSAA——Microsoft Active Accessibility
IAccessible,本身是一個Com組件,最主要的是其介面提供的方法可以擷取控制項更詳細的資訊,也可以通過一些方法對控制項進行簡單的操作。
優點:使用者只需跟IAccessible打交道,通過這個介面能獲得的控制項資訊相對豐富,基本操作也不需要通過Windows Message的方式來實現。另外一個較大優點是自訂控制項的支援。開發自訂控制項時可以實現IAccessible的介面,並且通過這個介面,把一些屬性的操作暴露出來,測試人員就可以將這個控制項當做標準控制項,並用MSAA來自動化。
缺點:並非為自動化測試設計,擷取到的控制項資訊比Windows API多,但仍對自動化測試不夠,僅支援一個基本操作,其它的仍需Windows Message。
3. UIAutomation
從架構上說UIA針對標準控制項時通過UI Automation Proxy調用了MSAA Server,基本覆蓋了MSAA功能。
UI Spy是UIA的一個小工具。
與MSAA比較:
1)Tree.broken Exception,維護成本提高
2)只能用.Net語言來寫,運行在.Net託管堆中->效能差異
3)MSAA支援進程內操作
UIA未定義支援,使用可能有效能問題
4)自訂控制項支援好
4. Window Automation API 3.0
是對UIA和MSAA的升級。
Windows 7對自動化測試的支援將會更好。可用Managed Code和Unmanaged Code,基本解決上面UIA的問題。
Managed Code(Managed 程式碼) vs Unmanaged Code(Unmanaged 程式碼):
在公用語言運行庫環境的外部,由作業系統直接執行的代碼稱為Unmanaged 程式碼,它必須提供自己的記憶體回收、類型檢查、安全支援等服務,它與Managed 程式碼不同,後者從公用語言運行庫中獲得這些服務,而Unmanaged 程式碼是在運行庫之外啟動並執行代碼。例如Com組件、Active X介面、和Win32 API這些都是Unmanaged 程式碼的樣本。
自動化測試的實質是為了快速、高效地發現和預防迴歸缺陷,並非發現新缺陷(Test Monkey除外)。旨在解決成本問題。
UIAutomation無法產生滑鼠、鍵盤事件->可用Win API
UI Spy使用:
焦點跟蹤、懸停,注意run as Admin,可獲得以下內容:
1)UI項和UI自動化屬性值
2)控制項模式實現
3)UI自動化事件資訊
4)導航和鍵盤焦點
注意IE 8以上版本IE開啟會有兩個進程,大的為主進程,用於正在瀏覽的網頁,小的是輔助進程,用於網頁錯誤時恢複並reopen。
從UI 測試自動化的角度來看,意味著所測試的應用程式被稱為伺服器,測試載入器被視為用戶端。
UIAutomationClient.dll庫實際上就是UI自動化用戶端使用的測試自動化庫。
UIAutomationTypes.dll庫包含UIAutomationClient.dll和其它Automation 伺服程式庫使用的各種類型的定義。
UIAutomationClientSideProvider.dll包含一組與構建時不支援自動化的控制項配件配合使用的代碼,這些控制項可能包括舊式控制項和自訂的.NET控制項。
UIAutomationProvider.dll庫是一組介面定義,可供建立自訂UI控制項和希望控制項被UI自動化庫訪問的開發人員使用。
TreeScope是個枚舉類型:
Element, Children, Descendants, Parent, Ancestors, Subtree(包含搜尋的根和全部子代)
System.Windows.Automation.AndCondition代表一個與條件
System.Windows.Automation.NotCondition
System.Windows.Automation.OrCondition
System.Windows.Automation.PropertyCondition測試屬性是否具有指定的值