MS UI Automation简介

转自:http://blog.csdn.net/ffeiffei/article/details/6637418

MS UI Automation(Microsoft User Interface Automation:UIA)是随.net framework3.0一起发布的,虽然在如今这个几乎每天都有各种新名词、新技术出来的所谓的21世纪,它显得已经有些过时了。前些日子,正好一个项目,可以用到它,又重新整理了一下:

什么是MS UI Automation

MS UI Automation是MSAA技术的一个替代品:即让控件和应用程序具有更好的可达性(accessible),关于软件的可达性,具体大家可参考一本<<Engineering Software for Accessibility>>的书,该书结合MS UIA,讲述了如何在软件开发的整个生命周期中,让软件具备可达性。回到MS UIA,简单来讲,它就是几个dll,提供了一套API和Interface,及其相应的模式,让软件的开发者遵循该模式去实现相应的interface,从而软件的使用者(不仅仅是客户,还包括例如测试人员想编写一些自动化测试代码来完成程序相关的业务逻辑)能更好的使用该软件。

和原来的MSAA相比较:UIA重新设计了一套架构,无论是对传统的winform,还是新的wpf,定义了一套统一的模型;其API的使用也相对更简单;同时,和.net framework 3.0一起,也有个UISpy的工具,能辅助大家来使用UIA。

UIA之架构

MS UIA明确定义了两个role:UIA Provider即软件本身,主要是软件的开发人员依据相应的模式去实现相关的interface, UIA Client即自动化脚本和相关的assistive technology applications,从测试人员的角度出发,主要是调用相应的API去实现自动化测试脚本

UIA Provider: 开发人员确定控件行为并实现对应的UIA control pattern,对于标准控件而言,默认是支持UIA的,而对于自定义的控件,需要实现该控件的行为对应于UIA所定义的interface。

UIA Client:相对而言,UIA Client则简单了很多,只需调用相关的UIA API去完成自动化测试脚本。

二者的一个简单关系可参考下图:

UIA主要有4个DLL:UIAutomationProvider.dll,定义了各种行为的interface,例如,假设有个自定义的控件,开发人员觉得它需要支持Dock行为,就需要实现IDockProvider接口。UIAutomaitonClient.dll,定义了各种控件模式,以及一些用来支持更好的定位控件的辅助条件搜索类。UIAutomationCore.dll则是用来支持UIA provider和client之间的通信的。UIAutomationClientssideProviders.dll则主要是用来支持传统的winform的标准控件的。其关系可参考下图:

UIA之Tree Model

在UIA中,程序UI的每一个部分都被认为是一个AutomationElement类,他们是一个树状的结构,Desktop被认为是每个windows based app的UIA树状图的根,从类的定义中,我们也可以看到一个AutomationElement类中有一个static的RootElement属性。

该树的结构中,一共有3中View Model,分别为Raw View, Control View和Content View。Raw View提供的信息最多,也是其他view的基础,最贴近于程序本身的编程结构;Control View是Raw View的子集,它最贴近于最终用户所能感知的UI结构,但是它不包含不能和用户相互交互的一些UI,例如listview的header,toolbar等等。而Content View则是Control View的一个子集,它只包含能和用户直接交互真实信息的控件,比如接受键盘输入的Textbox,选择不同值的Combobox;而诸如lable等控件则不会包含在其中。大家可以打开UISpy,针对某个application,看看3个view有什么不同,这样会有一个比较直观的认识。

UIA之Control Pattern

UIA大概一共定义了38种pattern,代表了常用的控件行为,他们也会提供一些具体的功能性的属性。对于UIA Provider来说,所做的事情就是定义控件相关的行为,找到该行为对应的模式,并实现该模式;对于client而言,即访问相关的方法和属性,来实现自动化。如某个控件需要有ValuePattern,则provider和client相对应的则为:

Clients

Provider

Description

ValuePattern

IValuePattern

Set or get value

UIA之Properties

每个property都由一个数字和名字来标识,provider用数字ID来确定属性请求;而client则用AutomationProperty类获取具体的某一属性的内容。

UIA之Events

UIA是采用订阅模型,而不是以前的广播事件模型。定义了四种事件类型:Property change,Element action,Structure change和Global desktop change。

几个关键的类的关系

如果利用UIA做自动化测试,用得最多的几个类就是AutomatonElement,各种Pattern以及几种辅助搜索的Condition,它们都在UIAutomationClent.dll的System.Windows.Automation的名字空间下:

AutomationElement类中,定义了各种常用的控件属性,事件以及我们开始提到的RootElement;每个属性都是一个AutomationProperty类型;而每个事件都是AutomationEvent类型,它们都继承自AutomationIdentifier类。

而对于每个Pattern而言,则定义了该Pattern所支持的的常用的方法和属性。

关于UIA的几个学习链接

MSDN:http://msdn.microsoft.com/en-us/library/ms753107.aspx

