揭秘 QTP 的 DeviceReplay 對象 原文: The Undocumented DeviceReplay ( http://www.advancedqtp.com/2008/03/undocumented-devicereplay/www.advance" name="description" />

揭秘QTP的DeviceReplay對象

發表于:2008-06-05來源:作者:點擊數: 標簽:qtpQTPDeviceReplay揭秘對象
MI LY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">揭秘 QTP 的 DeviceReplay 對象 原文: The Undocumented DeviceReplay ( http://www.advancedqtp.com/2008/03/undocumented-devicereplay/www.advance

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

 

通??梢允褂?/SPAN>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 按鍵的數值碼??刹殚喓竺娴摹?/SPAN>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 按鍵的數值碼??刹殚喓竺娴摹?/SPAN>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.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97