深入探讨WPF UI自动化模型

开发 开发工具 自动化
WPF UI自动化模型提供统一的控制模式,其中包括两个部分,分别为:UI自动化服务提供者和UI自动化客户程序等。

我们在这里将会为初学WPF的朋友带来有关WPF UI自动化模型的一些概念介绍。希望大家可以通过本文介绍的基础知识,充分掌握这一技术。#t#

现有技术下实现UI自动化测试系统开发需要通过不同方法获得和展现UI元素信息,开发人员需要花费大量的时间和精力去搜集这些必需的UI元素信息,而不能集中精力于系统特征和功能的实现上。

借助于WPF UI自动化模型所提供的统一的控制模式,通过其等价的名字属性 (NameProperty) 就可以轻松实现对不同UI元素的统一控制。UI自动化技术减少了此类应用系统的开发成本,将成为下一代辅助访问技术产品和自动化测试系统主要的界面信息资源提供者。

UI自动化包括两部分。UI自动化服务提供者 (UI Automation Providers) 和UI自动化客户程序 (UI Automation Clients) 。UI自动化服务提供者是提供UI自动化服务的应用程序,比如Word, Excel及其它基于Windows的应用程序 等,为用户通过辅助程序技术对其访问提供支持。UI自动化客户端程序是实现用户界面自动化访问的辅助技术程序,比如Word和Excel中供应用程序访问的对象模型及其宏脚本等。

相应的,对开发人员来说,可以通过调用UI自动化提供者应用程序接口(UI Automation Providers API)创建用户界面控制元素,也可以通过调用UI自动化客户端应用程序接口(UI Automation Clients API)创建应用程序,通过UI自动化核心层与UI自动化界面控制元素进行通讯。

WPF UI自动化模型通过把界面上一个个的UI元素作为自动化元素 (AutomationElement)暴露给客户端应用程序供其调用。所有UI自动化元素组成以桌面(Desktop)为根节点的树型层次结构,树状结构包含所有正在运行的应用程序,每一个正在运行的应用程序都是这个根的子节点,其每一个可能与用户进行互动的界面元素都是一系列层次化的自动化元素(AutomationElement)。

树型层次结构通过原始视图(Raw View) 的形式展现给客户端,客户端可以通过过滤自动化元素树的原始视图 (Raw View) ,得到控制项视图 (Control View) 和内容项视图 (Content View) 。 NET3.0提供UI 探测程序UISpy.exe供开发人员调用以察看UI自动化元素视图。

自动化元素 ( AutomationElement)对象包括UI元素在界面上所呈现的两类共有属性。一个是控制类型属性(Control Type),控制类型属性定义界面元素的基本表现形式和功能,并以此作为单一的识别实体。

比如,按钮Button类型或者多选框Check Box类型。一个是控制模式(Control Patterns),控制模式提供一个统一的方法来构建和表达控制类型所拥有的功能。比如,可以对拥有被调用功能的控制类型比如按钮Button类型使用调用模式,对编辑类控制类型使用文本模式等。

控制模式通过公开方法调用使客户端得到界面元素进一步的详细信息并提供输入。微软鉴别出18种控制模式,通过这18种控制模式可以展现出任何类UI元素及其任意组合所能实现的所有事情。

注意,WPF UI自动化模型中的控制类型和控制模式之间并不是一一对应的关系。一个控制模式可以被多种控制类型支持,一个控制类型也可以支持多种控制模式,每一个组合都展现其不同的行为样式。

比如,一个下拉框类型(Combo Box)具有至少两种控制模式:一个是呈现其折叠和展开能力的模式(ExpandCollapsePattern),另一个是呈现其选择项的可选择模式(SelectionItemPattern)。
 

责任编辑:曹凯 来源: IT168
相关推荐

2009-12-23 16:33:34

WPF UI自动化测试

2009-12-23 16:13:00

WPF Attache

2009-12-25 14:18:03

WPF依赖属性

2009-12-29 15:24:48

WPF对话框

2013-07-11 09:45:48

扁平化扁平化设计

2009-12-25 10:20:28

WPF窗口

2009-12-23 16:19:25

WPF UI自动化技术

2010-07-21 09:38:15

PHP缓存技术

2010-11-22 14:18:32

MySQL锁机制

2021-05-17 05:36:02

CSS 文字动画技巧

2009-11-20 17:17:08

Oracle函数索引

2011-02-25 09:23:00

Java类加载器

2015-09-02 08:57:56

JavaHashMap工作原理

2010-03-31 14:58:03

云计算

2010-03-05 13:44:00

Python序列

2009-08-27 11:27:58

foreach语句C# foreach语

2023-01-12 17:18:06

数据库多云

2009-10-16 09:17:39

屏蔽布线系统

2009-12-07 13:55:58

PHP array_m

2009-12-07 16:07:03

PHP类的继承
点赞
收藏

51CTO技术栈公众号