1. 常用保留对象(Utility Objects)

  保留对象:所谓QTP保留对象就是QTP本身预留的一些可用对象。

  通俗些讲就是,当打开QTP时它就已经把这些对象给实例化了,直到关闭QTP后,这些保留对象的实例才会终止。这些保留对象都是QTP事先封装好的常用操作对象,无需像开源软件那样都需要自己来搭建这些对象和类库,一切都是现成的!在保留对象中有些是可见的,有些是隐藏的(需要人工开启),具体如何查看隐藏保留对象会在下一个小节中详细进行讲解。

  那么保留对象具体在QTP中如何呈现呢?当打开QTP后,按F7键,弹出了步骤生成器窗口,如下图所示

每个保留对象都是一个COM组件,都可自行创建,其中很多的保留对象在做实例项目测试的时候都是非常实用的,接下来就为大家介绍几个常用的保留对象。

  1)Crypt:加密模块保留对象

  实现如下所示:

PwStr = Crypt.Encrypt("mercury")

Dialog("Login").WinEdit("Agent Name:").Set "mercury"

Dialog("Login").WinEdit("Password:").SetSecure PwStr

Dialog("Login").WinButton("OK").Click

  分析:

  利用Crypt保留对象可以把字符串自动转化为加密形式的字样,并且每次动态生成的加密密码都是不一样的,其实,此功能就是Password Encoder

 2)Desktop:桌面保留对象

  实现如下所示:

Desktop.CaptureBitmap "D:\1.bmp"

  分析:

  通常此对象用于出错时的截图,使用此对象来截图非常方便,只需给定生成截图的路径即可,这个在前面的章节也用过。

  3)MercuryTimes:计时保留对象

  实现如下所示:

‘计时开始

MercuryTimers("LoginPage_MainPage").Start

'******************************************

' LOGIN  MAINPAGE

Wait 2

'******************************************

‘计时结束

MercuryTimers("LoginPage_MainPage").Stop

‘获取总共耗时时间

Print MercuryTimers("LoginPage_MainPage").ElapsedTime

  分析:

  MercuryTimes保留对象是一个非常实用的对象,它对于测试应用程序的性能是非常有帮助的,此对象也是在QTP 9.2版本才开始加入的。

  4)PathFinder:路径保留对象

  实现如下所示:

Msgbox PathFinder.Locate("Default.xls")

  分析:

  PathFinder在QTP中的可见方法只有Locate,其参数为文件名称,其作用主要是获取到参数中的文件的完整绝对路径。

  5)RandomNumber:随机数保留对象

  实现如下所示:

Print RandomNumber.Value (0, 100)

  分析:

  执行以上脚本会得到一个0~100的随机数。注意,此处包含0和100。由于此处Value是默认属性,因此可以省略。

2. 隐藏保留对象

上一小节已经介绍了一些常用的保留对象,但其实保留对象远远不止这些,QTP本身在步骤生成器中还隐藏了一些保留对象,如RegisterUserFunc、WebUtil、UnRegisterUserFunc等,这些保留对象都是QTP的隐藏模式保留对象。你会发现步骤生成器中根本找不到这些保留对象,但是这些对象确实是真实存在的,比如:

  ● WebUtil:此对象在QTP的帮助文档里以及对象浏览器里都是找不到的,可以说是QTP的一个隐藏对象。

  我们只需要在专家视图中输入WebUtil再加一个“点”,就会展开许多的方法。

其实隐藏保留对象都可在注册表中查看:

运行“regedit”进入注册表,依次单击HKEY_CURRENT_USER→Software→Mercury Interacitve→QuickTest Professional→MicTest→ReservedObjects下的所有项如下图所示:

可以看到QTP中所有存在的保留对象,不管隐藏的还是非隐藏的保留对象都可以直接找到。其中每一项代表着一个保留对象,在此目录中的每一项下的KEY包含ProgID。ProgID代表着保留对象创建的COM字符串,例如:

