Microsoft Active Accessibility

MSAA的全称是Microsoft Active Accessibility。这是相似DCOM技术。技术模型是这样的,UI程序能够暴露出一个Interface,方便另外一个程序对其进行控制。 MSAA技术的初衷是为了方便残疾人使用Windows 程序。好比盲人看不到窗口,可是盲人能够经过一个USB读屏器链接到电脑上, 读屏器经过UI程序暴露出来的这个Interface,就能够获取程序信息,经过盲文或者其它形式传递给盲人。MSAA提供了如此方便的功能, UI 自动化测试天然能够借用这项技术。MSAA暴露出来的Interface叫作 IAccessible。 测试程序和目标UI程序互操做流程以下:
1. 测试程序调用Windows API: AccessibleObjectFromWindow,传入目标UI程序HWND。
2. AccessibleObjectFromWindow函数向UI程序发送WM_GETOBJECT消息。
3. UI程序建立实现了IAccessible的内部类,而后经过 LresultFromObject API把IAccessible 接口返回给 测试程序
4. 测试程序拿到IAccessible接口,开始调用IAccessible 接口函数操做测试目标。
IAccessible接口里面的几个关键函数是:
IAccessible::get_accChild/ IAccessible::get_accParent经过这两个函数,调用者能够浏览 目标程序的窗口关系树,定位到 UI元素
IAccessible::accLocation/I Accessible::accHitTest读取和分辨目标元素的屏幕位置。
IAccessible::accName/ I Accessible:: accSelect读取元素的名字,对 UI元素进行指定的操做,好比选取Listbox里面的某一项等等。
IAccessible::accValue 开发人员能够自定义value属性的实现。好比针对折线图控件,开发人员能够在accValue中返回折线的坐标数列。
MSAA的理念 相似于test hook。 经过主动让UI程序暴露一个接口来让调用者控制。 在具体使用中,测试人员每每是结合MSAA和Win32 API操做,取长补短。一方面对于 UI元素丰富的属性,好比style,钩选状态,是否最大化和模拟用户输入等,继续采用Win32 API。 另外一方面用MSAA的优点来弥补Win32 API的一些不足,好比:
因为MSAA有本身的get_accChild方法,使其控件树关系并不必定要和Win32 HWNDd关系对应一致。对于自绘窗口,虽说只有一个HWND, 可是开发人员能够经过实现IAccessible接口来实现逻辑上的层次关系。好比Excel中就能够经过IAccessible把多个cell的子 IAccessible接口暴露给调用者。
IAccessible的实现是由开发者提供, 开发者能够灵活地根据实际状况决定方法的实现。好比前面提到了折线图控件能够返回坐标数列。对于.NET WinForm, 微软在Framework中就提供了IAccessible的默认实现,这样在具体实现中,就能够处理.NET动态维护HWND的细节。
相关文章
相关标签/搜索