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

发表于:2015-11-25来源:uml.org.cn作者:不详点击数: 标签:QTP自动化测试
问题 17-6.如何防止电脑因为屏保而锁住 有时我们需要执行耗时很长的无人值守脚本,如果几分钟没有键盘或鼠标操作,屏保策略会使机器锁住,将导致Q

  问题 17-6.如何防止电脑因为屏保而锁住

  有时我们需要执行耗时很长的无人值守脚本,如果几分钟没有键盘或鼠标操作,屏保策略会使机器锁住,将导致QTP脚本不能执行的问题。我们可以使用以下键盘和鼠标模拟事件来避免这种情况。

'C:\PreventPCLock.vbs
ConstmicVoid = 0
ConstmicByte = 26
ConstmicLong = 3
Const KEYEVENTF_KEYUP = &H2

'创建Extern对象
Set Extern = CreateObject("Mercury.ExternObj")
extern.Declare micVoid,"keybd_event","user32" ,"keybd_event" , _
micByte,micbyte,miclong,micLong

Extern.Declare micVoid,"Sleep","kernel32","Sleep",micLong

While True
extern.keybd_event 0, 0, KEYEVENTF_KEYDOWN, 0
Extern.Sleep 20000
Wend

  小提示:以上代码有可能会产生“无法找到指定模块”的错误,这是因为包含这些类的DLL在注册表中并未包含完整路径造成的。为了解决这个问题,需要将QTP安装后的bin文件夹添加到Windows的PATH环境变量中。

  我们可以使用如下代码将QTP的bin目录加到windows的PATH环境变量中

'此函数将一个目录加入到PATH环境变量
Public Function AddToSystemPath(ByVal Path)
  Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")

  '取得Windows环境变量
  Set colItems = objWMIService.ExecQuery _
      ("Select * From Win32_Environment Where Name = 'Path'")

  For Each objItem in colItems
      '如果PATH中还没有此路径,将它添加到PATH变量中
      If InStr(objItem.VariableValue, Path)= 0 Then
        '如果路径不存在则添加
strPath = objItem.VariableValue& ";" & Path
objItem.VariableValue = strPath
objItem.Put_
      End If
  Next
End Function

AddToSystemPath "C:\Program Files\Mercury Interactive\QuickTest Professional\bin"

  传入一个键码值(keyascii)为0到keyba_event方法中会触发一个没有按键的键盘事件。以上代码可以以放在VBScript文件中运行。

  问题 17-7.如何最大化一个窗口或浏览器

'声明
Private Const SW_MAXIMIZE = 3
Extern.DeclaremicLong, "ShowWindow", "user32.dll", "ShowWindow", _
micHwnd, micLong

'如果要最大化一个窗口,那需要使用它的句柄.
hWndWindow = Browser("creationtime:=0").GetROProperty("hwnd") 
'最大化窗口
Extern.ShowWindowhWndWindow, SW_MAXIMIZE

  问题 17-8.如何从一个URL下载文件到本地硬盘

'Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" 
'( ByValpCaller As Long, ByValszURL As String, ByValszFileName As String, 
'ByValdwReserved As Long, ByVallpfnCB As Long ) As Long
Extern.DeclaremicLong,"URLDownloadToFile","urlmon","URLDownloadToFileA", _
micLong,micString,micString,micLong,micLong
sSourceURL = http://mysite/logo.gif
sTargetFile = "C:\logo.gif"
Extern.URLDownloadToFile 0, sSourceURL, sTargetFile, 0,0

  第二十八章 QTP高级应用

  在本章我们将会讨论QTP中各种相对高级的常见问题及解决方案,这里故意把本章留在最后,主要的原因是本章的各种概念在之前的很多章节中已经提到过,我们还会介绍Settings对象在运行时遍历所有的子项,此技术可以用于研究发现QTP的一些文档未公开的隐藏特性。

  不同机器的测试脚本同步执行

  在一些复杂的测试系统场景下会需要QTP去通过脚本去触发另一个脚本以及需要执行的被测应用,在这类情况下,我们需要通过同步通知方式来使不同种类的应用进行协同工作。

  为了解决此类问题,我们需要从QTP脚本运行中获取到过程信息,主要是通过QTP的自动化模型AOM下的Environment对象接口来实现所需要的同步进行协作和控制的脚本执行。以下脚本展示了怎样通过自动化模型 AOM获取到本地机和远程机上的环境变量Environment对象:

原文转自:http://www.uml.org.cn/Test/201307084.asp