同样是来自MSDN的一篇文章,有一个详实的例子:http://msdn.microsoft.com/en-us/magazine/cc163288.aspx

还有一篇blog,手把手的介绍如何用UIA做自动化测试:http://www.cnblogs.com/kangyi/archive/2009/09/08/1549411.html

时间: 2024-09-27 03:29:40

MS UI Automation简介的相关文章

MS UI Automation Introduction

MS UI Automation Introduction 2014-09-17 MS UI Automation是什么 UIA架构 UI自动化模型 UI自动化树概述 UI自动化控件模式概述 UI 自动化属性概述 UI 自动化事件概述 示例 使用UISpy工具 UI自动化提供者 常见问题分析解决 控件无法识别 Timing issue 本地化问题 自动化技术和自动化框架 参考 MS UI Automation是什么[1] 返回 UI Automation 就是用另一个程序来控制UI 程序,模拟用

UI Automation 简介

转载,源地址: http://blog.csdn.net/ffeiffei/article/details/6637418 MS UI Automation(Microsoft User Interface Automation:UIA)是随.net framework3.0一起发布的,虽然在如今这个几乎每天都有各种新名词.新技术出来的所谓的21世纪,它显得已经有些过时了.前些日子,正好一个项目,可以用到它,又重新整理了一下: 什么是MS UI Automation MS UI Automati

UI Automation

Introduction UI Automation是Microsoft .NET 3.0框架下提供的一种用于自动化测试的技术,是在MSAA基础上建立的,MSAA就是Microsoft Active Accessibility.UI Automation在某些方面超过了MSAA,UI自动化提供了Windows Vista中,微软Windows XP的全部功能,和Windows Server 2003. 在UI Automation中,所有的窗体.控件都表现为一个AutomationElement

iOS instruments之ui automation的简单使用(高手绕道)

最近使用了几次instruments中的automation工具,现记录下automation的简单使用方法,希望对没接触过自动化测试又有需求的人有所帮助.  UI 自动测试是iOS 中重要的附加功能,它由名为"Automation"的新的工具对象支持.Automation工具的脚本是用JavaScript语言编写,主要用于分析应用的性能和用户行为,模仿/击发被请求的事件,利用它可以完成对被测应用的简单的UI测试及相关功能测试. 一. 简单的录制脚本 打开xcode,这里用我为我家亲爱

关于UI Automation框架

微软提供的UI Automation框架给开发windows平台的自动化测试带来了很大的便利,这里就总结一下相关的代码. 首先,直接使用UI Automation框架,完成一个NotePad的about窗口中的 “OK” button的点击: 1 AutomationElement root = AutomationElement.RootElement; 2 AutomationElement about_notepad_windows = root.FindFirst( 3 TreeScop

基于UI Automation的自动化测试框架 .

http://blog.csdn.net/roger_ge/article/details/5531941 第一部分:前言 自动化测试或许是众多测试同行都在研究或准备研究的领域.结合自己的能力和公司的状况,选择合适的自动化工具.搭建正确而又高效的框架或许是个永远讨论不完的话题,正如应了那句话,没有最好,只有更好. 个人所在的公司当前开展的很多项目都是基于Win7和WPF开发的,之前想尝试用QTP对之进行录制和回放操作,不幸的是,需要额外的WPF插件支持:另外QTP的脚本语言是VBScript,虽

Jacob.UIAutomation.dll (.NET UI Automation封装) - 绝对原创

  UIAutomation是微软从Windows Vista开始推出的一套全新UI自动化测试技术, 简称UIA.在最新的Windows SDK中,UIA和MSAA等其它支持UI自动化技术的组件放在一起发布,叫做Windows Automation API. UIA定义了全新的.针对UI自动化的接口和模式. 分别是支持对UI元素进行遍历和条件化查询的TreeWalker/FindAll.定义了读写UI元素属性的UIA Property, 包括Name. ID.Type.ClassName.Loc

使用UI Automation实现自动化测试--5-7

使用UI Automation实现自动化测试--5 (Winfrom和WPF中弹出和关闭对话框的不同处理方式) 在使用UI Automation对Winform和WPF的程序测试中发现有一些不同的地方,而这些不同来自于Winform与WPF的处理机制不同.下面我们通过一个简单的实例来加以说明: 实例描述 我们使用InvokePattern来点击按钮弹出一个对话框,然后点击对话框中的“确定”按钮关闭对话框. 两种方式对比 首先我们使用如下代码来针对Winfom和WPF分别进行测试: 1public

Fitnesse + Powerslim + UI Automation框架下抽取UI操作方法的思路

我们的自动化测试框架的Fitnesse + Powerslim,一般情况下会尽量避免在UI层面的操作,但是有些时候没有对应的命令行接口只能用UI去测试. Powershell里面作UI测试用得比较多的库是UI Automation,但是Powershell的语句相对来说比较繁琐,例如: Get-UIAWindow -ProcessName abc -Seconds 10 | Get-UIATab | Get-UIATabItem -Name "General"|Invoke-UIATa