UI 自动化树概述

备注

本文档适用于想要使用 System.Windows.Automation 命名空间中定义的托管 UI 自动化类的 .NET Framework 开发人员。 有关 UI 自动化的最新信息,请参阅 Windows 自动化 API:UI 自动化

辅助技术产品和测试脚本通过在 UI 自动化树中导航来收集有关用户界面 (UI) 及其元素的信息。

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

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

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

自动化树的视图

可对 UI 自动化树进行筛选,来创建仅包含与特定客户端相关的 AutomationElement 对象的视图。 通过此方法,客户端可根据各自的具体需求来自定义通过 UI 自动化表示的结构。

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

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

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

原始视图

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

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

控件视图

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

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

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

内容视图

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

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

请参阅