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