QTP模拟鼠标键盘事件

上一篇 / 下一篇  2012-11-23 18:05:22 / 个人分类:QTP

1 鼠标事件
1.1 使用自带的Click方法
每个对象都有自带的Click方法,通过其中第三个参数指定具体的鼠标事件(左键、右键、中建)
例如: Browser("New Page").page("New Page").WebElement("html tag:=Form").Click 0,0,micRightBtn
注意:Click方法的前两个参数是相对坐标,即相对于对象控件左上角的坐标。
然而执行脚本时常常发现右键功能无法回放,常常被当做左键处理。这需要通过设置回放级别解决。
 Setting.WebPackage("ReplayType") = 2    '根据鼠标事件回放
 Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").Set "张三"
 Browser("百度一下,你就知道").Page("百度一下,你就知道").WebButton("百度一下").Click 0,0,micRightBtn
 wait 3
 Setting.WebPackage("ReplayType") = 1  '根据键盘事件回放

1.2 使用自带的FireEvent方法
Browser("百度一下,你就知道").Page("百度一下,你就知道").WebButton("百度一下").FireEvent "click",0,0,micRightBtn
具体使用参考QTP的帮助吧,需要提醒一下,右键菜单的弹出对应的是"oncontextmenu"事件,这个帮助里没有提到,当然依赖于开发的代码实现。
1.3 使用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
1.4 使用mercury.devicereplay
  Set devReplay = CreateObject("mercury.devicereplay")
  devReplay.MouseClick absx+4,absy+4,2
2 键盘事件
2.1 SendKeys
最常用的模拟键盘操作的事件就是SendKeys了,具体说明一样参考QTP的帮助。
需要说明的是QTP帮助中的例子,需要做一些调整,QTP中执行不需要显示指定Wscript执行shell命令,否则会报错。正确的例子如下:
 Set WshShell = CreateObject("WScript.Shell")
 WshShell.SendKeys "{DOWN}" 
 WshShell.SendKeys "{CAPSLOCK}"
 wait 3
 WshShell.SendKeys "{CAPSLOCK}"
当然我们也可以先定义一个function,然后每次都调用这个function。
  Public Function sendKeys(stringWord)
  Dim WSH
  On Error Resume Next
  Set WSH = CreateObject("WScript.Shell")
  WSH.SendKeys stringWord
  Set WSH = Nothing
 End Function
 
 sendKeys ("{CAPSLOCK}") '这里注意括号中的写法
 wait 3
 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:

 

评分:0

我来说两句

Open Toolbar