51Testing丛书连载:(五十一)精通QTP——自动化测试技术领航

发表于:2012-2-23 11:12

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:余杰 赵旭斌    来源:51Testing软件测试网

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对象,并转至百度页面。

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号