发布新日志

  • QTP如何启动应用程序(转) (添加个人修改部分)

    2008-12-31 15:47:56

    QTP提供了很多自动启动应用程序的办法,方法如下:
            1)SystemUtil.Run 允许启动新的进程
            格式:SystemUtil.Run file, [params], [dir], [op], [mode]
            下面代码利用SystemUtil对象如何启动进程。

            '启动IE

              SystemUtil.Run "iexplore.exe"
             SystemUtil.Run "iexplore.exe", "
    http://www.51testing.com/?72" '打开pcl blog
             SystemUtil.Run "iexplore.exe", "
    http://www.knowledgeinbox.com", , , 3
     


    打开其他软件:

    SystemUtil.Run "E:\software\xshell30.exe"   


            2)InvokeApplication 启动应用程序
            格式:InvokeApplication(Command [,StartIn])

            例子:
            '启动ie
               InvokeApplication "IEXPLORE.EXE"
            '启动计算器
               InvokeApplication "calc.exe"

            3) COM - Wsh
               利用Wsh对象进行启动
            例子:

                Dim oShell
               set ōShell= CreateObject ("Wscrīpt.shell")
               oShell.Run "IEXPLORE.EXE"
               Set ōShell = Nothing
     


    oShell.Run "E:\software\xshell30.exe"

            4)Qtp自动启动应用程序
              Qtp打开 Automation-〉Record and Run Settings 下进行设置

            5)录制启动过程

    也可以手动将Dialog:运行的所有对象添加到对象库中,并首先启动dialog:运行

              Dialog("运行").WinEdit("打开(O):").Set "calc"
             Dialog("运行").WinButton("确定").Click
     

     

  • [转载]揭秘QTP的DeviceReplay对象

    2008-12-31 14:52:47

    原文:The Undocumented DeviceReplay(http://www.advancedqtp.com/2008/03/undocumented-devicereplay/www.advancedqtp.com

     

    不知道为什么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.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 = 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对象。

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

    N:重复的次数。

    返回值

    无。

    例子

    例1 – 美国的州

    Option Explicit

    Const VK_RETURN = 28 : Const VK_F = 33 : Const VK_O = 24

    Const VK_TAB = 15 : Const VK_F5 = 63

    Const VK_CAPITAL = 58 : Const VK_NUMLOCK = 69

    Const VK_SUBTRACT = 74 : Const VK_MULTIPLY = 55

    Const VK_MENU = 56

    Dim deviceReplay

    Private Sub SetupKeyboard()

    Const CLASS_NAME = "Microsoft.VisualBasic.Devices.Keyboard"

    Const ASSEMBLY = "Microsoft.VisualBasic"

    Dim Keyboard

    Set Keyboard = DotNetFactory.CreateInstance( CLASS_NAME, ASSEMBLY )

    If CBool( Keyboard.CapsLock ) Then

    deviceReplay.PressKey VK_CAPITAL

    End If

    If CBool( Keyboard.NumLock ) = False Then

    deviceReplay.PressKey VK_NUMLOCK

    End If

    Set Keyboard = Nothing

    End Sub

    Private Sub SetupNotepad()

    deviceReplay.PressKey VK_MENU

    deviceReplay.PressKey VK_O

    deviceReplay.PressKey VK_F

    deviceReplay.SendString "Courier New"

    deviceReplay.PressKey VK_TAB

    deviceReplay.PressKey VK_TAB

    deviceReplay.SendString "14"

    deviceReplay.PressKey VK_RETURN

    Wait 1

    End Sub

    Private Sub PrintRow( ByVal state, ByVal usps, byVal capital )

    deviceReplay.SendString state

     

  • [转载]鼠标点击桌面任意坐标的问题,顺便介绍下Mercury.DeviceReplay这个对象

    2008-12-31 10:25:53


    一朋友问到如何实现鼠标点击桌面上任意指定的坐标的问题,呵呵

    不复杂,呵呵

    可以两种方法实现:

    1、QTP采用低级别录制,然后坐标用随机数替代

    2、创建一个DeviceReplay对象进行操作

    Function Mouse_Click(x , y)

     Dim device 

     Set device = CreateObject("Mercury.DeviceReplay")
     device.MouseMove x , y

    device.MouseClick x , y , LEFT_MOUSE_BUTTON
    End Function

    既然写了这个方法,顺便就介绍下Mercury.DeviceReplay这个对象,呵呵

    很实用的一个对象,不知道为啥QTP的帮助几乎就没有它的介绍

    这个对象用来模拟鼠标的单击和移动、键盘输入等,但有个前提,实用该对象前,需要保证键盘状态正确

    如NUMLOCK是否打开等,因为DeviceReplay不能检测键盘状态

    Mercury.DeviceReplay包括如下方法:

    1、SendString方法

    向激活的窗口发送一个或多个键盘按键:object.SendString( str )

    2、KeyDown方法

    模拟一个按键的按下并保持:object.KeyDown( key )   key : 按键的数值码

    3、KeyUp方法

    模拟通过键盘释放某个按下的按键:object.KeyUp( key )

    4、PressKey方法

    模拟通过键盘按下一个按键并立即释放:object.PressKey( key )

     

    5、PressNKeys方法

     

    模拟通过键盘多次按下一个按键并立即释放:object.PressNKey( key, N )  N:重复次数

     

    6、DragAndDrop方法

     

    用于执行从一点拖动到另外一点的操作:object.DragAndDrop( dragX, dragY, dropX, dropY, Button )

    Button 的值包括

    LEFT_MOUSE_BUTTON = 0

    MIDDLE_MOUSE_BUTTON = 1

     RIGHT_MOUSE_BUTTON = 2

     

    7、MouseClick方法

     

    在指定的屏幕位置执行鼠标左键或右键的单击操作:object.MouseClick( x, y, Button )

     

    8、MouseDbClick方法

     

    在指定的屏幕位置中执行鼠标左键或右键的双击事件:object.MouseDblClick( x, y, Button )

     

    9、MouseDown方法

     

    在屏幕指定位置按下鼠标左键或右键,并保持按下状态:object.MouseDown( x, y, Button )

     

    10、MouseUp方法

     

    用于释放之前执行的MouseDown方法所按下的鼠标按键:object.MouseDown( x, y, Button )

     

    11、MouseMove方法

     

    用于模拟鼠标移动:object.MouseMove( x, y)

     

    12、SetSynchronizationTimeout方法

     

    设置一个新的同步超时的时间值:object. SetSynchronizationTimeout(nSyncTimeout , is_sec)

    nSyncTimeout : 同步超时的时间值。

    is_sec : 指定设置的时间值是否以秒为单位

数据统计

  • 访问量: 6815
  • 日志数: 10
  • 建立时间: 2008-12-31
  • 更新时间: 2009-04-14

RSS订阅

Open Toolbar