QTP自动化测试权威指南(6)

发表于:2015-02-28来源:uml.org.cn作者:不详点击数: 标签:自动化测
全局作用域内执行本地作用域代码 我们之前看过如何在本地作用域加载库函数文件(运行时动态加载本地库函数文件)以及如何从本地加载全局作用域库函数

  全局作用域内执行本地作用域代码

  我们之前看过如何在本地作用域加载库函数文件("运行时动态加载本地库函数文件")以及如何从本地加载全局作用域库函数文件("运行时动态加载全局库函数文件")。

  有时为了维护脚本我们可能需要在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