转载,源地址: 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

UI Automation 简介的更多相关文章

  1. MS UI Automation简介

    转自:http://blog.csdn.net/ffeiffei/article/details/6637418 MS UI Automation(Microsoft User Interface A ...

  2. MS UI Automation Introduction

    MS UI Automation Introduction 2014-09-17 MS UI Automation是什么 UIA架构 UI自动化模型 UI自动化树概述 UI自动化控件模式概述 UI 自 ...

  3. UI Automation Test

    UI Automation test is based on the windows API. U can find the UI Automation MSDN file from http://m ...

  4. 使用UI Automation实现自动化测试 --工具使用

    当前项目进行三个多月了,好久也没有写日志了:空下点时间,补写下N久没写的日志 介绍下两个工具 我本人正常使用的UISpy.exe工具和inspect.exe工具 这是UISPY工具使用的图,正常使用到 ...

  5. Server-Side UI Automation Provider - WPF Sample

    Server-Side UI Automation Provider - WPF Sample 2014-09-14 引用程序集 自动化对等类 WPF Sample 参考 引用程序集 返回 UIAut ...

  6. Client-Side UI Automation Provider - WinForm Sample

    Client-Side UI Automation Provider -  WinForm Sample 2014-09-15 源代码 目录 引用程序集实现提供程序接口分发客户端提供程序注册和配置客户 ...

  7. Server-Side UI Automation Provider - WinForm Sample

    Server-Side UI Automation Provider - WinForm Sample 2014-09-14 源代码  目录 引用程序集提供程序接口公开服务器端 UI 自动化提供程序从 ...

  8. 从UI Automation看Windows平台自动化测试原理

    前言 楼主在2013年初研究Android自动化测试的时候,就分享了几篇文章 Android ViewTree and DecorView Android自动化追本溯源系列(1): 获取页面元素 An ...

  9. 开源自己用python封装的一个Windows GUI(UI Automation)自动化工具,支持MFC,Windows Forms,WPF,Metro,Qt

    首先,大家可以看下这个链接 Windows GUI自动化测试技术的比较和展望 . 这篇文章介绍了Windows中GUI自动化的三种技术:Windows API, MSAA - Microsoft Ac ...

随机推荐

  1. 用SQL语句操作数据库

    —―有一天,当你发觉日子特别的艰难,那可能是这次的收获将特别的巨大.—―致那些懈怠的岁月 本章任务: 学生数据库中数据的增加.修改和删除 目标: 1:使用T-SQL向表中插入数据 2:使用T-SQL更 ...

  2. 各式各样table

    <html> <head>      <title>大清帝国</title>      <meta name="keywords&quo ...

  3. ZOJ 3826

    Hierarchical Notation Time Limit: 2 Seconds      Memory Limit: 131072 KB In Marjar University, stude ...

  4. ...python の 学习

    5.14 ...上次学python 好像是一个月前.. 写点东西记录下叭.. 现在在看李老大写的博客写..可能直接开抄代码... 感觉自己写的总是爬不成功,之前写的爬豆瓣影评的爬虫还是残的... 1. ...

  5. 原创:ASP.Net状态管理读书笔记--思维导图

    导图文件下载 课前提问几个问题 使用Session 配置 model aspnet_regsql.exe 常见问答 问:为什么Session在有些机器上偶尔会丢失?答:可能和机器的环境有关系,比如:防 ...

  6. LAMP之安装mysql/apache/php

    1. 安装mysqlcd /usr/local/src/ wget http://mirrors.sohu.com/mysql/MySQL-5.1/mysql-5.1.73-linux-i686-gl ...

  7. Hibernate的generator属性之意义

    Hibernate的generator属性之意义 本文讲述Hibernate的generator属性的意义.Generator属性有7种class,本文简略描述了这7种class的意义和用法. Hib ...

  8. Swift - 自动布局库SnapKit的使用详解3(约束优先级,约束做动画)

    1,约束优先级我们使用SnapKit的时候,还可以定义约束的优先级.这样当约束出现冲突的时候,优先级高的约束覆盖优先级低的约束.具体优先级可以放在约束链的结束处. (1)可以设置如下几种优先级 pri ...

  9. highcharts的.net本地导出环境安装记录

    由于项目中highcharts需要内网使用,需要本地搭建导出的环境.下面简述下步骤: 1.下载开源的.net导出文件:https://github.com/imclem/Highcharts-expo ...

  10. POJ 2187 求凸包上最长距离

    简单的旋转卡壳题目 以每一条边作为基础,找到那个最远的对踵点,计算所有对踵点的点对距离 这里求的是距离的平方,所有过程都是int即可 #include <iostream> #includ ...