使用 UI 自動化進行自動化測試
本概觀描述 Microsoft UI 自動化在自動化測試案例中做為程式設計存取的架構有何幫助。
消費者介面自動化提供統一的物件模型,可讓所有 UI 架構以無障礙且容易自動化的方式公開複雜且豐富的功能。
消費者介面自動化開發為 Microsoft Active Accessibility 的後續專案,這是一種架構,其設計目的是提供解決方案,讓控制項和應用程式可供存取。 雖然 Microsoft Active Accessibility 並未以測試自動化設計,但因為協助工具與自動化的類似需求而演進到該角色。 除了為輔助功能提供更精簡的解決方案之外,消費者介面自動化特別設計來提供健全的功能以進行自動化測試。 例如,Microsoft Active Accessibility 依賴單一介面來公開 UI 的相關資訊,以及收集輔助技術產品所需的資訊;消費者介面自動化分隔這兩個模型。
提供者和用戶端都需要實作消費者介面自動化,才能作為自動化測試控管使用。 消費者介面自動化提供者是應用程式,例如 Microsoft Word、Microsoft Excel 和其他以 Windows 作業系統為基礎的協力廠商應用程式或控制項。 使用者介面自動化用戶端則包括自動化測試指令碼和輔助技術應用程式。
本主題包含下列各節。
提供者中的消費者介面自動化
若要將使用者介面的元素自動化,開發人員必須使用標準鍵盤和滑鼠互動,查看終端使用者可以在 UI 物件上執行的動作。 識別這些重要動作之後,應該在控制項上實作鏡像 UI 元素功能和行為的消費者介面自動化控制項模式。 例如,使用者與下拉式方塊控制項的互動通常涉及展開和折迭下拉式方塊以顯示或隱藏專案清單、從清單中選取專案,或透過鍵盤輸入新增值。
藉由其他協助工具模式,開發人員必須直接從個別按鈕、功能或其他控制項收集資訊。 每個控制項類型都有數十種次要變化。 換句話說,即使推播的 10 種變化的運作方式相同,而且執行相同的函式,它們都必須視為唯一控制項。 無法得知這些控制項是否功能對等。 消費者介面自動化控制項模式是開發來表示這些常見的控制項行為。 如需詳細資訊,請參閱 UI Automation Control Patterns Overview。
若沒有消費者介面自動化所提供的控制項模式統一模型,測試控管和開發人員必須具有架構特定的資訊,才能在該架構中公開屬性和控制行為。 因為 Windows 作業系統中可以同時存在數個不同的 UI 架構,包括 Microsoft Win32、Windows Forms和Windows Presentation Foundation (WPF) ,所以使用看起來類似的控制項來測試多個應用程式是一項令人困難的工作。 例如,下表列出擷取按鈕控制項相關聯之名稱或文字所需的架構特定屬性名稱,並顯示對等的消費者介面自動化屬性。
控制項類型 | UI 架構 | 架構特定屬性 | UI 自動化屬性 |
---|---|---|---|
按鈕 | WPF | Content | Name 屬性 |
按鈕 | Win32 | Caption | Name 屬性 |
映像 | HTML | alt | Name 屬性 |
使用者介面自動化提供者會負責將其控制項的架構特定屬性對應至對等的 UI 自動化屬性。 如需在提供者中實作消費者介面自動化的詳細資訊,請參閱消費者介面自動化提供者程式設計人員指南。 如需實作控制項模式的資訊,請參閱實作消費者介面自動化控制項模式。
用戶端中的消費者介面自動化
自動化測試控管和案例的目標是 UI 的一致且可重複操作。 例如,這可以涉及單元測試特定控制項,以及錄製和執行測試腳本,以逐一查看一組控制項上的一系列一般動作。
自動化應用程式的複雜性是將測試與動態目標同步處理,例如清單方塊控制項,例如 Windows 工作管理員,顯示目前執行中的應用程式清單。 由於清單方塊中的專案會在測試應用程式的控制項之外動態更新,因此嘗試在清單方塊中重複選取具有任何一致性的特定專案。 嘗試在 UI 中重複簡單的焦點變更時,可能會發生類似問題,而 UI 不在測試應用程式的控制項之外。
程式設計存取
程式設計存取能夠透過程式碼,模擬由傳統滑鼠和鍵盤輸入所公開的任何互動和體驗。 UI 自動化透過五個元件啟用程式設計存取:
- UI 自動化樹狀結構可協助透過 UI 的結構進行導覽。 樹狀結構是從 HWND的集合建置。 如需詳細資訊,請參閱樹狀結構概觀消費者介面自動化。
- 自動化元素是 UI中的個別元件。 這些通常比 HWND更細微。
- 自動化屬性提供了關於 UI 元素的特定資訊。 如需詳細資訊,請參閱 UI Automation Properties Overview。
- 控制項模式定義控制項功能的特定層面,可以包含屬性、方法、事件和結構資訊。 如需詳細資訊,請參閱 UI Automation Control Patterns Overview。
- 自動化事件會提供事件通知和資訊。 如需詳細資訊,請參閱 UI Automation Events Overview。
測試自動化的主要屬性
在 UI 中唯一識別及後續找出任何控制項的能力,提供自動化測試應用程式在該 UI 上運作的基礎。 下表說明用戶端和提供者用來識別和尋找控制項的消費者介面自動化屬性。
屬性 | 描述 |
---|---|
AutomationId | 唯一地區分自動化專案與其同層級專案。 不需要 AutomationId 屬性的支援。 當它可供使用時,不論本機語言為何,專案的任何實例中的 AutomationId 屬性都相同。 雖然 AutomationId 屬性在同層級元素之間是唯一的,但在整個桌面上可能不是唯一的。 例如,應用程式多個實例或 Microsoft Windows 檔案總管中的多個資料夾檢視可能包含具有相同 AutomationIdProperty 的專案,例如 「SystemMenuBar」。 用戶端不應假設其他應用程式所公開的 AutomationId。 AutomationId 不保證可在應用程式的不同版本或組建之間穩定。 |
ControlType | 識別自動化項目所代表的控制項類型。 重要的資訊可以從對控制項類型的了解加以推斷。 如需詳細資訊,請參閱 UI Automation Control Types Overview。 |
名稱 | 識別或說明自動化專案用途的文字字串。 它應該謹慎使用,因為它可以當地語系化。 Name 屬性不是同層級之間的唯一識別碼。 針對測試自動化,用戶端應該改用 AutomationId 屬性或 RuntimeId 屬性。 |
RuntimeId | 整數陣列,表示自動化專案的識別碼。 識別碼在桌面上是唯一的,但保證只對產生該識別碼之桌面的 UI 是唯一的。 識別碼可以隨著時間重複使用。 使用 IUIAutomation::CompareElements 來判斷目前具有特定執行時間識別碼的專案是否與先前具有該識別碼的元素相同。 此外,RuntimeId 屬性的格式可能會變更。 它應該視為不透明值,並僅用於比較;例如,若要判斷自動化專案是否位於快取中。 |
相關工具和技術
檢查 (Inspect.exe) 是以 Windows 為基礎的工具,可用來收集提供者和用戶端開發和偵錯的消費者介面自動化資訊。 Windows 軟體發展工具組 (SDK) 包含檢查。
相關主題