岁月沧桑,物是人非,岁月赋予了我什么:财富?知识?皱纹?生活态度?

QTP模拟鼠标和键盘事件方法

上一篇 / 下一篇  2011-08-08 14:07:58 / 个人分类:自动化测试

1、鼠标事件

  1.1 使用自带的Click方法
  看QTP的帮助,每个对象都有自带的Click方法,通过其中第三个参数指定具体的鼠标事件
  例如:
  Browser("New Page").page("New Page").WebElement("html tag:=Form").Click
  0,0,micRightBtn
  注意Click方法的前两个参数是相对坐标,即相对于对象控件左上角的坐标。
  然而执行脚本时常常发现右键功能无法回放。这需要通过设置回放级别解决。例如:
  Setting.WebPackage("ReplayType") = 2
  Browser("New Page").page("New Page").WebElement("html tag:=Form").Click
  0,0,micRightBtn
  Setting.WebPackage("ReplayType") = 1

     index=4
     Set WshShell = CreateObject("Wscrīpt.Shell")
     For i = 1 To index
      WshShell.sendKeys "{DOWN}"
     Next
     WshShell.sendKeys "{ENTER}"
     Set WshShell = nothing
  1.2 使用自带的FireEvent方法
  具体使用参考QTP的帮助吧,需要提醒一下,右键菜单的弹出对应的是"oncontextmenu"事件,这个帮助里没有提到,当然依赖于开发的代码实现。
  1.3 使用mercury.devicereplay
  Set devReplay = CreateObject("mercury.devicereplay")
  devReplay.MouseClick absx+4,absy+4,2
  1.4 使用Windows底层的mouse_event
  如果上面的方法仍然不管用,就要采用更底层的方法了。不过这种方式不推荐,因为mouse_event识别的是绝对坐标,你还需要在调用 mouse_event前获取对象的绝对坐标。需要说明的是,如果没有使用MOUSEEVENTF_ABSOLUTE,函数默认的是相对于鼠标当前位置的点,用0,0表示,会被认为是当前鼠标所在的点。
  Extern.Declare micVoid, "mouse_event", "user32.dll", "mouse_event", micByte,micByte,micDWord,micULong
  Extern.mouse_event MOUSEEVENTF_RIGHTDOWN,0,0,0

2、键盘事件
  2.1SendKeys
  最常用的模拟键盘操作的事件就是SendKeys了,具体说明一样参考QTP的帮助。
  需要说明的是QTP帮助中的例子,需要做一些调整,QTP中执行不需要显示指定Wscrīpt执行shell命令,否则会报错。正确的例子(先打开大些开启的灯,3秒后自动关闭,非常形象的例子)如下:
  

  SetWshShell =CreateObject("Wscript.Shell") '这里要特别注意不能写成Wscrīpt.Shell,否则会报“ActiveX部件不能创建对象: 'Wscrīpt.Shell'”错误。
   WshShell.SendKeys "{CAPSLOCK}"
    wait3
   WshShell.SendKeys "{CAPSLOCK}"

       当然我们也可以先定义一个function,然后每次都调用这个function。

 

 Public FunctionsendKeys(stringWord)
 Dim WSH
   On Error Resume Next
   SetWSH =CreateObject("WScript.Shell")
   WSH.SendKeys stringWord
   SetWSH =
Nothing
End Function


sendKeys ("{CAPSLOCK}")'这里注意括号中的写法
wait3
sendKeys ("{CAPSLOCK}")'这里注意括号中的写法

 

  2.2 Mercury.DeviceReplay
  Set devReplay = CreateObject("mercury.devicereplay")
  devReplay.SendString("a")
  2.3 使用Windows底层的keybd_event
  Extern.Declare micVoid, "keybd_event", "user32.dll", "keybd_event", micByte,micByte,micDWord,micULong
  Extern.keybd_event 42,0,0,0
  注意一下这里的第一个参数是10进制的。
  SendKeys的使用要方便一点,但是稳定性不如后者,
  Function RtClick( Obj )
  absx = Obj.GetROProperty("abs_x")
  absy = Obj.GetROProperty("abs_y")
  Set devReplay = CreateObject("mercury.devicereplay")

   devReplay.MouseClick absx+4,absy+4,2
  set devReplay = nothing
  End Function


TAG:

woddebbmm的个人空间 引用 删除 woddebbmm   /   2011-08-08 21:55:22
 

评分:0

我来说两句

hwm831002

hwm831002

从今天开始,一步一个脚印,一天一个台阶,提升自我,充实自我!

日历

« 2024-04-17  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 43161
  • 日志数: 51
  • 图片数: 1
  • 文件数: 1
  • 建立时间: 2008-01-21
  • 更新时间: 2012-11-09

RSS订阅

Open Toolbar