共用方式為


使用 UI 自動化進行自動化測試

注意

本文件適用對象為 .NET Framework 開發人員,其想要使用 System.Windows.Automation 命名空間中定義的受控 UI 自動化類別。 如需 UI 自動化的最新資訊,請參閱 Windows 自動化 API:UI 自動化

本概觀描述 Microsoft UI 自動化在自動化測試案例中做為程式設計存取的架構有何幫助。

UI 自動化提供了一致的物件模型,可讓所有使用者介面 (UI) 架構以可存取、輕鬆自動化的方式來公開複雜且豐富的功能。

UI 自動化已開發為 Microsoft Active Accessibility 的繼任者。 Active Accessibility 是現有的架構,專為提供使控制項及應用程式可供存取的解決方案所設計。 Active Accessibility 設計時未考慮測試自動化,但由於協助工具和自動化有極為相似的需求,進而發展為該角色。 UI 自動化除了為協助工具提供更精細的解決方案之外,還特別設計來提供穩固的自動化測試功能。 例如,Active Accessibility 依賴單一介面來同時公開使用者介面的相關資訊及收集 AT 產品所需資訊;UI 自動化則將這兩個模型分開。

同時需有提供者和用戶端,才能實作 UI 自動化,使其與自動化測試工具一樣有用。 使用者介面自動化提供者是應用程式,例如 Microsoft Word、Excel 和其他以 Microsoft Windows 作業系統為基礎的協力廠商應用程式或控制項。 使用者介面自動化用戶端則包括自動化測試指令碼和輔助技術應用程式。

注意

本概觀的用意是展示 UI 自動化全新和改善的自動化測試功能。 並不會提供協助工具功能的資訊,除非必要,否則不會說明協助工具。

提供者中的使用者介面自動化

若要讓 UI 自動化,應用程式或控制項的開發人員必須查看使用者在使用標準鍵盤和滑鼠互動時,可以在 UI 物件上執行哪些動作。

一旦識別出這些按鍵動作,就應該在控制項上實作對應的 UI 自動化控制項模式 (也就是鏡像 UI 元素功能和行為的控制項模式)。 例如,與下拉式方塊控制項 (例如執行對話方塊) 的使用者互動一般會涉及到展開及摺疊下拉式方塊,以隱藏或顯示項目清單、從該清單中選取項目,或透過鍵盤輸入加入新值。

注意

藉由其他協助工具模式,開發人員必須直接從個別按鈕、功能或其他控制項收集資訊。 可惜的是,每種控制項類型都有許多次要變化。 換句話說,即使按鈕的十個變化全都以相同方式運作,並執行相同功能,仍必須全都視為唯一的控制項。 無法得知這些控制項是否功能對等。 開發控制項模式的目的就是為了呈現這些常見的控制項行為。 如需詳細資訊,請參閱 UI Automation Control Patterns Overview

實作使用者介面自動化

如上所述,如果沒有 UI 自動化所提供的一致模型,則測試工具和開發人員必須知道架構特定的資訊,才能公開該架構中控制項的屬性和行為。 因為在任何時候,Windows 作業系統內可能有數個不同的 UI 架構,包括 Win32、Windows Forms 和 Windows Presentation Foundation (WPF),所以測試多個含有類似控制項的應用程式可能是項艱鉅的工作。 例如,下表列出擷取與按鈕控制項相關名稱 (或文字) 時所需的架構特定屬性名稱,並顯示單一對等的 UI 自動化屬性。

使用者介面自動化控制項類型 使用者介面架構 架構特定的屬性 使用者介面自動化屬性
Button Windows Presentation Foundation Content NameProperty
Button Win32 標題 NameProperty
映像 HTML alt NameProperty

使用者介面自動化提供者會負責將其控制項的架構特定屬性對應至對等的 UI 自動化屬性。

如需在提供者中實作 UI 自動化的詳細資訊,請參閱 UI Automation Providers for Managed Code。 如需實作控制項模式的詳細資訊,請參閱 UI Automation Control PatternsUI Automation Text Pattern

用戶端中的使用者介面自動化

許多自動化測試工具和案例的目標是提供一致、可重複的使用者介面操作。 這可能涉及到特定控制項單元測試,一直到在一組控制項上反覆一連串動作的測試指令碼錄製及播放。