Set oRegisterFunc = CreateObject(“Mercury.RegisterUserFunc”)

  这些保留对象基本上都可以通过以上的方式来创建,不过有些只能在QTP中进行创建。

  注意:当在QTP中创建这些对象时,也就意味着自行创建了一个保留对象的实例,而此实例与原来QTP默认实例化的保留对象是没有任何关系的。

3.  自定义保留对象

我们可以将所有使用的方法封装成DLL文件,然后通过COM机制注册到系统中,注册自定义保留对象机制来完成对象的定义。

Step 1.在VB环境下新建一个DLL文件

1)打开VB6.0环境,选择ActiveX DLL, 简单设计一个函数和一个过程,代码如下:
Public Function CompareValue(Para1, Para2)
If Para1 = Para2 Then
MsgBox "输入的两个参数相等", vbInformation + vbOKOnly, "提示"
Else
MsgBox "输入的两个参数不相等", vbInformation + vbOKOnly, "提示"
End If
End Function
2) 设置工程属性

类名,设置为:ClassName,注册自定义保留对象用到。
 工程名,设置为:PrjName,注册自定义保留对象用到。

3) 生成文件:PrjName.dll
 点击文件——>生成 PrjName.dll

Step 2. 注册DLL文件为标准的COM组件

如果文件放到F盘下,那运行:regsvr32 f:\PrjName.dll就可以完成注册,撤销注册运行:regsvr32 /u f:\PrjName.dll。注册完成后,注册表HKEY_CLASSES_ROOT中查询PrjName.ClassName

Step 3. 注册自定义QTP保留对象

打开注册表,定位注册项:HKEY_CURRENT_USER→Software→Mercury Interacitve→QuickTest
Professional→MicTest→ReservedObjects
 添加一个名为“MyObject”的注册项;
 添加两个“REG_SZ”类型的注册项,分别为:
 ProgID:准备创建的COM 对象的ID,在这里就是Dictionary 对象所对应的COM 对 象名 “PrjName.ClassName”。这个就是前面提到的VB中的工程名、类名。 UIName:QTP指向保留对象的名
字,在这里输入“MyObject”
 添加一个类型为“REG_DWORD”的注册项;
 VisibleMode:设置DWORD 值为2,用于控制自动完成(auto-complete)和代码智能感知(intelligence)。

也可以按下通过运行下面的reg文件的方式来注册:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Mercury Interactive\QuickTest Professional\MicTest\ReservedObjects\REG_SZ]
"ProgID"="PrjName.ClassName"
"UIName"="MyObject"
"VisibleMode"=dword:00000002

Step4. 使用自定义QTP保留对象
 做完以上设置后,重新启动QTP, 在Insert菜单中选择Step Generator,然后选择Utility Objects,你可以在Object中看到我们定义的保留对象.

