UI Automation 简介
轉載,源地址: http://blog.csdn.net/ffeiffei/article/details/6637418
MS UI Automation(Microsoft User Interface Automation:UIA)是隨.net framework3.0一起發布的,雖然在如今這個幾乎每天都有各種新名詞、新技術出來的所謂的21世紀,它顯得已經有些過時了。前些日子,正好一個項目,可以用到它,又重新整理了一下:
什么是MS UI Automation
MS UI Automation是MSAA技術的一個替代品:即讓控件和應用程序具有更好的可達性(accessible),關于軟件的可達性,具體大家可參考一本<<Engineering Software for Accessibility>>的書,該書結合MS UIA,講述了如何在軟件開發的整個生命周期中,讓軟件具備可達性。回到MS UIA,簡單來講,它就是幾個dll,提供了一套API和Interface,及其相應的模式,讓軟件的開發者遵循該模式去實現相應的interface,從而軟件的使用者(不僅僅是客戶,還包括例如測試人員想編寫一些自動化測試代碼來完成程序相關的業務邏輯)能更好的使用該軟件。
和原來的MSAA相比較:UIA重新設計了一套架構,無論是對傳統的winform,還是新的wpf,定義了一套統一的模型;其API的使用也相對更簡單;同時,和.net framework 3.0一起,也有個UISpy的工具,能輔助大家來使用UIA。
UIA之架構
MS UIA明確定義了兩個role:UIA Provider即軟件本身,主要是軟件的開發人員依據相應的模式去實現相關的interface, UIA Client即自動化腳本和相關的assistive technology applications,從測試人員的角度出發,主要是調用相應的API去實現自動化測試腳本
UIA Provider: 開發人員確定控件行為并實現對應的UIA control pattern,對于標準控件而言,默認是支持UIA的,而對于自定義的控件,需要實現該控件的行為對應于UIA所定義的interface。
UIA Client:相對而言,UIA Client則簡單了很多,只需調用相關的UIA API去完成自動化測試腳本。
二者的一個簡單關系可參考下圖:
UIA主要有4個DLL:UIAutomationProvider.dll,定義了各種行為的interface,例如,假設有個自定義的控件,開發人員覺得它需要支持Dock行為,就需要實現IDockProvider接口。UIAutomaitonClient.dll,定義了各種控件模式,以及一些用來支持更好的定位控件的輔助條件搜索類。UIAutomationCore.dll則是用來支持UIA provider和client之間的通信的。UIAutomationClientssideProviders.dll則主要是用來支持傳統的winform的標準控件的。其關系可參考下圖:
?
UIA之Tree Model
在UIA中,程序UI的每一個部分都被認為是一個AutomationElement類,他們是一個樹狀的結構,Desktop被認為是每個windows based app的UIA樹狀圖的根,從類的定義中,我們也可以看到一個AutomationElement類中有一個static的RootElement屬性。
該樹的結構中,一共有3中View Model,分別為Raw View, Control View和Content View。Raw View提供的信息最多,也是其他view的基礎,最貼近于程序本身的編程結構;Control View是Raw View的子集,它最貼近于最終用戶所能感知的UI結構,但是它不包含不能和用戶相互交互的一些UI,例如listview的header,toolbar等等。而Content View則是Control View的一個子集,它只包含能和用戶直接交互真實信息的控件,比如接受鍵盤輸入的Textbox,選擇不同值的Combobox;而諸如lable等控件則不會包含在其中。大家可以打開UISpy,針對某個application,看看3個view有什么不同,這樣會有一個比較直觀的認識。
?
UIA之Control Pattern
UIA大概一共定義了38種pattern,代表了常用的控件行為,他們也會提供一些具體的功能性的屬性。對于UIA Provider來說,所做的事情就是定義控件相關的行為,找到該行為對應的模式,并實現該模式;對于client而言,即訪問相關的方法和屬性,來實現自動化。如某個控件需要有ValuePattern,則provider和client相對應的則為:
| Clients | Provider | Description |
| ValuePattern | IValuePattern | Set or get value |
?
UIA之Properties
每個property都由一個數字和名字來標識,provider用數字ID來確定屬性請求;而client則用AutomationProperty類獲取具體的某一屬性的內容。
?
UIA之Events
UIA是采用訂閱模型,而不是以前的廣播事件模型。定義了四種事件類型:Property change,Element action,Structure change和Global desktop change。
?
幾個關鍵的類的關系
如果利用UIA做自動化測試,用得最多的幾個類就是AutomatonElement,各種Pattern以及幾種輔助搜索的Condition,它們都在UIAutomationClent.dll的System.Windows.Automation的名字空間下:
AutomationElement類中,定義了各種常用的控件屬性,事件以及我們開始提到的RootElement;每個屬性都是一個AutomationProperty類型;而每個事件都是AutomationEvent類型,它們都繼承自AutomationIdentifier類。
而對于每個Pattern而言,則定義了該Pattern所支持的的常用的方法和屬性。
?
關于UIA的幾個學習鏈接
MSDN:http://msdn.microsoft.com/en-us/library/ms753107.aspx
同樣是來自MSDN的一篇文章,有一個詳實的例子:http://msdn.microsoft.com/en-us/magazine/cc163288.aspx
還有一篇blog,手把手的介紹如何用UIA做自動化測試:http://www.cnblogs.com/kangyi/archive/2009/09/08/1549411.html
轉載于:https://www.cnblogs.com/qixue/p/3966411.html
總結
以上是生活随笔為你收集整理的UI Automation 简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电商兴桃,打造乡村振兴新样本
- 下一篇: 基于tkinter的九型人格测试系统介绍