自動化應用程式的困難在於測試與動態目標的同步處理。 例如,清單方塊控制項 (例如 Windows 工作管理員中所包含的控制項) 會顯示目前執行中應用程式的清單。 因為該清單方塊中的項目是在測試應用程式的控制之外動態更新的,所以嘗試以任何一致性來重複清單方塊中的特定項目選取是不可能的。 在測試應用程式控制項之外的 UI 中嘗試重複簡單的焦點變更時,也會發生類似問題。

以程式設計方式存取

程式設計存取能夠透過程式碼,模擬由傳統滑鼠和鍵盤輸入所公開的任何互動和體驗。 UI 自動化透過五個元件啟用程式設計存取:

測試自動化的主要屬性

在 UI 內專門識別並後續找出任何控制項的能力,可以為要在該 UI 上操作的自動化測試應用程式提供基礎。 有數個 Microsoft UI 自動化屬性,可供用戶端和提供者用來輔助此項功能。

AutomationID

在同層級之間以唯一的方式識別自動化項目。 AutomationIdProperty 並未當地語系化,與發行多國語言版本的產品時通常會當地語系化的屬性 (例如 NameProperty ) 不同。 請參閱 Use the AutomationID Property

注意

AutomationIdProperty 不保證整個自動化樹狀結構中的唯一識別。 例如,應用程式可能包含具有多個最上層功能表項目的功能表控制項,因此也會有多個子功能表項目。 這些次要功能表項目可由「項目 1」、「項目 2」、「項目 3」(依此類推) 之類的一般配置識別,因此最上層功能表項目的子系可以有重複識別項。

ControlType

識別自動化項目所代表的控制項類型。 重要的資訊可以從對控制項類型的了解加以推斷。 請參閱 UI Automation Control Types Overview

NameProperty

這是識別或說明控制項的文字字串。 因為NameProperty 可以當地語系化,所以應小心使用。 請參閱 UI Automation Properties Overview

在測試應用程式中實作使用者介面自動化

步驟 描述
加入使用者介面自動化參考。 以下列出 UI 自動化用戶端所需的 UI 自動化 DLL。

- UIAutomationClient.dll 提供 UI 自動化用戶端 API 的存取權。
- UIAutomationClientSideProvider.dll 提供自動化 Win32 控制項的能力。 請參閱 UI Automation Support for Standard Controls
- UIAutomationTypes.dll 提供 UI 自動化中所定義特定類型的存取權。
加入 System.Windows.Automation 命名空間。 這個命名空間包含 UI 自動化用戶端使用 UI 自動化功能 (文字處理除外) 時需要的一切。
加入 System.Windows.Automation.Text 命名空間。 這個命名空間包含 UI 自動化用戶端使用 UI 自動化文字處理功能時需要的一切。
尋找想要的控制項。 自動化測試指令碼會在自動化樹狀結構中尋找代表相關控制項的使用者介面自動化項目。

您可透過多種方式使用程式碼取得使用者介面自動化項目。

- 使用 Condition 陳述式查詢 UI。 通常會在此使用語言中性的 AutomationIdProperty注意:可以使用 Inspect.exe 之類的工具取得 AutomationIdProperty,這類工具可以條列控制項的 UI 自動化屬性。

- 使用 TreeWalker 類別來周遊整個 UI 自動化樹狀結構或其子集。
- 追蹤焦點。
- 使用控制項的 hWnd。
- 使用畫面位置,例如滑鼠游標的位置。

請參閱 Obtaining UI Automation Elements
取得控制項模式。 控制項模式會公開功能類似之控制項的一般行為。

找到需要測試的控制項之後,自動化測試指令碼會從這些使用者介面自動化項目中取得想要的控制項模式。 例如,代表一般按鈕功能的 InvokePattern 控制項模式,或是代表視窗功能的 WindowPattern 控制項模式。

請參閱 UI Automation Control Patterns Overview
自動化 UI。 自動化測試指令碼現在可以使用 UI 自動化控制項模式公開的資訊和功能,從 UI 架構中控制想要的任何 UI。

有一些相關工具和技術會支援使用 UI 自動化進行自動化測試。

  • Inspect.exe 是圖形化使用者介面 (GUI),可用來收集 UI 自動化資訊,供提供者和用戶端開發與偵錯之用。 Inspect.exe 包含在 Windows SDK 中。

  • MSAABridge 會向 Active Accessibility 用戶端公開 UI 自動化資訊。 將 UI 自動化橋接至 Active Accessibility 的主要目標是允許現有的 Active Accessibility 用戶端能夠與任何已實作 UI 自動化的架構互動。

安全性

如需安全性資訊,請參閱 UI Automation Security Overview

另請參閱