51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 6909|回复: 19
打印 上一主题 下一主题

[原创] 【互动QTP】

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-12-3 23:44:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
【互动QTP】
作者:卢晨之 转载请注明


     脱离了QC的QTP,仿佛就是一个独行侠,如何能够更好的与其它程序做通讯,让它实时做出相应的操作是我们所期望的。我们能否模仿出QC让QTP停就停,跑即跑的功能呢?答案是可以的。
一,了解QTP Automation object model
    打开QTP的帮助文档,我们可以在QuickTest Advanced这里看到QTP Automation object model。而它提供给我们操作QTP Application对象的方法与属性等。它的子对象,方法都非常丰富,其中有大家熟悉的如何配置启动一个QTP程序等等,而我们今天文章的内容不是如何去启动它,而是获取它,并和它对话。
先看看,我们使用下面代码来获取已经打开或者在运行中的QTP Application的环境变量,代码是VBS,我们可以新建一个GetQTPEnvironmentValue.Vbs:
   VBS代码:
   Dim qtApp
   Set qtApp = CreateObject("QuickTest.Application")
   Msgbox qtApp.Test.Environment.Value("NeedHelp")
然后我们或者打开一个QTP,添加进去一个环境变量,名字为:“NeedHelp”,值是“True”,接着我们再写个死循环让它跑:
   QTP
   While Environment("NeedHelp")
        i=i+1
   Wend
   Msgbox i
接着我们运行GetQTPEnvironmentValue,Vbs这个文件,这个时候,我们可以看到跳出了提示窗口是“True”。
二,让外部脚本给QTP下“命令”
    看完上面小小代码片,大家或者已经知道,原来我们使用Set qtApp = CreateObject("QuickTest.Application")语句是可以获取正在运行的QTP对象,同时我们也能够获取它的一些属性与设置等等。
同样,我们也能够对它做操作,把上面的VBS文件内容稍微做改变:
   VBS代码:
    Dim qtApp
   Set qtApp = CreateObject("QuickTest.Application")
   qtApp.Test.Environment.Value("NeedHelp")=False
   这个时候,我们让QTP的那个死循环跑起来,接着运行这个VBS文件,就能看到Popup出来的i值了。
哪么,我们是否只能通过这样的方法呢?当然不是,我们看到在Application.Test对象下面,不但有Environment这个属性,同样它还有Run,Stop,Continue,Pause等方法。所以,使用这些方法我们同样也能够让外部程序或者VBS来让QTP跑或者停或者继续,功能就和QC一般。
   VBS代码:
   Dim qtApp
   Set qtApp = CreateObject("QuickTest.Application")
   If qtApp.Test.Environment.Value("NeedHelp")then
           qtApp.Test.Pause
         WScript.Sleep 5000
        qtApp.Test.Continue
        qtApp.Test.Environment.Value("NeedHelp")=False
    End if
    QTP VBS:
     While Environment("NeedHelp")
        i=i+1
     Wend
     msgbox i

三,“偷”出QTP的对象
     同样,有了环境变量这个东西,我们可以把QTP的对象复给它,并“偷出城”去,为我们自己所用。不过自然它能使用的方法都是QTP封装 To的方法与属性,不能使用Ro属性,例如只能使用GetTopropert而不能使用GetRopropert,但是我们如果想要获取它原装的方法与属性,可以使用.Object方法去操作它。
首先,我们可以添加一个对象到对象库中,接着在QTP的代码
Environment("NeedHelp")=browser("百度一下,你就知道").Page("百度一下,你就知道").WebButton("百度一下")
Msgbox “123”    ‘这里需要停住,让QTP运行,如果QTP停止了,外面的VBS脚本就会出现缺少对象情况。

    VBS代码:
    Dim qtApp
   Set qtApp = CreateObject("QuickTest.Application")
   MsgBox qtApp.Test.Environment.Value("NeedHelp").GetRoproperty("Name")
   MsgBox qtApp.Test.Environment.Value("NeedHelp").Object.id

