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

本概述介绍可如何将 Microsoft UI 自动化用作一个用于在自动测试方案中进行编程访问的框架。

UI 自动化提供了一个统一的对象模型,使所有 UI 框架能够以易于访问且易于自动化的方式公开复杂而丰富的功能。

UI 自动化是作为 Microsoft Active Accessibility 的后继者开发的,该框架旨在提供使控件和应用程序易于访问的解决方案。 Microsoft Active Accessibility 在设计时没有考虑到测试自动化,尽管由于辅助功能和自动化方面的类似要求,它已演变为该角色。 除了为辅助功能提供更完善的解决方案外,UI 自动化还专为自动测试提供可靠的功能而设计。 例如,Microsoft Active Accessibility 依赖于单个界面来公开有关 UI 的信息并收集辅助技术产品所需的信息;UI 自动化分隔两个模型。

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

本主题包含以下各节:

提供程序中的UI 自动化

若要自动执行用户界面的元素,开发人员必须查看最终用户可以使用标准键盘和鼠标交互对 UI 对象执行的操作。 确定这些关键操作后,应在控件上实现镜像 UI 元素功能和行为的UI 自动化控件模式。 例如,用户与组合框控件的交互通常涉及展开和折叠组合框以显示或隐藏项列表、从列表中选择项目或通过键盘输入添加新值。

对于其他辅助功能模型,开发人员必须直接从各个按钮、菜单或其他控件收集信息。 每个控件类型都有数十种次要变化。 换句话说,即使按钮的 10 个变体以相同的方式工作并执行相同的功能,它们也必须被视为唯一控件。 无法知道这些控件在功能上是否相同。 UI 自动化控件模式的开发用于表示这些常见的控件行为。 有关详细信息,请参阅 UI Automation Control Patterns Overview

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

控件类型 UI 框架 特定于框架的属性 UI 自动化属性
Button WPF Content Name 属性
Button Win32 Caption Name 属性
映像 HTML Alt Name 属性

 

UI 自动化提供程序负责将其控件的特定于框架的属性映射到等效的 UI 自动化属性。 有关在提供程序中实现UI 自动化的信息,请参阅UI 自动化提供程序程序员指南。 有关实现控件模式的信息,请参阅实现UI 自动化控件模式

客户端中的UI 自动化

自动化测试工具和方案的目标是对 UI 进行一致且可重复的操作。 例如,这可以涉及单元测试特定控件,以及记录和运行循环访问一组控件的一系列泛型操作的测试脚本。

自动化应用程序中的一个复杂情况是难以将测试与动态目标同步,例如,显示当前正在运行的应用程序列表的列表框控件(例如 Windows 任务管理器)。 由于列表框中的项在测试应用程序的控制之外动态更新,因此无法尝试在列表框中重复选择具有任何一致性的特定项。 尝试在测试应用程序控制之外的 UI 中重复简单的焦点更改时,可能会出现类似的问题。

以编程方式访问

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

  • 借助 UI 自动化树,可以方便地在 UI 结构中导航。 树是从 HWND的集合生成的。 有关详细信息,请参阅UI 自动化树概述
  • 自动化元素是 UI 中的独立组件。 这些通常比 HWND 更精细。
  • 自动化属性提供有关 UI 元素的特定信息。 有关更多信息,请参见 UI Automation Properties Overview
  • 控件模式定义了控件功能的特定方面;控件模式可以由属性、方法、事件和结构信息组成。 有关详细信息,请参阅 UI Automation Control Patterns Overview
  • 自动化事件提供事件通知和信息。 有关更多信息,请参见 UI Automation Events Overview

测试自动化的关键属性

在 UI 中唯一标识并随后查找任何控件的功能为自动测试应用程序在该 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 确定当前具有特定运行时 ID 的元素是否与以前具有该 ID 的元素相同。 此外,RuntimeId 属性的格式可能会更改。 应将其视为不透明值,仅用于比较;例如,确定自动化元素是否在缓存中。

 

检查 (Inspect.exe) 是一种基于 Windows 的工具,可用于收集提供程序和客户端开发和调试UI 自动化信息。 检查包含在 Windows 软件开发工具包 (SDK) 中。

UI 自动化安全注意事项