UI 自动化树概述

注意注意

本文档的目标读者是欲使用 System.Windows.Automation 命名空间中定义的托管 UI Automation类的 .NET Framework 开发人员。有关 UI Automation的最新信息,请参见 Windows Automation API: UI Automation(Windows 自动化 API:UI 自动化)。

辅助技术产品和测试脚本通过在 UI Automation树中导航来收集有关 user interface (UI) 及其元素的信息。

UI Automation树中有一个表示当前桌面的根元素 (RootElement),该元素的子元素表示应用程序窗口。 其中的每个子元素都可以包含表示 UI 各个部分(如菜单、按钮、工具栏和列表框)的元素。 这些子元素又可以包含列表项之类的元素。

UI Automation树的结构不固定,由于它可能包含数千个元素,因此它很少全部显示出来。 您可以根据需要生成树的某些部分,当您添加、移动或移除元素时,树也会进行更改。

UI 自动化提供程序通过实现片段(由一个通常承载在窗口中的根元素和一个子树组成)中各项之间的导航来支持 UI Automation树。 但是,提供程序并不参与控件之间的导航。 控件之间的导航是由 UI Automation核心借助于默认窗口提供程序中的信息来管理的。

本主题包括下列各节。

  • 自动化树的视图
  • 相关主题

自动化树的视图

可以对 UI Automation树进行筛选,以便创建仅包含那些与特定客户端有关的 AutomationElement 对象的视图。 此方法允许客户端根据各自的具体需要来自定义通过 UI Automation表示的结构。

客户端可以通过以下两种方法来自定义视图:设置范围和筛选。 设置范围是指从基元素开始定义视图的范围,例如,应用程序可能希望仅查找桌面的直接子级,或者查找某个应用程序窗口的所有子代。 筛选是指定义要包括在视图中的元素类型。

UI 自动化提供程序通过定义元素的属性(包括 IsControlElementPropertyIsContentElementProperty 属性)来支持筛选。

UI Automation提供三个默认视图。 这些视图是由所执行的筛选类型定义的;任何视图的范围都是由应用程序定义的。 另外,应用程序可以向属性应用其他筛选器,例如,在控件视图中仅包含已启用的控件。

原始视图

UI Automation树的原始视图是 AutomationElement 对象的完整树,该树的根元素是桌面。 原始视图完全遵循应用程序的本机编程结构,因此是最详细的可用视图。 原始视图还是其他树视图的生成基础。 由于原始视图取决于基础 UI 框架,因此 WPF 按钮的原始视图将与 Win32 按钮的原始视图不同。

原始视图是通过以下方法来获取的:在不指定属性的情况下搜索元素,或者使用 RawViewWalker 在树中导航。

控件视图

由于 UI Automation树的控件视图紧密映射到由最终用户查看的 UI 结构,因此它能使辅助技术产品更轻松地完成向最终用户描述 UI 并帮助最终用户与应用程序交互的任务。

控件视图是原始视图的子集。 它包括原始视图中的所有 UI 项,最终用户会将这些项理解为 UI 中控件逻辑结构的交互式项或构成项。 例如,列表视图标题、工具栏、菜单和状态栏等项容器构成了 UI 逻辑结构,但其本身并不是交互式 UI 项。 仅针对布局设计或修饰目的而使用的非交互式项在控件视图中不显示。 仅为了将控件放置在对话框中而本身不包含任何信息的面板就是这样的项。 对话框中包含信息和静态文本的图形是在控件视图中显示的非交互式项。 控件视图中包括的非交互式项不能接收键盘焦点。

控件视图是通过以下方法获取的:搜索 IsControlElement 属性设置为 true 的元素,或者使用 ControlViewWalker 在树中导航。

内容视图

UI Automation树的内容视图是控件视图的子集。 内容视图中包含用来在用户界面中传达真正信息的 UI 项(包括可以接收键盘焦点的 UI 项,以及一些不是 UI 项标签的文本)。 例如,下拉组合框中的值将出现在内容视图中,因为它们表示正由最终用户使用的信息。 在内容视图中,组合框和列表框均表示为 UI 项的集合,在该集合中,可以有一项(或多项)处于选中状态。 由于内容视图旨在显示要呈现给用户的数据或内容,因此,内容视图中不存在如下情况:始终有一项处于打开状态,而另有一项是可以展开和折叠的。

内容视图是通过以下方法获取的:搜索 IsContentElement 属性设置为 true 的元素,或者使用 ContentViewWalker 在树中导航。

请参见

参考

AutomationElement

概念

UI 自动化概述