TestComplete对MSAA的支持

评分 0, 满分 5 星(17 次阅读)
Loading...
添加评论

  什么是MSAA?
  MSAA即Microsoft Active Accessibility,为在应用程序和帮助技术之间交换信息提供标准的、一致的机制。例如,MSAA允许程序把所有对象的类型、名称、位置、当前状态暴露给屏幕读者并通知屏幕读者任何windows事件导致的用户接口改变。

  随着Windows Vista的发布,微软公布了新的Accessibility模型,叫UI Automation,是对MSAA的改进。

  利用MSAA进行测试
  TC提供对实现了IAccessible接口的窗体的扩展支持。例如,由VB、FoxPro或 Microsoft Access创建的应用程序窗体。TC使用该接口的方法和属性来获取关于窗体及其子窗体的属性信息,这样你就可以在测试过程中使用由 IAccessible接口暴露的对象、方法、属性。

  TC使用MSAAObject和WaitMSAAObject方法来让脚本访问由MSAA的IAccessible接口暴露的对象、方法和属性。例如,下面脚本使用MSAAObject访问Word的menu_bar并执行该对象的鼠标事件:
Sys.Process('WINWORD').Window('OpusApp', 'Microsoft Active Accessibility Architecture.doc - Microsoft Word', 1) .MSAAObject('menu_bar').Click;来源 www.pms.cc

  对于没有自动实现IAccessible接口的对象,可以在应用程序中手工加入对接口的实现。TC通过Windows API的AccessibleObjectFromWindow函数发送WM_GETOBJECT信息给请求的窗体。所以在程序中通过处理 WM_GETOBJECT信息,可以返回实现了IAccessible接口的对象的引用。这样就可在Object Browser中看到这个对象的方法和属性了。

  例如,下面代码在C#中处理WM_GETOBJECT信息,返回实现了IDispatch接口(IDispatch是IAccessible的父类)的对象的引用:

  // Include needed assemblies
using System;来源 www.pms.cc
using System.Windows.Forms;
using System.Runtime.InteropServices;
  
namespace MSAAOpenApplication
{
  
  . . .
  
  public class Form1 : System.Windows.Forms.Form
  {
    // Message identifiers
    private const int WM_GETOBJECT = 0x003D;
    private const uint OBJID_NATIVEOM = 0x0FFFFFFF0;
    
  . . .
  
    // Modified window procedure. Includes code for processing WM_GETOBJECT message.
    protected override void WndProc(ref Message m)
    {
      // Checks the message
      if ((m.Msg == WM_GETOBJECT) & ((uint)m.LParam == OBJID_NATIVEOM))
      {
        // Obtains the GUID of the IDispatch interface
        Guid g = new Guid(Win32.IID_IDispatch);
    
        // Returns the object, which you want to obtain via MSAA
        // IObjectDispatch is a reference to the IDispatch interface implemented by the desired object
        m.Result=Win32.LresultFromObject(ref g, m.WParam, IObjectDispatch);
        
        return;
      }
      else
      {
        // Calls the default window procedure
        base.WndProc(ref m);
      }
    }
  }
  
  // Helper class needed to call Win32 API functions
  public class Win32
  {
    // Imports the LresultFromObject function from oleacc.dll
    [DllImport("oleacc.dll", CharSet=CharSet.Auto)]
    public static extern IntPtr LresultFromObject(ref Guid riid, IntPtr wParam, [MarshalAs(UnmanagedType.IDispatch)] object pAcc);
    // GUID of the IDispatch interface
    public const string IID_IDispatch="00020400-0000-0000-C000-000000000046";
  }
}

声明: 本文采用 BY-NC-SA 协议进行授权. 转载请注明转自: TestComplete对MSAA的支持
 
评分 4.0, 满分 5 星
Loading...