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

转载于:https://www.cnblogs.com/qixue/p/3966411.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形

以前都是用Cg的&#xff0c;现在改用GLSL&#xff0c;又要重新学&#xff0c;不过两种语言很多都是相通的。下面的例子是实现绘制一个三角形的简单程序。采用了VBO&#xff08;veretx buffer object&#xff09;、VAO&#xff08;vertex array object&#xff09;等OpenGL的一些…

catia linux下载64位,CATIA V5 CATSysDemon.exe缓冲区溢出漏洞

发布日期&#xff1a;2014-02-24更新日期&#xff1a;2014-02-25受影响系统&#xff1a;3ds catia-v5描述&#xff1a;--------------------------------------------------------------------------------CATIA是数字产品定义及生命周期管理使用的CAD、CAE、CAM应用集成软件包…

eclipse 中文乱码

eclipse 中页面中中文正常预览出现中文乱码 解决方法&#xff1a; windows->preferences->general->content types->text(展开)选择页面我的是php页面就选择phpcontent type 在窗口下面default encoding 中输入gbk 。点击update 就可以了转载于:https://www.cnblog…

【Modern OpenGL】Shader

Shaders 正如在上一篇教程中提到的&#xff0c;shader是在GPU中运行的小程序。如上一个教程中实现的最简单的vertex shader和fragment shader&#xff0c;一个shader基本上负责图形渲染流水线中的一个阶段的功能。从根本上来说&#xff0c;shader就是将输入转化成输出的操作。而…

c语言编译的手机软件,C语言编译工具

软件介绍C语言编译工具app是一款功能十分强大的手机编译、更换代码的软件工具&#xff0c;C语言编译工具app可以快速进行代码翻译、代码查找、替换等&#xff0c;它支持多种代码语言&#xff0c;欢迎下载&#xff01;C语言编译工具app内容简单方便功能强大的代码编译器&#xf…

2014.9.13模拟赛【数位和乘积】

数位和乘积(digit.cpp/c/pas) 【题目描述】 一个数字的数位和乘积为其各位数字的乘积。求所有的N位数中有多少个数的数位和乘积恰好为K。请注意&#xff0c;这里的N位数是可以有前导零的。比如01&#xff0c;02视为二位数&#xff0c;但是他们的数位和乘积都是0。 【输入格式】…

c语言中vector函数大全,vector :: empty()函数,以及C ++ STL中的示例

C vector :: empty()函数矢量::空()是一个库函数“载体”头&#xff0c;它是用来检查给定的矢量是否是一个空的载体或没有&#xff0c;它返回一个真&#xff0c;如果矢量大小为0&#xff0c;否则返回假。注意&#xff1a;要使用向量&#xff0c;请包含标头。vector :: empty()…

【Modern OpenGL】OpenGL简介

说明&#xff1a;跟着learnopengl的内容学习&#xff0c;不是纯翻译&#xff0c;只是自己整理记录。 强烈推荐原文&#xff0c;无论是内容还是排版。 原文链接 本文地址: http://blog.csdn.net/aganlengzi/article/details/50354162 OpenGL 在真正开始我们的探索之旅时&…

c语言课程设计修改订单流程图,C语言课程设计————写下流程图! 谢谢

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼printf("---You have success read data from file!!!---\n");return h; /*返回头指针*/}/*追加记录到文件*/void append(){FILE *fp; /*定义指向文件的指针*/STUDENT *info; /*新记录指针*/int s1,i;char infile[10]; /…

微信公众账户模拟登陆后的一系列操作

<?php header("content-type:text/html;charsetutf-8");/*** wx_mass* * 完成微信公众账户模拟登陆后的一系列操作* mass($content) 调用微信群发接口&#xff0c;群发文本信息* getUserList($page,$pagesize,$group) 获取用户信息* * 群发demo* * $userarray(ac…

【Modern OpenGL】纹理 Textures

说明&#xff1a;跟着learnopengl的内容学习&#xff0c;不是纯翻译&#xff0c;只是自己整理记录。 强烈推荐原文&#xff0c;无论是内容还是排版。 原文链接 本文地址&#xff1a; http://blog.csdn.net/aganlengzi/article/details/50421006 纹理 Textures 为了使我们创建的…

华北水利水电C 语言实验11,华北水利水电大学C语言实验11.doc

华北水利水电大学C语言实验11C语言程序设计实验报告实验11、结构体程序设计班级 2013156 学号 201315613 姓名 吴浩【实验目的】(1)掌握结构体类型的概念、定义和使用&#xff1b;(2)掌握结构体数组、结构体指针的定义和使用&#xff1b;【实验内容及步骤】1、输入5位同学的一组…

Android Activity无法启动。

在正常情况上&#xff0c;这是由于没的在AndroidManifest.xml中进行注册引起的。转载于:https://www.cnblogs.com/zhaojianwei/p/3971238.html

C语言依次显示图片,c语言能显示图片吗

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/* Svga64k.bgi 测试文件 */#include "graphics.h"#include "Svga256.h"#include "stdio.h"#include "fcntl.h"#include "malloc.h"#include "io.h"int huge Return_…

HDU 2296 Ring AC自动机 + DP

题意&#xff1a;给你n个模式串&#xff0c;每个模式串有一个得分&#xff0c;让你构造出一个长度为N之内且分数最高的文本串;输出字典序列最小的。 解题思路&#xff1a; AC自动机 DP &#xff0c; 不过要输出字典序列最小&#xff0c;多开一个 一个三维字符串来辅助二维DP&…

【Modern OpenGL】转换 Transformations

说明&#xff1a;跟着learnopengl的内容学习&#xff0c;不是纯翻译&#xff0c;只是自己整理记录。 强烈推荐原文&#xff0c;无论是内容还是排版。 原文链接 本文地址&#xff1a; http://blog.csdn.net/aganlengzi/article/details/50421159 转换 Transformations 我们已经…

android画布demo,Android开发画板demo前奏

目的完成画板demo的前期步骤相关技术、及其使用xml配置文件&#xff1a;创建SeekBar比较简单&#xff0c;但是不足之处在于当实现横屏的时候就比较麻烦代码创建&#xff1a;代码创建SeekBar比较简单&#xff0c;能够很好地实现横竖屏切换。2、创建Slider类继承于View初始化线条…

网站开发和企业级开发有什么区别?

经常看到Web开发、网站开发、企业级开发&#xff0c;以前很难分清楚它们之前有什么不同&#xff1f;以前也有个说法&#xff1a;Java比较适合企业级开发。现在经验增加了一点&#xff0c;谈谈我的一点看法。Web开发&#xff1a;www访问的网页、网站&#xff0c;BS模式。 网站…

android studio adb 命令行,Android Studio如何配置adb以及经常使用命令

用Android Studio一年多了&#xff0c;都没有使用其调试adb,今天就分享adb配置的方法&#xff0c;分享给你们.android直接打开电脑-属性-高级配置-环境变量。web这里我用图示范给你们&#xff1a;sql这样经常使用adb就配置成功。shell紧接着还有平时经常使用的adb命令&#xff…

【Modern OpenGL】坐标系统 Coordinate Systems

说明&#xff1a;跟着learnopengl的内容学习&#xff0c;不是纯翻译&#xff0c;只是自己整理记录。 强烈推荐原文&#xff0c;无论是内容还是排版。 原文链接 本文地址&#xff1a; http://blog.csdn.net/aganlengzi/article/details/50448453 坐标系统 Coordinate Systems 在…