TestComplete对MSAA的支持
上一篇 / 下一篇 2007-09-21 16:21:53 / 个人分类:TestComplete
+f$q+lhq pj A0TestComplete对MSAA的支持
|\Qv5@+CQ[ V/x#i0陈能技51Testing软件测试网*Es3s]mN/kd
2007-09-21
什么是MSAA?51Testing软件测试网(m/_F\Cp"{|'y&I
MSAA即Microsoft Active Accessibility,为在应用程序和帮助技术之间交换信息提供标准的、一致的机制。例如,MSAA允许程序把所有对象的类型、名称、位置、当前状态暴露给屏幕读者并通知屏幕读者任何windows事件导致的用户接口改变。51Testing软件测试网'd*Rt W:mJa
随着Windows Vista的发布,微软公布了新的Accessibility模型,叫UI Automation,是对MSAA的改进。
f%Q!k1N%v%]04Cq\o.T3~.[Ei0利用MSAA进行测试
!g"T
k U-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!qWJI
$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软件测试网hP u-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
At/?4wS_v;w0{
Po2N.B8F!rn0
N%LaV
ft,w0 . . .51Testing软件测试网g8e.~(iW jd+O%O!T8w
| b
mP7?#jZ0 public class Form1 : System.Windows.Forms.Form51Testing软件测试网!w'e*wr7d\-[,x*rU
{
@,G j&`_
Z hEt$_0 // Message identifiers
vR9t yQjp1X+g0 private const int WM_GETOBJECT = 0x003D;51Testing软件测试网L#v+qHk3WT
private const uint OBJID_NATIVEOM = 0x0FFFFFFF0;
/r/iTuS
e0 51Testing软件测试网Oi0D&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+aO5kk0 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
{