揭秘QTP的DeviceReplay对象
上一篇 / 下一篇 2009-09-03 16:13:46 / 个人分类:自动化测试
不知道为什么HP的帮助文档中没有提供关于DeviceReplay的强大功能的信息描述。你可以在Java插件中却可以找到DeviceReplay的属性,但是对于那些不使用Java插件的人可能会觉得这个对象仅在Java程序的测试中可用。51Testing软件测试网'{3Mvi"S
51Testing软件测试网+vr }R7i7n6j?Rm为什么要用DeviceReplay?51Testing软件测试网;U*l:tleXw:R
51Testing软件测试网}6PGqv.x&UL-X8N(u!U有些时候我们需要针对界面做一些指定的动作,例如右键单击一个对象,使用功能键(Fx)来激活某些热键的功能,这时候就可以使用DeviceReplay对象,或者在Object.Set和Object.Type方法不生效时使用DeviceReplay。51Testing软件测试网)seQ8idQS@r
8HDfc1h5K_0 并且DeviceReplay在输入特殊符号以及不同语言的文字时会很有用,因为不需要安装指定的字体或改变键盘布局,这对于测试多语言环境的应用程序会非常有用。
Xa |%](h uJ`"Jy0my)s*tV{x0 在鼠标操作方面,我发现DragDrop方法非常有用,可以使用它来执行拖拽的操作,把一个Item从一个Frame拖动到另外一个Frame,或者在应用程序之间拖动。
E,X e_2h*O0R3vk;E]4\ a{Xp0 Mercury.DeviceReplay对象51Testing软件测试网l7g1lX5Z8v5@ JG
y)B%BC DKACDp0 Mercury.DeviceReplay对象用于模拟鼠标单击和移动,还有键盘输入等操作。要使用DeviceReplay,你必须确保被测试的应用程序(AUT)是处于激活状态的窗口。如果你想对某个对象执行一项操作,则该对象必须拥有焦点(focus)。对于Windows应用程序,可以使用 Activate方法:51Testing软件测试网Z$A H-{ Qd2q
51Testing软件测试网4?[_X6vk"H}*kpWindow( "W" ).Activate micLeftBtn
8hC?'__,g aK051Testing软件测试网wR3Q-}-yB `7Ss如果想把焦点设置到某个指定的对象上,通常使用Click方法可以完成。
(Xh"A_e sV8l07i;h z r(G'R!g6GPo0 对于Web环境的应用程序,Activate方法不被支持,因此可以使用下面的技巧来完成:
q c8@ D0vsS051Testing软件测试网S!j8p#J6L(N'c(v Ehwnd = Browser( "B" ).GetROProperty( "hwnd" )
s Z mWG051Testing软件测试网?H0u3M hWindow( "hwnd:=" & hwnd ).Activate micLeftBtn51Testing软件测试网6i4k F-H)r0T7e%Q
-{bkFm'^0 通常可以使用FireEvent “onfocusin”或object.focus,例如WebEdit(“WE”).Object.focus或WebEdit(“WE”)。FireEvent “onfocusin”。51Testing软件测试网|u}#o#e2M |ds9x!}
L S"g.K&[e&i5X0 在调用DeviceReplay对象的方法之前,你需要首先创建DeviceReplay对象:51Testing软件测试网 _b%s[&}2Q AF3Y
51Testing软件测试网"PG$~&p*}d#Yp~D!jSet deviceReplay = CreateObject( "Mercury.DeviceReplay" )
r@I+Nu051Testing软件测试网i#nRE;B\/K*wMicrosoft.VisualBasic.Devices.Keyboard类
k+C1WRG Dc~0Xp b sYx"S@j0 为什么我要在介绍DeviceReplay对象之前介绍这个.NET的类呢?DeviceReplay是一个强大的未被文档化的对象,但是有一定的局限性。其中一个局限就是不能判断一个Control键是否已经被按下。在输入一个大写字母之前,我们需要知道CAPS-LOCK键是否已经按下。在使用数字键盘之前我们需要检查NUM-LOCK键是否已经被按下。否则我们在切换键盘输入状态时可能得到的并不是我们想要的状态。51Testing软件测试网 B%b;X}!s"A-H5dm
7TZl IBr)a0 Devices.Keyboard类提供了属性,可用于获取当前的键盘状态,例如当前什么键被按下了,并且提供一个方法用于向激活的窗口发送键盘敲击事件。
} }HP'L0^0SF$M$rKH j$T0 几个有用的属性包括:
E ^\B4oQ$\?051Testing软件测试网 i!k/e(N1yXAltKeyDown - 判断ALT键是否处于按下状态。51Testing软件测试网 L;J)PH2a+E[ dz
51Testing软件测试网 ~M ~#OUD^CapsLock - 判断CAPS LOCK键是否处于打开状态。51Testing软件测试网6L|7\,^}ur Gs^ v
R*sf7@m;cA4I0 CtrlKeyDown - 判断CTRL 键是否处于按下状态。51Testing软件测试网k'q,v2z-Z&`*j
51Testing软件测试网.C,KT,nlB IjNumLock - 判断NUM LOCK键是否处于打开状态。51Testing软件测试网P%[c*u M!E
51Testing软件测试网;TF2DS]%EnKcScrollLock - 判断SCROLL LOCK键是否处于打开状态。
R&Sv?M7t051Testing软件测试网/ba9Y c z ?]#vShiftKeyDown - 判断SHIFT键是否处于按下状态。
Xy;@Xi#Z:CsN_0