使用 UI 自动化进行自动化测试

更新:2007 年 11 月

本概述描述如何在自动化测试方案中将 Microsoft UI 自动化用作编程访问的框架。

UI 自动化提供了统一的对象模型,通过此模型,所有用户界面 (UI) 框架能够以可访问、可轻松自动执行的方式公开丰富的复杂功能。

UI 自动化是作为 Microsoft Active Accessibility 的后继产品开发的。Active Accessibility 是旨在提供使控件和应用程序可访问的解决方案的一个现有框架。Active Accessibility 在当初设计时未考虑测试自动化,但是由于辅助功能和自动化的要求极其相似,它最终发展成为具备此功能。经过专门设计的 UI 自动化除了提供更完善的辅助功能解决方案外,还提供强大的自动化测试功能。例如,Active Accessibility依赖一个界面来显示有关 UI 的信息,并收集 AT 产品所需的信息;而 UI 自动化会将这两个模型区分开来。

提供程序和客户端必须实现 UI 自动化才能将其用作自动化测试工具。UI 自动化提供程序是基于 Microsoft Windows 操作系统的应用程序(如 Microsoft Word、Excel 以及其他第三方应用程序)或控件。UI 自动化客户端包括自动测试脚本和辅助技术应用程序。

说明:

此概述的目的在于公开 UI 自动化的新增及改进的自动化测试功能。此概述并不提供有关辅助功能的信息,只有在必要时才会提到这些功能。

本主题包括下列各节。

  • 提供程序中的 UI 自动化
  • 客户端中的 UI 自动化
  • 相关的工具和技术
  • 安全性
  • 相关主题

提供程序中的 UI 自动化

对于要自动化的 UI,应用程序或控件的开发人员必须查看最终用户使用标准键盘和鼠标交互,可对 UI 对象执行哪些操作。

在确定这些键操作后,应在控件上实现相应的 UI 自动化控件模式(即镜像 UI 元素的功能和行为的控件模式)。例如,当用户与组合框控件(如“运行”对话框)交互时,通常需要展开和折叠组合框,以隐藏或显示项列表、从该列表中选择项或者通过键盘输入添加新值。

说明:

对于其他辅助功能模型,开发人员必须直接从各个按钮、菜单或其他控件收集信息。不便之处在于,每种控件类型都具有大量辅助的变体。也就是说,尽管某个按钮的十种变体全都以相同的方式工作且执行相同的功能,也必须将它们全部视为唯一控件。无法知道这些控件在功能上是否相同。所开发的控件模式可以表示这些常见的控件行为。有关更多信息,请参见 UI 自动化控件模式概述

实现 UI 自动化

如前所述,如果没有 UI 自动化提供的统一模型,则测试工具和开发人员必须了解框架特定的信息才能公开该框架中控件的属性和行为。由于在任一时间点,Windows 操作系统中可能存在多个不同的 UI 框架(包括 Win32、Windows 窗体和 Windows Presentation Foundation (WPF)),因此,对多个含有类似控件的应用程序进行测试将是一项极其困难的任务。例如,下表概述了在检索与按钮控件相关联的名称(或文本)时所需的框架特定属性名,并显示了单个等效的 UI 自动化属性。

UI 自动化控件类型

UI 框架

框架特定的属性

UI 自动化属性

Button

Windows Presentation Foundation

Content

NameProperty

Button

Win32

Caption

NameProperty

Image

HTML

alt

NameProperty

UI 自动化提供程序负责将其控件的框架特定属性映射到等效的 UI 自动化属性。

托管代码的 UI 自动化提供程序中提供了有关在提供程序中实现 UI 自动化的信息。UI 自动化控件模式UI 自动化文本模式中提供了有关实现控件模式的信息。

客户端中的 UI 自动化

许多自动化测试工具和方案的目标是以一致且可重复的方式操作用户界面。该目标的范围包括从对特定的控件进行单元测试,到录制并播放一些测试脚本以便对一组控件循环执行一系列常规操作。

