QTP的DeviceReplay對象

發表于:2011-10-09來源:未知作者:領測軟件測試網采編點擊數: 標簽:qtp
不知道為什么HP的幫助文檔中沒有提供關于DeviceReplay的強大功能的信息描述。你可以在Java插件中卻可以找到DeviceReplay的屬性,但是對于那些不使用Java插件的人可能會覺得這個對象僅在Java程序的測試中可用。

  不知道為什么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

  通??梢允褂肍ireEvent “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 : 按鍵的數值碼??刹殚喓竺娴?ldquo;Key Codes 參考”。

原文轉自:http://www.anti-gravitydesign.com

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