TestComplete对MSAA的支持

上一篇 / 下一篇  2007-09-21 16:21:53 / 个人分类:TestComplete

+f$q+lhq pj A0TestCompleteMSAA的支持
|\ Qv5@+CQ[ V/x#i0陈能技51Testing软件测试网*Es3s] mN/kd
2007-09-21

_sE"q/F x051Testing软件测试网8g8j&mdjG

什么是MSAA?51Testing软件测试网(m/_F\C p"{|'y&I
MSAA即Microsoft Active Accessibility,为在应用程序和帮助技术之间交换信息提供标准的、一致的机制。例如,MSAA允许程序把所有对象的类型、名称、位置、当前状态暴露给屏幕读者并通知屏幕读者任何windows事件导致的用户接口改变。51Testing软件测试网'd*RtW:mJ a

51Testing软件测试网` U1J h-S7z)J9y#M

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

f%Q!k1N%v%]0

4Cq\o.T3~.[Ei0利用MSAA进行测试
!g"T kU-P)U |6g%wI0TC提供对实现了IAccessible接口的窗体的扩展支持。例如,由VB、FoxPro或Microsoft Access创建的应用程序窗体。TC使用该接口的方法和属性来获取关于窗体及其子窗体的属性信息,这样你就可以在测试过程中使用由IAccessible接口暴露的对象、方法、属性。51Testing软件测试网T{c1]_zwdl

.Y `6s6v.` b^T0TC使用MSAAObject和WaitMSAAObject方法来让脚本访问由MSAA的IAccessible接口暴露的对象、方法和属性。例如,下面脚本使用MSAAObject访问Word的menu_bar并执行该对象的鼠标事件:
(OV yMs*n7p|0Sys.Process('WINWORD').Window('OpusApp', 'Microsoft Active Accessibility Architecture.doc - Microsoft Word', 1) .MSAAObject('menu_bar').Click;51Testing软件测试网3_Jf nr!q WJI

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

5l0e,{%T mF7a9w[0

}:u u:c#c `]?!b/l8u0例如,下面代码在C#中处理WM_GETOBJECT信息,返回实现了IDispatch接口(IDispatch是IAccessible的父类)的对象的引用:51Testing软件测试网hPu-FRu,Z wv

51Testing软件测试网9^ [y)k4Ew

// Include needed assemblies
;F2q{/F:Z7ZD0using System;51Testing软件测试网y {(R-cqdT[
using System.Windows.Forms;
M9R7f'q+xo9D^sy0using System.Runtime.InteropServices;51Testing软件测试网Cw:? \#b
  
\-fS1ZC4XSg0namespace MSAAOpenApplication
A t/?4wS_v;w0{
Po2N.B8F!r n0  
N%LaV f t,w0  . . .51Testing软件测试网 g8e.~(i W j d+O%O!T8w
  
| b mP7?#jZ0  public class Form1 : System.Windows.Forms.Form51Testing软件测试网!w'e*wr7d\-[,x*rU
  {
@,Gj&`_ Z hEt$_0    // Message identifiers
vR9tyQjp1X+g0    private const int WM_GETOBJECT = 0x003D;51Testing软件测试网L#v+qHk3WT
    private const uint OBJID_NATIVEOM = 0x0FFFFFFF0;
/r/iTuS e0    51Testing软件测试网O i0D&j"u!Bq
  . . .51Testing软件测试网M h`3\HC
  51Testing软件测试网m[}kT1aF
    // Modified window procedure. Includes code for processing WM_GETOBJECT message.51Testing软件测试网[;J9\3k#F?-O7a
    protected override void WndProc(ref Message m)51Testing软件测试网1H A/gb1k.}5XvA
    {
|&~5Z&k/GY0      // Checks the message51Testing软件测试网+q2m)U n?
      if ((m.Msg == WM_GETOBJECT) & ((uint)m.LParam == OBJID_NATIVEOM))
6L$A-eWe(m/[0      {
KMi[X.n W0        // Obtains the GUID of the IDispatch interface
C | m+aO5k k0        Guid g = new Guid(Win32.IID_IDispatch);
CS]7i:QEM3\E0    51Testing软件测试网#D9w&d3n9Cp5SuQ
        // Returns the object, which you want to obtain via MSAA51Testing软件测试网 Q:eP8kWc
        // IObjectDispatch is a reference to the IDispatch interface implemented by the desired object51Testing软件测试网{Pl!e0S0`!sX2f6kK!y
        m.Result=Win32.LresultFromObject(ref g, m.WParam, IObjectDispatch);
4vx2r#c1[l0        51Testing软件测试网9^g$kJcc D#z'u
        return;
Qkm(j7l7p5D'EX0      }51Testing软件测试网f6w"{;?-Nt
      else51Testing软件测试网-yqfYi%d
      {
J1ME k[0        // Calls the default window procedure51Testing软件测试网,U;F2bp3t
        base.WndProc(ref m);51Testing软件测试网8{5~ p4O&VJ
      }51Testing软件测试网 Yz O4c`2eU
    }
},W4} OrN}$f7jo0  }
KG EttHa.YAm K0  51Testing软件测试网,vZ)e4t;c [ [`
  // Helper class needed to call Win32 API functions
"IGz%r/m y&a0  public class Win3251Testing软件测试网v{ tJ*Q7sh
  {
3t.^ph k'f9b0    // Imports the LresultFromObject function from oleacc.dll
0V%j$`-@3E0    [DllImport("oleacc.dll", CharSet=CharSet.Auto)]
3c2? fR%X-M0    public static extern IntPtr LresultFromObject(ref Guid riid, IntPtr wParam, [MarshalAs(UnmanagedType.IDispatch)] object pAcc);
+q8\x \#e.h0    // GUID of the IDispatch interface
w%j6v} fXDM0    public const string IID_IDispatch="00020400-0000-0000-C000-000000000046";51Testing软件测试网 @nYe`-@
  }
c"u| P~7N5Y,t0}

.@Ub;P|!iRZ0

TAG: TestComplete 测试工具 自动化测试 MSAA IAccessibility

Smoke中转站 引用 删除 shanxi   /   2007-09-22 11:21:23
没有用到钩子,难怪MSAA方便咯。
我也正在研究用微软的库和钩子两种方法进行界面自动化,有空多交流。
 

评分:0

我来说两句

Open Toolbar