自动化应用程序存在的问题是难以将测试与动态目标同步。这种动态目标的示例包括显示当前运行应用程序的列表的列表框控件(Windows 任务管理器中就包含这种列表框控件)。由于该列表框中的项是不受测试应用程序的控制而动态更新的,因此总是无法在列表框中重复选择到前后一致的特定项。尝试在不受测试应用程序控制的 UI 中重复简单的焦点更改时,也会产生类似的问题。

编程访问

使用编程访问可以通过代码模仿由传统鼠标和键盘输入展开的任何交互和体验。UI 自动化通过五个组件实现编程访问:

  • 借助 UI 自动化树,可以方便地在 UI 结构中导航。树是基于 hWnd 的集合生成的。有关更多信息,请参见 UI 自动化树概述

  • 自动化元素是 UI 中的独立组件。这些组件的粒度级通常高于 hWnd。有关更多信息,请参见 UI 自动化控件类型概述

  • 自动化属性提供有关 UI 元素的特定信息。有关更多信息,请参见 UI 自动化属性概述

  • 控件模式定义了控件功能的特定方面;控件模式可以由属性、方法、事件和结构信息组成。有关更多信息,请参见 UI 自动化控件模式概述

  • 自动化事件提供事件通知和信息。有关更多信息,请参见 UI 自动化事件概述

测试自动化的关键属性

由于可以对 UI 中的任何控件进行唯一标识,并且以后还能查找该控件,因此,自动化测试应用程序可在此基础上对该 UI 执行相应的操作。客户端和提供程序使用一些 Microsoft UI 自动化属性来帮助实现此功能。

AutomationID

唯一地标识 自动化元素,将其与同级相区分。AutomationIdProperty 不同于 NameProperty 等属性,前者并未经过本地化;而对于后者,如果产品需要以多种语言提供,则这些属性通常已本地化。请参见使用 AutomationID 属性

说明:

AutomationIdProperty 不保证整个自动化树使用唯一标识。例如,一个应用程序可能包含具有多个顶级菜单项的菜单控件,而这些顶级菜单项又具有多个子菜单项。可以通过常规架构(如“Item1、Item2、Item3 等”)标识这些二级菜单项,并允许顶级菜单项中的子菜单项使用重复的标识符。

ControlType

标识由自动化元素表示的控件类型。通过了解控件类型可以推断出重要的信息。请参见 UI 自动化控件类型概述

NameProperty

这是标识或说明控件的文本字符串。应谨慎使用 NameProperty,因为它可以本地化。请参见 UI 自动化属性概述

在测试应用程序中实现 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 自动化元素。

说明:

可以通过使用工具(如能够详细列举控件的 UI 自动化属性的 UI Spy (UISpy.exe))来获取 AutomationIdProperty

  • 使用 TreeWalker 类遍历整个 UI 自动化树或其子集。

  • 跟踪焦点。

  • 使用控件的 hWnd。

  • 使用屏幕定位,如鼠标光标的定位。

请参见 获取 UI 自动化元素

获取控件模式

控件模式公开在功能上相似的控件的常见行为。

找到需要测试的控件之后,自动测试脚本从这些 UI 自动化元素获取相关的控件模式。例如,用于典型按钮功能的 InvokePattern控件模式或用于窗口功能的 WindowPattern控件模式。

请参见 UI 自动化控件模式概述

自动化 UI

自动测试脚本现在可以使用 UI 自动化控件模式公开的信息和功能来控制 UI 框架中的任何相关 UI。

相关的工具和技术

有许多支持自动测试 UI 自动化的相关工具和技术。

  • UI Spy (UISpy.exe) 是一个图形用户界面 (GUI) 应用程序,可用于收集提供程序和客户端的开发和调试的 UI 自动化信息。UI Spy 包括在 Windows 软件开发工具包 (SDK) 中。

  • UIAutoCmd 是功能与 UI Spy 相似的命令行工具。

  • MSAABridge 向 Active Accessibility客户端显示 UI 自动化信息。将 UI 自动化桥接到 Active Accessibility的主要目的是使现有的 Active Accessibility客户端具有与已实现 UI 自动化的任何框架进行交互的能力。

安全性

有关安全性的信息,请参见 UI 自动化安全性概述

请参见

其他资源

UI 自动化基础知识