使用使用者介面自動化進行自動化測試
注意
本檔適用於想要使用 System.Windows.Automation 命名空間中定義的受控UI自動化類別的 .NET Framework 開發人員。 如需 UI 自動化的最新資訊,請參閱 Windows 自動化 API:使用者介面自動化。
本概觀說明 Microsoft UI 自動化作為自動化測試情境中用於程式設計存取的框架,如何能發揮其效用。
使用者介面自動化提供統一的物件模型,可讓所有使用者介面 (UI) 架構以無障礙且容易自動化的方式公開複雜且豐富的功能。
使用者介面自動化已開發為Microsoft Active Accessibility 的後續任務。 Active Accessibility 是一個現有的框架,設計目的是提供解決方案,使控件和應用程式更易於訪問。 Active Accessibility 並非是為了測試自動化而設計,但由於輔助功能和自動化具有相似的需求,因此演變成該角色。 UI 自動化除了提供更精細的可及性解決方案之外,也特別設計為提供強大的功能支援進行自動化測試。 例如,Active Accessibility 依賴單一介面來公開 UI 的相關信息,並收集 AT 產品所需的資訊;UI 自動化會將這兩個模型分開。
必須同時實作提供者和用戶端的 UI 自動化,才能將其作為自動化測試工具使用。 使用者介面自動化提供者是應用程式,例如Microsoft Word、Excel 和其他第三方應用程式或控件,以Microsoft Windows 操作系統為基礎。 使用者介面自動化用戶端包括自動化測試腳本和輔助技術應用程式。
注意
此概觀的意圖是展示UI自動化的新和改良自動化測試功能。 此概觀不旨在提供輔助功能的相關信息,除非必要,否則不會處理輔助功能。
在提供者中的使用者介面自動化
若要讓UI自動化,應用程式或控件的開發人員必須查看使用者可以使用標準鍵盤和滑鼠互動在UI對象上執行的動作。
識別出這些重要動作之後,應該在控件上實作對應的UI自動化控件模式(也就是鏡像UI元素的功能和行為的控件模式)。 例如,使用者與組合框控件的互動(如執行對話框)通常牽涉到展開和折疊組合框來隱藏或顯示項目清單、從該清單中選取項目,或透過鍵盤輸入新增值。
注意
透過其他輔助功能模型,開發人員必須直接從個別按鈕、功能表或其他控件收集資訊。 不幸的是,每個控件類型都有數十種次要變化。 換句話說,即使按鈕的十個變化可能以相同的方式運作並執行相同的函式,但它們都必須視為唯一的控件。 無法知道這些控制件在功能上是相等的。 已開發控件模式來代表這些常見的控件行為。 如需詳細資訊,請參閱 UI 自動化控制項模式概觀。
實作UI自動化
如先前所述,如果沒有UI自動化所提供的統一模型,測試工具和開發人員必須知道架構特定資訊,才能公開該架構中控件的屬性和行為。 由於 Windows 作業系統內可能會有數個不同的 UI 架構,包括 Win32、Windows Forms 和 Windows Presentation Foundation (WPF),所以測試多個應用程式似乎類似控件是一項令人生畏的工作。 例如,下表說明了框架特定的屬性名稱,這些名稱是用於擷取與按鈕控制項相關聯的名稱(或文字),並顯示對應的單一 UI 自動化屬性。
UI 自動化控制件類型 | UI 架構 | Framework 特定屬性 | UI 自動化屬性 |
---|---|---|---|
按鈕 | Windows Presentation Foundation | 內容 | NameProperty |
按鈕 | Win32 | 標題 | NameProperty |
圖像 | HTML | alt | NameProperty |
使用者介面自動化提供者負責將控件的架構特定屬性對應至對等的UI自動化屬性。
如需在提供者中實作使用者介面自動化的資訊,請參閱適用於受控程式碼的 使用者介面自動化提供者。 實作控件模式的相關信息可在 UI 自動化控件模式 和 UI 自動化文字模式取得。
用戶端中的UI自動化
許多自動化測試工具和案例的目標是使用者介面的一致且可重複的操作。 這可以涉及對特定控件進行單元測試,以錄製和播放測試腳本,並迭代地在一組控件上執行一系列常規動作。
自動化應用程式所產生的複雜問題在於難以將測試與動態目標同步處理。 例如,清單框控件,例如 Windows 任務管理器中包含的清單框控件,會顯示目前正在執行的應用程式清單。 由於清單框中的專案會在測試應用程式的控制項之外動態更新,因此嘗試在清單框中重複選取具有任何一致性的特定專案是不可能的。 嘗試在測試應用程式控制項之外的UI中重複簡單的焦點變更時,也會發生類似的問題。
以程式設計方式存取
程式化存取可讓您透過程式碼模擬傳統滑鼠和鍵盤輸入所公開的任何互動和體驗。 使用者介面自動化透過五個元件提供程式化存取:
使用者介面自動化樹狀結構有助於流覽UI的結構。 樹狀結構是從 hWnd 的集合中生成的。 如需詳細資訊,請參閱 UI 自動化樹狀結構概觀。
自動化元素是UI中的個別元件。 這些通常比 hWnd 更細緻。 如需詳細資訊,請參閱 UI 自動化控制項類型概觀。
自動化屬性提供UI元素的特定資訊。 如需詳細資訊,請參閱 UI 自動化屬性概觀。
控件模式會定義控件功能的特定層面;它們可以由屬性、方法、事件和結構資訊所組成。 如需詳細資訊,請參閱 UI 自動化控制項模式概觀。
自動化事件提供事件通知和資訊。 如需詳細資訊,請參閱 UI 自動化事件概觀。
測試自動化的主要屬性
能夠唯一識別及後續在UI內找出任何控件,可提供自動化測試應用程式在該UI上操作的基礎。 用戶端和提供者會使用數個Microsoft用戶介面自動化屬性,以協助進行這項操作。
AutomationID
唯一識別自動化元素與其同類項目。 AutomationIdProperty 沒有被當地化,不像屬性NameProperty這樣的,如果產品以多種語言出貨時,通常會當地化。 請參閱 使用 AutomationID 屬性。
注意
AutomationIdProperty 不保證整個自動化樹狀結構中的身份唯一性。 例如,應用程式可能包含具有多個最上層功能表項的功能表控制件,而該功能表項接著具有多個子功能表項。 這些次選單項目可由泛型配置來識別,例如「Item1、Item 2、Item3 等等」,允許各最高層選單下的子項目具有重複的識別碼。
控制類型
識別自動化專案所代表的控制項類型。 可以從控件類型的知識推斷重要資訊。 請參閱 UI自動化控制項類型概觀。
NameProperty
這是識別或說明控件的文字字串。 NameProperty 應謹慎使用,因為它可以本地化。 請參閱 UI 自動化屬性概觀。
在測試應用程式中實作UI自動化
步驟 | 描述 |
---|---|
新增介面自動化參考資料。 | UI 自動化用戶端所需的 UI 自動化 dll 檔案列在這裡。 - UIAutomationClient.dll 提供UI自動化用戶端 API 的存取權。 - UIAutomationClientSideProvider.dll 提供自動化 Win32 控制件的功能。 請參閱標準控制元件的 UI 自動化支援 。 - UIAutomationTypes.dll 可讓您存取UI自動化中定義的特定類型。 |
新增 System.Windows.Automation 命名空間。 | 此命名空間包含UI自動化用戶端除了文字處理以外,使用UI自動化功能所需的所有專案。 |
新增 System.Windows.Automation.Text 命名空間。 | 此命名空間包含 UI 自動化用戶端使用 UI 自動化文字處理功能所需的一切。 |
尋找感興趣的控制件。 | 自動化測試腳本會找出UI自動化的元素,這些元素代表自動化樹狀結構中所關注的控制項。 使用程式代碼取得UI自動化元素的方法有很多種。 - 使用 Condition 語句查詢 UI。 這通常是使用語言中性 AutomationIdProperty 的位置。 注意: 可以使用能夠將控件 UI 自動化屬性專案化之 Inspect.exe 之類的工具取得 AutomationIdProperty。 - 使用 TreeWalker 類別來周游整個 UI 自動化樹狀結構或其子集。 - 追蹤焦點。 - 使用控件的 hWnd。 - 使用螢幕上的位置,例如滑鼠游標的位置。 請參閱 取得使用者介面自動化元素 |
取得控制模式。 | 控件模式會公開功能類似的控件的常見行為。 尋找需要測試的控件之後,自動化測試腳本會從這些UI自動化元素取得感興趣的控件模式。 例如,一般按鈕功能的 InvokePattern 控件模式,或視窗功能的 WindowPattern 控件模式。 請參閱 UI 自動化控制樣式概觀。 |
將用戶介面自動化。 | 自動化測試腳本現在可以使用UI自動化控制件模式所公開的資訊和功能,從UI架構控制任何感興趣的UI。 |
相關工具和技術
有許多相關工具和技術支援使用UI自動化進行自動化測試。
Inspect.exe 是圖形使用者介面(GUI)應用程式,可用來收集提供者和客戶端開發和偵錯的UI自動化資訊。 Inspect.exe 包含在 Windows SDK 中。
MSAABridge 會將UI自動化資訊公開給Active Accessibility用戶端。 將UI自動化橋接至作用中輔助功能的主要目標是允許現有的Active Accessibility 客戶端能夠與任何已實作UI自動化的架構互動。
安全
如需安全性資訊,請參閱 UI 自動化安全性概觀。