有時為了維護腳本我們可能需要在Action之前或之后增加代碼。這種維護可能涉及多個數量的腳本。而QTP只允許一次打開一個腳本,所以編輯多個腳本是相當費時的工作。為了避免這種情形我們可以在所有Action中調用兩個特殊的方法,代碼如下:
'反射任何需要在Action之前執行的代碼為語句并執行 Execute GetActionStart() 'Action相關的代碼 '執行任何需要在Action之后執行的代碼 Execute GetActionEnd() |
GetActionStart和GetActionEnd方法返回空值或者是需要執行的一段代碼。下面是這兩個方法的實現。
'每個Action之前調用的方法 '這個方法允許在Action的本地作用域動態執行代碼,需要按以下格式在Action開始時調用 '執行GetActionStart() Function GetActionStart() '缺省沒有執行代碼 GetActionStart = "" '獲取需要調用這個方法的Action名字 sAction = LCase(Environment("ActionName")) If InStr(sAction,"main") Then GetActionStart = "ExecuteFilePathFinder.Locate(""Workaround.vbs"")" End If End Function '每個Action最后調用的方法 '這個方法允許在Action的本地作用域動態執行代碼,需要按以下格式在Action結束時調用 '執行GetActionEnd() Function GetActionEnd() '缺省沒有執行代碼 GetActionEnd = "" ''獲取需要調用這個方法的Action名 sAction = Environment("ActionName") ''獲取需要調用這個方法的Action名 sAction = LCase(Environment("ActionName")) 。。。 If InStr(sAction,"main") Then GetActionEnd = "ExecuteFilePathFinder.Locate(""Workaround.vbs"")" End If 。。。 End Function |
微軟Windows應用編程接口(API)為開發Windows 應用程序提供了很多構建好的模塊。它提供各種操作方法,比如獲取鼠標坐標,窗口句柄,顏色等。QTP支持調用動態鏈接庫內定義的這些方法,但是由于 VBScript的限制,只有有限的一部分API可以在QTP中使用。
本章使用的API的更多細節和信息可以從MSDN或者Visual Studio的API Viewer工具查詢獲得。
Extern對象
QTP提供一個Extern功能對象用來聲明和調用API。
語法
Extern.Declare (RetType, MethodName, LibName, Alias [, ArgType(s)]) |
更多細節可參考QTP用戶手冊。
VB API定義語法
Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long |
對以上API,我們需要使用QTP的Declare方法確定使用的合適參數:
1、RetType = micLong(函數返回類型)
2、MethodName = "GetForegroudWindow" (我們可以使用任何其他名字,但是比較好的做法是使用實際API的名字)
3、LibName = "user32.dll" (如果不是使用Windows系統自帶的DLL,那么文件名必須使用絕對路徑,例如"C:\MyApp\Lib\mylib.dll")
4、Alias = "" 或者"GetForegroudWindow"(如果MethodName跟Alias相同,則Alias可以為空值。
5、ArgType(s) = 本例中不需要傳入參數)。
QTP API定義
Extern.Declare micLong,"GetForegroundWindow","user32.dll","GetForegroundWindow" |
以下用一些用例來演示使用API解決通常遇到的問題。
問題 17-1.如何判斷當前桌面最上面的為瀏覽器窗口
'聲明GetForeGroundWindow API extern.Declare micLong,"GetForegroundWindow","user32.dll","GetForegroundWindow" '獲取最前面窗口的句柄 hwnd = extern.GetForegroundWindow() '判斷是否有包含此句柄的瀏覽器窗口 isBrowser = Browser("hwnd:=" &hwnd).Exist() If isBrowser then Msgbox "The top most window is a browser" End if |
原文轉自:http://www.uml.org.cn/Test/201307084.asp