使用 UI 自动化进行自动测试
注意
本文档适用于想要使用 System.Windows.Automation 命名空间中定义的托管 UI 自动化类的 .NET Framework 开发人员。 有关 UI 自动化的最新信息,请参阅 Windows 自动化 API:UI 自动化。
本概述介绍如何将 Microsoft UI 自动化用作自动化测试方案中编程访问的框架。
UI 自动化提供了统一的对象模型,使所有用户界面(UI)框架能够以易于访问和轻松自动化的方式公开复杂而丰富的功能。
UI 自动化是作为 Microsoft Active Accessibility 的后续产品开发的。 活动辅助功能是一个现有框架,旨在提供使控件和应用程序易于访问的解决方案。 即使 Active Accessibility 因辅助功能和自动化非常相似的要求发展成为该角色,但在设计时并未考虑测试自动化。 UI 自动化不仅为辅助功能提供更精细的解决方案,还专门设计以提供强大的自动化测试功能。 例如,Active Accessibility 依赖于单个接口来公开有关 UI 的信息并收集 AT 产品所需的信息;UI 自动化将这两个模型分开。
提供程序和客户端都需要实现 UI 自动化,才能将其用作自动化测试工具。 UI 自动化提供程序是 Microsoft Word、Excel 等应用程序以及其他第三方应用程序或基于 Microsoft Windows 操作系统的控件。 UI 自动化客户端包括自动化测试脚本和辅助技术应用程序。
注意
本概述的目的是展示 UI 自动化的全新和改进的自动化测试功能。 本概述不旨在提供有关辅助功能的信息,除非必要,否则不会讨论辅助功能的问题。
提供程序中的 UI 自动化
若要使 UI 自动化,应用程序或控件的开发人员必须了解最终用户可以使用标准键盘和鼠标交互在 UI 对象上执行的操作。
识别这些关键操作后,应在控件上实现相应的 UI 自动化控件模式(即镜像 UI 元素的功能和行为的控件模式)。 例如,用户与组合框控件(如运行对话框)的交互通常涉及展开和折叠组合框以隐藏或显示项列表、从该列表中选择项或通过键盘输入添加新值。
注意
借助其他辅助功能模型,开发人员必须直接从单个按钮、菜单或其他控件收集信息。 遗憾的是,每个控件类型都有数十个小变体。 换句话说,即使一个推送按钮的十个变体可以以相同的方式工作并执行相同的函数,但它们都必须被视为唯一控件。 无法知道这些控件在功能上等效。 开发控件模式来表示这些常见的控件行为。 有关详细信息,请参阅 UI 自动化控件模式概述。
实现 UI 自动化
如前所述,如果没有 UI 自动化提供的统一模型,测试工具和开发人员需要了解特定于框架的信息,才能公开该框架中控件的属性和行为。 由于 Windows 操作系统(包括 Win32、Windows 窗体和 Windows Presentation Foundation(WPF)中的任何时间都存在多个不同的 UI 框架,因此,使用看似相似的控件测试多个应用程序可能是一项艰巨的任务。 例如,下表概述了检索与按钮控件关联的名称(或文本)所需的特定于框架的属性名称,并显示单个等效的 UI 自动化属性。
UI 自动化控件类型 | UI 框架 | 特定于框架的属性 | UI 自动化属性 |
---|---|---|---|
按钮 | Windows Presentation Foundation | 内容 | NameProperty |
按钮 | Win32 | 标题 | NameProperty |
映像 | 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)不同。 请参阅 Use the AutomationID Property。
备注
AutomationIdProperty 不能保证在自动化树中拥有独特身份。 例如,应用程序可能包含具有多个顶级菜单项的菜单控件,而顶级菜单项又包含多个子菜单项。 可以通过常规架构(如“Item1、Item2、Item3 等”)标识这些二级菜单项,并允许顶级菜单项中的子菜单项使用重复的标识符。
控件类型
标识由自动化元素表示的控件的类型。 可以从控制类型的知识推断出重要信息。 请参阅 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 自动化元素。 - 使用 Condition 语句查询 UI。 这通常是使用语言中立的 AutomationIdProperty 的地方。 注意: 可以使用如 Inspect.exe 之类的工具获取 AutomationIdProperty,该工具能够列出控件的 UI 自动化属性。 - 使用 TreeWalker 类遍历整个 UI 自动化树或其子集。 - 跟踪焦点。 - 使用控件的 hWnd。 - 使用屏幕定位,例如光标的定位。 请参见 Obtaining UI Automation Elements |
获取控件模式。 | 控件模式公开功能类似的控件的常见行为。 找到需要测试的控件后,自动测试脚本将从这些 UI 自动化元素获取感兴趣的控件模式。 例如,典型按钮功能的 InvokePattern 控件模式或窗口功能的 WindowPattern 控件模式。 请参阅 UI 自动化控件模式概述。 |
使 UI 自动化。 | 自动化测试脚本现在可以使用 UI 自动化控件模式所公开的信息和功能来控制 UI 框架中任何感兴趣的用户界面。 |
相关工具和技术
有许多相关工具和技术支持使用 UI 自动化进行自动测试。
Inspect.exe 是一个图形用户界面(GUI)应用程序,可用于收集提供程序和客户端开发和调试的 UI 自动化信息。 Windows SDK 中包括 Inspect.exe。
MSAABridge 向 Active Accessibility 客户端公开 UI 自动化信息。 将 UI 自动化桥接到活动辅助功能的主要目标是允许现有 Active Accessibility 客户端与实现 UI 自动化的任何框架进行交互。
安全
有关安全信息,请参阅 UI 自动化安全性概述。