3.9 API的应用
阶段要点
● 透彻分析Extern对象实际用法。
● 区分3种DLL调用方式。
● 快速掌握如何把原始VB API转化为QTP API。
● 如何通过VBS调用API实现简单GUI自动化操作。
3.9.1 Extern对象详解
做过Windows程序开发的工程师们一定会对WIN32 API有所了解,它主要是Windows提供给开发人员的一个应用程序的接口,提供了很多方法,包括获取鼠标信息、修改窗口大小、修改控件颜色、给控件发送消息等。由于在VBScript中并没有提供这样一个可以调用API的方法,因此MERCURY在QTP中加入了一个可以调用API的接口对象,它就是Extern保留对象。下面就详细介绍一下如果使用此对象。
Extern对象:用于调用Win32 API的保留对象
类方法:Declare:声明DLL内部的过程引用。
调用方法:Extern.Declare (RetType, MethodName, LibName, Alias [, ArgType(s)])
需要使用API接口首先就必须在QTP中声明,一旦成功声明了一个内部函数引用后,QTP就会自动加载此方法,并且在调用Extern之后提供了很方便的Intellisence。
这里需要对此函数的几个参数进行一下解释,第一个RetType是需要调用函数返回值的数据类型,MethodName就是函数名,这个从字面上就能够看出来,LibName则是需要调用的DLL库文件的路径,如果是Windows系统,DLL则直接引用DLL的文件名即可,如果是自定义,则需要写入完整路径才可以进行调用。Alias则是DLL中的方法名,如果函数需要参数,可以在最后一并加上。具体调用方式如图3-110所示。
图3-110
如图3-110所示,第一行代码的作用是申明需要调用的方法和DLL,此处调用的是user32.dll中的GetForegroundWindow的方法,声明完毕之后,可以看见Extern对象实例已自动加载了之前声明的方法到intellisense,即可直接通过Extern保留对象点出刚才直接声明的方法。
注意:此处的Extern有一个缺陷,就是intellisense的更新问题,当声明好一个API方法之后,QTP首先需要运行一次才会为Extern保留对象自动添加这个声明好的变量。如果删除声明的这一行脚本,QTP的intellisense中仍然会保留原先的API方法,而不会自动删除。
API的用法和一些注意事项都已经说的很清楚了,下面就通过几个实际的例子讲一下如何来使用API。
实例1:获取当前窗口的句柄。
句柄是一个在自动化测试中经常会使用到的、能够唯一识别控件的属性。但是句柄往往是动态的,每一次重新打开窗口之后,此窗口的句柄就会发生变更,因此,只有通过动态获取到当前打开的窗口句柄来定位对象窗口,下面看一下QTP中具体是如何实现的:
'#######启动浏览器######## systemutil.Run "iexplore.exe" '#######创建API Extern对象########## Extern.Declare micHWnd, _ "GetForegroundWindow", "user32.dll", "GetForegroundWindow" '######使用WIN32 API获取窗口的句柄###### hwnd = Extern.GetForegroundWindow() '########通过获取的句柄控制浏览器窗口并跳转百度##### Browser("hwnd:=" & hwnd).Navigate "http://www.baidu.com" |
分析:
首先运行了IE浏览器,之后声明WIN32大中的GetForegroundWindow方法,此处的GetForegroundWindow方法代表动态获取当前窗口的句柄,最后使用QTP的描述性编程直接定位Browser对象,并转至百度页面。