介绍MSAA,UIA ,Windows Automation API

1.MSAA自从windows 95以来到今天的windows 的任何版本,我们这些开发人都还可以使用MSAA来操作windows的UI。

MSAA是由谁来实现的呢?是COM,即组件对象模型。COM其实就是用来沟通的,负责操作系统与应用程序的沟通。用原文的话说就是COM定义了操作系统与应用程序的机制、方式、方法。

这个COM是谁呢?是IAccessible. 没错它就是COM,看起来像.NET的API,它是MSAA的核心接口,这个接口需要一个参数就是ChildId.有了这个接口,就能够暴露应用程序的UI了,以树型结构来暴露,它是系统组件(component), 在Oleacc.dll里面。

它不仅支持IE浏览器,还支持firefox等多种浏览器的UI操作,不光可以访问使用浏览器来展现的web application,还可以访问许多商业和用户应用程序。

MSAA作为一项技术使用,已经被应用到测试自动化软件中,例如QuickTest Pro, Functional Tester, and SilkTest.

2.Microsoft UI Automation简称UIA,MSAA的下一代产品(或称为技术)是UIA,但是基于MSAA技术的应用程序仍然可以使用,(这句话是说我们仍然可以使用MSAA来访问现在的UI),那么这是怎么做到的呢?

因为它们应用程序的交流沟通是通过一些“桥”来完成的,所以在基于UIA开发的应用程序能够与MSAA开发的应用程序互操作。

所以从MSAA到UIA,有代理帮助完成;从UIA到MSAA有桥来实现。前者是一个组件,它消费MSAA的信息并且通过UIA的客户端API使这些信息可用。后者能够让客户程序使用MSAA来访问由UIA开发的应用程序的UI。

3.Windows Automation API: 从 Windows7以来,微软在努力把它的accessibility technologies放进一个framework里面,称之为Windows Automation API, MSAA仍然存在在这个framework里。

下面我们想想要获取一个程序的UI需要知道哪几个信息,这个信息不包括标示元素的ID。

State, Name, Value, Role.

Role就是告诉系统这个元素是一个按钮或是一个表,etc. 就好比.NET里的类型Type的概念。

Name可以理解成在界面元素上显示的内容。

Value是界面元素里面的值,比如一个textbox里面的值。当然不是所有的UI element都有Value.

State:就是表明这个控件当前是获取焦点状态还是选中状态或是其他状态。

现在谈谈他们的缺点或者称为限制:

先拿这4个指标中的role来说,首先不能够新的UI 行为,其次现在往往需要把2个状态信息合并来表现新控件的状态,比如rich text,

另外一个限制是界面元素(或者成为对象模型)的导航,(PS:我们人们看到的应用程序在MSAA里面称之为servers,因为它提供关于UI信息。 可访问性的工具例如屏幕称之为client,因为它消费和操作来自于应用程序的UI信息), servers暴露UI的方式是给出一个可访问对象及其所有的孩子节点的相关属性,所以要导航一个server的UI element,需要通过遍历;clients的导航是是通过接口和方法来访问一个可访问对象,再访问另外一个对象的。client必须能够把servers的所有的途径都能够走通,在所有通路中必然或偶然的存在着同名的元素,这样就造成了歧义。歧义会给解析界面元素的工具(client implenters)带来额外的工作,这种工作给用户代码反复无常、不可预期的问题,最简单的问题就是等待查找元素的时间过长,造成自动化测试的不稳定。

第三个限制是扩展MSAA的属性或方法不能够打破或改变IAccessible COM的声明。这导致我们不能通过这个对象模型来暴露新的属性或方法,这个对象模型既是静态又是不变的。

另外,IAccessible 有一些设计和API的不规范, 让开发者难以使用它或者去实现它;在扩展IAccessible的时候,必须当心这个扩展的接口必须与IAccessible是完全兼容的,

病却一些实现要先通过法律法规能够在允许使用才行。

 最后标注下,此文翻译自维基百科 Link: http://en.wikipedia.org/wiki/Microsoft_Active_Accessibility 

 另外推荐一篇博文,写的很好 http://shanchunf.blog.163.com/blog/static/1577048020104565759612/

 

 

 

 

你可能感兴趣的:(windows,UI,api,浏览器,application,textbox)