虽然,很多有成就的人士都没有受过很多教育,但并不等于不用功读书,就一定可以成功。你学到的知识,就是你拥有的“武器”。人,可以白手兴家,但不可以“手无寸铁”!

转载:QTP的DeviceReplay对象

上一篇 / 下一篇  2011-12-09 10:43:48 / 个人分类:测试工具(QTP)

不知道为什么HP的帮助文档中没有提供关于DeviceReplay的强大功能的信息描述。你可以在Java插件中却可以找到DeviceReplay的属性,但是对于那些不使用Java插件的人可能会觉得这个对象仅在Java程序的测试中可用。  不知道为什么HP的帮助文档中没有提供关于DeviceReplay的强大功能的信息描述。你可以在Java插件中却可以找到DeviceReplay的属性,但是对于那些不使用Java插件的人可能会觉得这个对象仅在Java程序的测试中可用。

  为什么要用DeviceReplay?

  有些时候我们需要针对界面做一些指定的动作,例如右键单击一个对象,使用功能键(Fx)来激活某些热键的功能,这时候就可以使用DeviceReplay对象,或者在Object.Set和Object.Type方法不生效时使用DeviceReplay。

 

  并且DeviceReplay在输入特殊符号以及不同语言的文字时会很有用,因为不需要安装指定的字体或改变键盘 布局,这对于测试多语言环境的应用程序会非常有用。

  在鼠标 操作方面,我发现DragDrop方法非常有用,可以使用它来执行拖拽的操作,把一个Item从一个Frame拖动到另外一个Frame,或者在应用程序之间拖动。

  Mercury.DeviceReplay对象

  Mercury.DeviceReplay对象用于模拟鼠标单击和移动,还有键盘输入等操作。要使用DeviceReplay,你必须确保被测试的应用程序(AUT)是处于激活状态的窗口。如果你想对某个对象执行一项操作,则该对象必须拥有焦点(focus)。对于Windows应用程序,可以使用 Activate方法:

  Window( "W" ).Activate micLeftBtn

  如果想把焦点设置到某个指定的对象上,通常使用Click方法可以完成。


  对于Web环境的应用程序,Activate方法不被支持,因此可以使用下面的技巧来完成:


  hwnd = Browser( "B" ).GetROProperty( "hwnd" )


  Window( "hwnd:=" & hwnd ).Activate micLeftBtn

  通常可以使用FireEvent “onfocusin”或object.focus,例如WebEdit(“WE”).Object.focus或WebEdit(“WE”)。FireEvent “onfocusin”。


  在调用DeviceReplay对象的方法之前,你需要首先创建DeviceReplay对象:

  Set deviceReplay = CreateObject( "Mercury.DeviceReplay" )

  Microsoft.VisualBasic.Devices.Keyboard类

 

  为什么我要在介绍DeviceReplay对象之前介绍这个.NET的类呢?DeviceReplay是一个强大的未被文档化的对象,但是有一定的局限 性。其中一个局限就是不能判断一个Control键是否已经被按下。在输入一个大写字母之前,我们需要知道CAPS-LOCK键是否已经按下。在使用数字 键盘之前我们需要检查NUM-LOCK键是否已经被按下。否则我们在切换键盘输入状态时可能得到的并不是我们想要的状态。

 

  Devices.Keyboard类提供了属性,可用于获取当前的键盘状态,例如当前什么键被按下了,并且提供一个方法用于向激活的窗口发送键盘敲击事件。

 

  几个有用的属性包括:

  AltKeyDown - 判断ALT键是否处于按下状态。

  CapsLock - 判断CAPS LOCK键是否处于打开状态。


  CtrlKeyDown - 判断CTRL 键是否处于按下状态。

  NumLock - 判断NUM LOCK键是否处于打开状态。

  ScrollLock - 判断SCROLL LOCK键是否处于打开状态。


  ShiftKeyDown - 判断SHIFT键是否处于按下状态。

 

  Set Keyboard = DotNetFactory.CreateInstance(

  "Microsoft.VisualBasic.Devices.Keyboard", "Microsoft.VisualBasic" )

  Print CBool( Keyboard.AltKeyDown )

  Print CBool( Keyboard.CapsLock )

  Print CBool( Keyboard.CtrlKeyDown )

 

  Print CBool( Keyboard.NumLock )

  Print CBool( Keyboard.ScrollLock )

 

  Print CBool( Keyboard.ShiftKeyDown )


  注意:在使用DotNetFactory时数据类型必须被转换


  System.windows/' target='_blank'>Windows.Forms.Control 类

 

  DeviceReplay的另外一个局限是不能获取当前鼠标(光标)在屏幕 的位置。而System.Windows.Forms.Control这个类定义了那些拥有视觉表现的控件的基类。

 

  通过MousePosition属性可以获取当前鼠标光标在屏幕坐标的位置。访问MousePosition属性时,可以返回代表鼠标光标位置的Point数据。

  我的鼠标在哪?

  Set ctlr = DotNetFactory.CreateInstance("System.Windows.Forms.Control")

 

  For i = 1 To 10


  Wait 2

  Print "1. X=" & ctlr.MousePosition.X & "; Y=" & ctlr.MousePosition.Y


  Next

  Mercury.DeviceReplay的方法


  SendString方法

  描述


  向激活的窗口发送一个或多个键盘 按键,就像敲击键盘一样。


  语法

  object.SendString( str )


  参数

 

  object : Mercury.DeviceReplay对象。

  str : 敲击的字符串。

  返回值

 

  无。

  例子

  下面的例子会激活记事本(notepad)并输入一段字符:

  Set deviceReplay = CreateObject( "Mercury.DeviceReplay" )

  SystemUtil.Run "notepad.exe", "", "", "open"

  ' ** this line always identifies the notepad window.

  Window( "nativeclass:=Notepad", "index:=0" ).Activate micLeftBtn

 

  deviceReplay.SendString( "DeviceReplay" )

  Set deviceReplay = Nothing


  KeyDown方法

 

  描述

 

  模拟一个按键的按下并保持(相当于Win32的KEY_DOWN事件)。


  语法


  object.KeyDown( key )

 

  参数

  object : Mercury.DeviceReplay对象。

  key : 按键的数值码。可查阅后面的“Key Codes 参考”。

   返回值

   无。

   例子

   下面的例子会激活记事本(notepad)程序并使用大写和小写的方式输入字符串。注意在发送第一个字符串时,SHIFT键保持被按下的状态: Const VK_SHIFT = 42 Const VK_RETURN = 28 Set deviceReplay = C
  返回值

  无。

  例子

 

  下面的例子会激活记事本(notepad)程序并使用大写和小写的方式输入字符串。注意在发送第一个字符串时,SHIFT键保持被按下的状态:

  Const VK_SHIFT = 42

 

  Const VK_RETURN = 28

  Set deviceReplay = CreateObject( "Mercury.DeviceReplay" )

 

  SystemUtil.Run "notepad.exe", "", "", "open"

 

  Window( "nativeclass:=Notepad", "index:=0" ).Activate micLeftBtn

  ' ** Typing uppercase


  deviceReplay.KeyDown VK_SHIFT

 

  deviceReplay.SendString( "devicereplay" )

  deviceReplay.PressKey VK_RETURN

  deviceReplay.KeyUp VK_SHIFT


  ' ** Typing in lower case


  deviceReplay.SendString( "devicereplay" )

  Set deviceReplay = Nothing

  提示


  在KeyDown后应该有相应的KeyUp方法的调用。

 

  KeyDown方法就像人工按下一个按键并保持按下的状态。

  KeyUp方法

 

  描述

 

  模拟通过键盘释放某个按下的按键。


  语法

  object.KeyUp( key )

  参数

  object : Mercury.DeviceReplay对象。

  key : 按键的数值码。可查阅后面的“Key Codes 参考”。

  返回值

  无。


  例子

  下面的例子会激活并并使用热键CTRL+O来打开记事本(notepad)的菜单,然后用ESC键关闭对话框。

  Const VK_O = 24

  Const VK_CONTROL = 29

  Const VK_ESCAPE = 1


  Set deviceReplay = CreateObject( "Mercury.DeviceReplay" )

 

  SystemUtil.Run "notepad.exe", "", "", "open"

  Window( "nativeclass:=Notepad", "index:=0" ).Activate micLeftBtn

  ' ** Typing uppercase

  Wait 1

 

  ' ** Opening the menu Ctrl + O

  deviceReplay.KeyDown VK_CONTROL

  deviceReplay.PressKey VK_O


  deviceReplay.KeyUp VK_CONTROL

  Wait 2

 

  ' ** Closing the menu

 

  deviceReplay.PressKey VK_ESCAPE

  deviceReplay.SendString "Menu Open, was closed."

  Set deviceReplay = Nothing

  提示


  KeyUp方法应该与KeyDown方法配对使用。

  多个KeyUp不会对应用程序造成影响。

  如果需要组合热键,仅需要像人工执行的方式一样即可。

 

  PressKey方法

  描述


  模拟通过键盘按下一个按键并立即释放。

 

  语法

  object.PressKey( key )

  参数

 

  object : Mercury.DeviceReplay对象。


  key : 按键的数值码。可查阅后面的“Key Codes 参考”。

 

  返回值

  无。

  例子

  下面的例子会激活记事本并使用热键CTRL+O来模拟选择文件打开菜单,然后用ESCAPE按键关闭对话框。

  Const VK_O = 24 : Const VK_F = 33

  Const VK_CONTROL = 29 : Const VK_ESCAPE = 1 : Const VK_MENU = 56


  Set deviceReplay = CreateObject( "Mercury.DeviceReplay" )


  SystemUtil.Run "notepad.exe", "", "", "open"

  Window( "nativeclass:=Notepad", "index:=0" ).Activate micLeftBtn

  Wait 1

  ' ** Opening the menu Alt + F + O


  deviceReplay.PressKey VK_MENU

  deviceReplay.PressKey VK_F


  deviceReplay.PressKey VK_O

 

  Wait 2

  ' ** Closing the menu

  deviceReplay.PressKey VK_ESCAPE

 

  deviceReplay.SendString "Open menu was closed."

 

  Set deviceReplay = Nothing


  PressNKeys方法

 

  描述

  模拟通过键盘 多次按下一个按键并立即释放。

  语法

  object.PressNKey( key, N )


  参数

  object : Mercury.DeviceReplay对象。


TAG:

 

评分:0

我来说两句

Open Toolbar