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

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

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

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

提供程序和客户端都需要实现UI 自动化,以便将其用作自动化测试工具。 UI 自动化提供程序是基于Windows操作系统的应用程序,例如Microsoft Word、Microsoft Excel和其他第三方应用程序或控件。 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 内容 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 自动化属性。

properties 说明
AutomationId 唯一地区分自动化元素与其同级元素。 不需要支持 AutomationId 属性。 当它可用时,无论本地语言如何,元素的 AutomationId 属性在应用程序的任何实例中都是相同的。 尽管 AutomationId 属性在同级元素中是唯一的,但在整个桌面上它可能并不唯一。 例如,应用程序多个实例或 Microsoft Windows Explorer 中的多个文件夹视图可能包含具有相同 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 自动化安全注意事项