QTP 保留对象的更多相关文章

  1. QTP 中对象操作

    1.创建对象(将浏览器设置为一个对象) set oIE=createobject("internetexplorer.application") 2.将浏览器设置为可见的 oIE. ...

  2. QTP 学习 - 对象库

    QTP的关键字视图和专家视图 1.Keyword view(关键字视图) 在录制脚本的过程中,用户执行的每一个步骤,在关键字视图中记录为一行. 关键字视图直观有效,用户可以很清楚的看到被录制对象的录制 ...

  3. QTP使用dictionary 对象

    1. 创建即使用Dictionary对象 ' 创建Dictionary对象Set Dic = CreateObject("Scripting.Dictionary")' 添加Dic ...

  4. 整理QTP知识之1

    以下说明由网络其他文章整合而成. 一.关于QTP的说明 QTP是目前市场上占有率最高的一款自动化测试工具,也是每一位测试工作者最想掌握的工具之一,也是目前流行的基于GUI的功能自动化测试工具之一. Q ...

  5. Scala 编程---类和对象

    类是对象的蓝图.一旦你定义了类,你就可以用关键字new从类的蓝图里创建对象.比方说,如果给出了类的定义: class ChecksumAccumulator { // class definition ...

  6. QTP和WinRunner区别

    QTP,全称为Quick Test Professional,它与WinRunner同为MI公司开发的功能强大的功能测试工具.从时间上来看,WinRunner在1995年便已经推出,远早于QTP,而Q ...

  7. Scala 编程(二)类和对象

    类,字段和方法 类是对象的蓝图.一旦定义了类,就可以用关键字new从类的蓝图里创建对象,类的定义: class ChecksumAccumulator { // class definition go ...

  8. QTP特点有哪些?

    QTP特点有哪些? 浏览:77 | 更新:2013-06-19 12:35 QTP是一个侧重于功能的回归自动化测试工具:提供了很多插件,如:.NET的,Java的,SAP的,Terminal Emul ...

  9. JavaScript对象的深浅复制

    前言 从层次上来看,对象的复制可以简单地分为浅复制和深复制,顾名思义,浅复制是指只复制一层对象的属性,不会复制对象中的对象的属性,对象的深复制会复制对象中层层嵌套的对象的属性. 在复制对象时,除了要复 ...

随机推荐

  1. C# DATETIME格式转换汇总 根据日期获取星期

    原文:C# DATETIME格式转换汇总 根据日期获取星期 C# DateTime.Now.Year --2019(年) DateTime.Now.Month --9(月) DateTime.Now. ...

  2. NGUI的anchors属性的使用

    一,anchors锚点 我们需要明白target目标的使用,这时是你下面使用left,right,bottom和top的距离,比如我们使用目标为UI Root,这个就是摄像机的视野,所以,我们使用an ...

  3. 一个神奇却很简单的css特效

    在网上看到一个前端大牛的主页,觉得他有一个特效特别酷,一开始还以为是要用什么javascript代码来实现,但仔细看一下,发觉只是用几行css代码就搞定了,我觉得挺好的. 他这个效果就是鼠标放在左半部 ...

  4. vue,一路走来(3)--数据交互vue-resource

    所有的静态页面布局完成后,最重要的就是数据交互了,简单来说,vue-resource就像jquery里的$.ajax,用来和后台交互数据的.放在created或ready里运行来获取或者更新数据的.不 ...

  5. Codeforces Round #393 (Div. 2) - B

    题目链接:http://codeforces.com/contest/760/problem/B 题意:给定n张床,m个枕头,然后给定某个特定的人(n个人中的其中一个)他睡第k张床,问这个人最多可以拿 ...

  6. Es学习第九课, 聚合查询和复合查询

    ES除了实现前几课的基本查询,也可以实现类似关系型数据库的聚合查询,如平均值sum.最小值min.最大值max等等 我们就用上一课的数据作为参考来举例 聚合查询 sum聚合 sum是一个求累加值的聚合 ...

  7. setInterval,setTimeout,clearInterval

    定时器 var i=0; function iadd(){ i++; console.log(i) } setInterval(iadd,1000);//1.2.3... 超时调用 var i=0; ...

  8. CentOS6.8 安装/升级Python2.7.x,并安装最新setuptools、pip、fabric程序总结

    最终靠谱的可借鉴文档: 1.python官网 2.http://lovesoo.org/python-fabric-yuan-cheng-zi-dong-bu-shu-jian-jie.html 3. ...

  9. 【leetcode】564. Find the Closest Palindrome

    题目如下: 解题思路:既然是要求回文字符串,那么最终的输出结果就是对称的.要变成对称字符串,只要把处于对称位置上对应的两个字符中较大的那个变成较小的那个即可,假设n=1234,1和4对称所以把4变成1 ...

  10. C++ LinearRegression代码实现

    这里基本完全参考网络资源完成,有疑问欢迎留言! LinearRegression.h #pragma once #ifndef ML_LINEAEEEGRESSION_H #define ML_LIN ...