51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2868|回复: 1
打印 上一主题 下一主题

[资料] QTP模拟鼠标和键盘事件整理

[复制链接]
  • TA的每日心情
    无聊
    2015-8-10 08:24
  • 签到天数: 27 天

    连续签到: 1 天

    [LV.4]测试营长

    跳转到指定楼层
    1#
    发表于 2014-3-31 19:01:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    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

      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.1 SendKeys

      最常用的模拟键盘操作的事件就是SendKeys了,具体说明一样参考QTP的帮助。

      需要说明的是QTP帮助中的例子,需要做一些调整,QTP中执行不需要显示指定Wscrīpt执行shell命令,否则会报错。正确的例子如下:

      Set WshShell = CreateObject("Wscrīpt.Shell")

      WshShell.sendKeys "{DOWN}"

      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
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-10-4 10:34
  • 签到天数: 1208 天

    连续签到: 1 天

    [LV.10]测试总司令

    2#
    发表于 2014-4-1 11:21:19 | 只看该作者
    学习 只用过SendKeys
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-22 02:46 , Processed in 0.073770 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表