• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    揭秘QTP的DeviceReplay對象

    發布: 2008-6-05 10:07 | 作者: 陳能技 | 來源: CSDN | 查看: 370次 | 進入軟件測試論壇討論

    領測軟件測試網

    MILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">揭秘QTPDeviceReplay對象

    原文:The Undocumented DeviceReplayhttp://www.advancedqtp.com/2008/03/undocumented-devicereplay/www.advancedqtp.com

     

    不知道為什么HP的幫助文檔中沒有提供關于DeviceReplay的強大功能的信息描述。你可以在Java插件中卻可以找到DeviceReplay的屬性,但是對于那些不使用Java插件的人可能會覺得這個對象僅在Java程序的測試中可用。

    為什么要用DeviceReplay?

    有些時候我們需要針對界面做一些指定的動作,例如右鍵單擊一個對象,使用功能鍵(Fx)來激活某些熱鍵的功能,這時候就可以使用DeviceReplay對象,或者在Object.SetObject.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.focusWebEdit(“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方法

    描述

    模擬一個按鍵的按下并保持(相當于Win32KEY_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不會對應用程序造成影響。

    如果需要組合熱鍵,僅需要像人工執行的方式一樣即可。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: qtp QTP 對象 揭秘 DeviceReplay

    41/41234>

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>