[ 本帖最后由 假装不在 于 2009-12-3 23:48 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2009-12-4 10:03:47 | 只看该作者
支持!
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2009-12-4 13:45:47 | 只看该作者
支持原创!
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2009-12-4 16:30:43 | 只看该作者

支持!

刚开始学测试,看的晕忽忽的!
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2009-12-4 19:53:00 | 只看该作者
原帖由 zzxxbb112 于 2009-12-4 10:03 发表
支持!

::yxiao::: 一起学习。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2009-12-4 19:53:14 | 只看该作者
原帖由 lantianwei 于 2009-12-4 13:45 发表
支持原创!

::yiwusuoyou::: 谢谢。
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2009-12-4 19:53:32 | 只看该作者
原帖由 donglei1205 于 2009-12-4 16:30 发表
刚开始学测试,看的晕忽忽的!

可以先看点简单的。
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2009-12-11 10:50:30 | 只看该作者
阿晨强大啊
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2009-12-11 20:49:30 | 只看该作者
原帖由 timfung 于 2009-12-11 10:50 发表
阿晨强大啊


好奇怪的叫法。::yiwusuoyou:::
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2009-12-15 22:43:56 | 只看该作者
问个弱弱的问题:
MsgBox qtApp.Test.Environment.Value("NeedHelp").GetRoproperty("Name")--这里的("Name")取出的是什么?
   MsgBox qtApp.Test.Environment.Value("NeedHelp").Object.id--这个是否可以用作将QTP运行异常时抛出其Object.id?
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2009-12-15 23:05:30 | 只看该作者
原帖由 ivykkk 于 2009-12-15 22:43 发表
问个弱弱的问题:
MsgBox qtApp.Test.Environment.Value("NeedHelp").GetRoproperty("Name")--这里的("Name")取出的是什么?
   MsgBox qtApp.Test.Environment.Value("NeedHelp").Object.id--这个是否可以用作 ...


第一个抛出来的是这个button的name.而第2个是用dom对象的属性,也就是获取它的ID。
而你的第2个问题“这个是否可以用作将QTP运行异常时抛出其Object.id?”看不明白。Object.id不一定什么都有,像web的Web Element也不都一定有id。而像CS之类的对象,主要是使用句柄hwnd,不是id。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    擦汗
    2017-5-23 20:24
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]测试连长

    12#
    发表于 2009-12-29 16:39:46 | 只看该作者
    原帖由 donglei1205 于 2009-12-4 16:30 发表
    刚开始学测试,看的晕忽忽的!

    me too me too
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2010-1-28 11:10:45 | 只看该作者
    看过那个轻量级qtp框架,但是它是把QTP作为驱动工具,vbs作为脚本来运行,手动代码量比较大,且失去了qtp的自动化录制的优势,

    改进了一下,用VB.net写了个qtp的运行管理工具,也算是个框架,来驱动QTP的工作,和LZ的想法差不多,其实这样也满好的。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2010-1-28 11:17:36 | 只看该作者
    原帖由 kongfucat 于 2010-1-28 11:10 发表
    看过那个轻量级qtp框架,但是它是把QTP作为驱动工具,vbs作为脚本来运行,手动代码量比较大,且失去了qtp的自动化录制的优势,

    改进了一下,用VB.net写了个qtp的运行管理工具,也算是个框架,来驱动QTP的工作,和 ...

    期待你能把你的工具,或者工作原理以贴图或文档的形式发到论坛来...那样对大家都有很大帮助
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
    发表于 2010-1-28 11:19:04 | 只看该作者

    回复 13# 的帖子

    我们的名字后都有"cat"呵呵
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2010-3-2 11:00:16 | 只看该作者

    请问:可以用对象方法,获取设置Action Run 属性吗

    想解决:由外部传入指定 Action Run DataTable 的某几行数据。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
    发表于 2010-3-2 14:02:26 | 只看该作者
    路过,学习了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
    发表于 2010-3-2 14:08:40 | 只看该作者
    没有什么新意,通篇一句话就可以概括:QTP提供二次开发接口
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
    发表于 2011-9-26 15:58:21 | 只看该作者
    好像这里的环境变量只能是原来设置了什么值,就是什么后,原面重新赋值都没有用
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
    发表于 2011-9-27 15:42:56 | 只看该作者
    支持
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-3 16:18 , Processed in 0.089343 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表