使用 UI 自動化進行自動化測試
![]() |
---|
這份文件適用於想要使用 System.Windows.Automation 命名空間中定義之 Managed UI Automation 類別的 .NET Framework 開發人員。如需 UI Automation 的最新資訊,請參閱 Windows Automation API:使用者介面自動化 (英文)。 |
本概觀說明 Microsoft UI Automation在自動化測試案例中做為程式設計存取的架構有何幫助。
UI Automation提供了一致的物件模型,可讓所有user interface (UI) 架構透過可存取、輕鬆自動化的方式來公開複雜、豐富的功能。
UI Automation的開發目的是要接替 Microsoft Active Accessibility。 Active Accessibility 是現有的架構,專為提供存取控制項及應用程式的方案所設計。 Active Accessibility 設計時未考慮測試自動化,但由於協助工具和自動化有極為相似的需求,進而發展為該角色。 UI Automation除了提供更精細的協助工具方案之外,還特別設計來提供穩固的自動化測試功能。 例如,Active Accessibility 依賴單一介面來同時公開關於 UI 的資訊及收集 AT 產品所需資訊;UI Automation則分隔兩個模型。
若要實作 UI Automation讓它成為跟自動化測試工具一樣有用,需要有提供者和用戶端。 UI 自動化提供者是應用程式,例如 Microsoft Word、Excel 和其他以 Microsoft Windows 作業系統為基礎的協力廠商應用程式或控制項。 UI 自動化用戶端則包括自動化測試指令碼和輔助技術應用程式。
![]() |
---|
本概觀的用意是展示 UI Automation全新和改善的自動化測試功能,並不會提供協助工具功能的資訊,除非必要,否則不會說明協助工具。 |
這個主題包含下列章節。
- 提供者中的 UI 自動化
- 用戶端中的 UI 自動化
- 相關工具和技術
- 安全性
- 相關主題
提供者中的 UI 自動化
若要讓 UI 自動化,應用程式或控制項開的發人員必須查看使用者在使用標準鍵盤和滑鼠互動時,可以在 UI 物件上執行哪些動作。
一旦識別出這些按鍵動作,就應該在控制項上實作對應的 UI Automation控制項模式 (也就是可鏡像 UI 項目功能和行為的控制項模式)。 例如,與下拉式方塊控制項 (例如執行對話方塊) 的使用者互動一般是涉及到展開及摺疊下拉式方塊,以隱藏或顯示項目清單、從該清單中選取項目,或透過鍵盤輸入加入新值。
![]() |
---|
儘管有其他協助工具模式,開發人員仍必須直接從個別按鈕、功能或其他控制項收集資訊。可惜的是,每種控制項型別都有許多次要變化。換句話說,即使按鈕的十個變化全都以相同方式運作,並執行相同功能,它們全都必須被視為唯一的控制項。無法知道這些控制項有對等功能。開發控制項模式的目的就是為了呈現這些常見的控制項行為。如需詳細資訊,請參閱 UI 自動化控制項模式概觀。 |
實作 UI 自動化
如上所述,如果沒有 UI Automation所提供的一致模型,測試工具和開發人員就必須知道架構特定的資訊,才能公開該架構中控制項的屬性和行為。 因為在任何時候,Windows 作業系統中可能有數個不同的 UI 架構,包括 Win32、Windows Forms 和 Windows Presentation Foundation (WPF),因此測試多個含有類似控制項的應用程式可能是項艱鉅的工作。 例如,下表列出擷取與按鈕控制項相關名稱 (或文字) 時所需的架構特定屬性名稱,並顯示單一對等的 UI Automation屬性。
UI 自動化控制項型別 |
UI 架構 |
架構特定的屬性 |
UI 自動化屬性 |
---|---|---|---|
Button |
Windows Presentation Foundation |
Content |
NameProperty |
Button |
Win32 |
Caption |
NameProperty |
Image |
HTML |
alt |
NameProperty |
UI 自動化提供者會負責將其控制項的架構特定屬性對應至對等的 UI Automation屬性。
如需在提供者中實作 UI Automation的詳細資訊,請參閱使用 Managed 程式碼的 UI 自動化提供者。 如需實作控制項模式的詳細資訊,請參閱 UI 自動化控制項模式和 UI 自動化的文字模式。
用戶端中的 UI 自動化
許多自動化測試工具和案例的目標是提供一致、重複的使用者介面操作。 這可能涉及到特定控制項單元測試,一直到在一組控制項上反覆一連串動作的測試指令碼錄製及播放。
自動化應用程式的困難在於測試與動態目標的同步處理。 例如,清單方塊控制項 (例如 [Windows 工作管理員] 中所包含的控制項) 會顯示目前執行中應用程式的清單。 因為清單方塊中的項目是在測試應用程式的控制之外動態更新的,所以嘗試以任何一致性來重複清單方塊中的特定項目選取是不可能的。 在測試應用程式控制之外的 UI 中嘗試簡單的焦點變更時,也會發生類似問題。
程式設計存取
程式設計存取能夠透過程式碼,模擬由傳統滑鼠和鍵盤輸入所公開的任何互動和體驗。 UI Automation透過五個元件啟用程式設計存取:
UI Automation樹狀目錄有助於巡覽 UI 的結構。 此樹狀目錄是由 hWnd 的集合建置而成。 如需詳細資訊,請參閱 UI 自動化樹狀目錄概觀。
自動化項目是 UI 中的個別元件。 這些元件通常比 hWnd 更細微。 如需詳細資訊,請參閱 UI 自動化控制項型別概觀。
自動化屬性提供了關於 UI 項目的特定資訊。 如需詳細資訊,請參閱 UI 自動化屬性概觀。
控制項模式定義控制項功能的特定層面,可以包含屬性、方法、事件和結構資訊。 如需詳細資訊,請參閱 UI 自動化控制項模式概觀。
自動化事件會提供事件通知和資訊。 如需詳細資訊,請參閱 UI 自動化事件概觀。
測試自動化的主要屬性
在 UI 中唯一識別並後續找出任何控制項的能力,可以為要在該 UI 上操作的自動化測試應用程式提供基礎。 用戶端和提供者使用數個 Microsoft UI Automation屬性來輔助此項功能。
AutomationID
在同層級之間以唯一的方式識別自動化項目。 AutomationIdProperty 並未當地語系化,與發行多國語言版本的產品時通常會當地語系化的屬性 (例如 NameProperty) 不同。 請參閱使用 AutomationID 屬性。
![]() |
---|
AutomationIdProperty 不保證整個自動化樹狀目錄中的唯一識別。例如,應用程式可能會包含具有多個最上層功能表項目的功能表控制項,而這些項目也有多個子功能表項目。這些次要功能表項目可以由一般配置 (例如 "Item1, Item 2, Item3, etc.") 所識別,因此在最上層功能表項目中子系可以有重複的識別項。 |
ControlType
識別自動化項目所代表的控制項型別。 重要的資訊可以從對控制項型別的了解加以推斷。 請參閱 UI 自動化控制項型別概觀。
NameProperty
這是識別或說明控制項的文字字串。 NameProperty 應小心使用,因為它可以當地語系化。 請參閱 UI 自動化屬性概觀。
在測試應用程式中實作 UI 自動化
加入 UI 自動化參考 |
以下列出 UI 自動化用戶端所需的 UI Automation dll。
|
加入 System.Windows.Automation 命名空間 |
這個命名空間包含 UI 自動化用戶端使用 UI Automation功能 (文字處理除外) 時需要的所有要件。 |
加入 System.Windows.Automation.Text 命名空間 |
這個命名空間包含 UI 自動化用戶端使用 UI Automation文字處理時需要的所有要件。 |
尋找想要的控制項 |
自動化測試指令碼會在自動化樹狀目錄中尋找代表相關控制項的 UI 自動化項目。 您可透過多種方式使用程式碼取得 UI 自動化項目。
![]()
您可以使用能條列控制項 UI Automation屬性的工具 (例如 UISpy.exe (UI Spy)) 來取得 AutomationIdProperty。
請參閱取得 UI 自動化項目 |
取得控制項模式 |
控制項模式會公開功能類似之控制項的一般行為。 找到需要測試的控制項之後,自動化測試指令碼會從這些 UI 自動化項目中取得想要的控制項模式, 例如,代表一般按鈕功能的 InvokePattern 控制項模式,或是代表視窗功能的 WindowPattern 控制項模式。 請參閱 UI 自動化控制項模式概觀。 |
自動化 UI |
自動化測試指令碼現在可以使用 UI Automation控制項模式公開的資訊和功能,從 UI 架構中控制想要的任何 UI。 |
相關工具和技術
有一些相關工具和技術會支援使用 UI Automation來進行自動化測試。
UISpy.exe (UI Spy) 是graphical user interface (GUI) 應用程式,可同時針對提供者和用戶端開發與偵錯收集 UI Automation的資訊。 UI Spy 包含在 Windows Software Development Kit (SDK) 中。
UIAutoCmd 是功能與 UI Spy 類似的命令列工具。
MSAABridge 會將 UI Automation資訊公開給 Active Accessibility 用戶端。 橋接 UI Automation至 Active Accessibility 的主要目標是,提供現有 Active Accessibility 用戶端與任何架構 (已經實作 UI Automation) 互動的能力。
安全性
如需安全性資訊,請參閱 UI 自動化安全性概觀。