实例2:运行测试脚本时最小化QTP窗口。
在执行自动化测试过程中,经常会出现QTP窗口挡住测试程序界面的现象,特别是在进行脚本调试的时候,需要去判断到底问题是出在哪个环节上,如果QTP把界面给挡住了,将会非常不方便,每次都需要使用Tab键来进行切换才可以,不过当有了WIN32 API之后,就可以直接调用它的ShowWindow方法来直接把QTP自身对象窗口最小化:
Const SW_MINIMIZE = 6 '声明user32.dll中的ShowWindow方法 Extern.Declare micLong,"ShowWindow","user32.dll","ShowWindow",micLong,micLong '高亮QTP窗口对象 Window("text:=QuickTest.*").highlight '获取QTP自身的窗口对象的句柄属性 ohwnd = Window("text:=QuickTest.*").GetROProperty("HWND") '调用ShowWindow方法 并加入最小化窗口参数 Extern.ShowWindow ohwnd,SW_MINIMIZE '等待两秒钟 wait 2 |
分析:
代码中的第一行相信读者应该在之前的例子中已经掌握了它的用法。接着脚本通过描述性编程的方式来获取到QTP对象窗口(此处也可以使用对象库,为了讲解方便,直接用描述性编程来代替),并使用GetROProperty方法获取到其QTP对象窗口的句柄属性值,并加入到后面ShowWindow函数的第一个参数中,作用是定位需要更改窗口显示状态的窗口对象,第二个参数则是代表需要更改的窗口状态,此处为SW_MINIMIZE,即代表最小化窗口。
注意:QTP本身并没有加入反HOOK注入,因此,同样可以把QTP自身程序窗口加入到对象库中并对其进行一些操作。以上脚本就是直接通过Window("text:=QuickTest.*")获取到QTP对象窗口的,获取到之后即可方便做操作。
小提示:QTP主要提供了3种DLL的调用方式,这3种调用方式分别为Extern、CreateObject、DotNetFactory,而这3种调用方式都分别对应着不同类型的DLL。首先Extern所调用的DLL为WIN32 API - DLL,Createobject所调用的是ActiveX类型的DLL,这类DLL其实应用的最多,AOM \ EOM等都是此类型的DLL,最后一种.NET Factory是直接调用.Net framework 或者.NET自定义的DLL。这些希望读者能够把它们区分开。
3.9.2 VB API转化QTP API
在前一小节中大致讲解了如何在QTP中调用WIN32 API以及Extern的语法和实际使用。但是如果不熟悉WIN32 API,每次使用WIN32 API之前都需要使用API viewer查找到相应的函数声明语句,找到这些相应的函数声明语句之后还不可以直接进行使用,因为QTP本身的语法只支持VBS,而VBS并不支持直接调用WIN32 API,只能将之前的函数声明语句转化成Extern调用声明语句来适应QTP的使用。其实细心的读者一定会发现它们之前的转化是有一定的规律的。因此,完全可以去实现一个自动化转化的过程,当然在这里要告诉大家一个好消息,印度的QTP大师Tarun Lalwani已经为我们完成了这样一个工作,这样就可以直接拿来使用了。这里通过一个简单的例子来讲解如何一步步实施。
1.下载并安装API Viewer tools
由于.NET程序不像在Visual Studio中有API Viewer 这样的工具,因此,需要自行去下载一个,或者计算机上同时也装有Visual Studio 6.0即可。此处提供一个下载地址:
http://www.activevb.de/rubriken/apiviewer/index-apiviewer.html
2.打开API Viewer并加载相应的库
打开时窗口中的很多控件都是Disable状态,即不可用的,因为此时还没有对程序加载相应的库文件,API Viewer是空的状态,现在加载相应的WIN32库文件,点击File→Open,选择Win32api.apv,如图3-111所示。
图3-111
在选中WIN32api.apv后,点击打开按钮,就会加载相应的库。所有控件的数据都被自动填入并可供选择使用,如图3-112所示。
图3-112