全局作用域内执行本地作用域代码
我们之前看过如何在本地作用域加载库函数文件("运行时动态加载本地库函数文件")以及如何从本地加载全局作用域库函数文件("运行时动态加载全局库函数文件")。
有时为了维护脚本我们可能需要在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" |
原文转自:http://www.uml.org.cn/Test/201307084.asp