etao搜索

QTP对象识别(一)

上一篇 / 下一篇  2009-01-10 13:59:38 / 个人分类:QTP

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和本声明,否则将追究法律责任。

本文出自
asoqa的51Testing软件测试博客:http://www.51testing.com/?233320

   老实说,不接触QTP的研究已经有1年了,这1年一直在从事单元测试和接口测试的工作。最近有同事玩QTP,兴趣被引上来了,重新回味一下当年对QTP的研究。

   看到很多人被QTP弄得晕头转向,我深有感触,有一句话突然浮上心头不识庐山真面目,只缘身在此山中。当你接触并研究过多个工具之后,会发现道理原来就是这么简单。这里也送迷路者一句话:工具永远只是工具,工具永远是被利用的,你更需要把握问题的本质。

    废话不多说了,当年我用的版本是QTP9.0,这里把我对QTP的一些认识重新整理,和各位分享,仁者见仁,智者见着,大家相互学习,共同切磋。有什么不正确的地方,欢迎大家指出。整理的思路我按照从浅入深逐步展开,以便大家理解。例子就以Web应用为例,这个我比较熟悉,但道理是共通的。当然要了解本文,你还是需要具备基本的QTP知识,至少要知道录制、回放、对象库、描述性编程等基本概念。

QTP对象库

例如我们以Google的搜索为例录制脚本,代码如下:

Browser("Google").Page("Google").WebEdit("q").Set "qtp"

Browser("Google").Page("Google").WebEdit("q").Submit

当录制下这段代码之后,QTP做了哪些事情呢?

1.首先最明显的在QTP主窗口的专家视图下多了两行代码(废话-_-!

2.其次我们打开Object Repository,发现QTP创建了一些对象

QTP自动生成的代码怎么理解?结合Object Repository,可以这样理解,有一个名叫Google的根节点Browser对象,这个对象中有一个名叫GooglePage对象,Page对象中有名叫qWebEdit对象,WebEdit对象执行了Submit方法。实际上Browser()这是Browser对象的默认方法,这个方法接收一个对象名参数,返回Browser对象,PageWebEdit也类似。除了用对象名参数化对象方法之外,还可以用其他的属性或者对象参数化。

这段代码涉及3种类型的对象:Browser对象、Page对象、WebEdit对象。怎么知道这些对象的类型,可以在Object Repository窗口的右侧的Class属性就知道了。右侧的有部分属性是不能修改的,有部分属性是可以修改。可修改的属性都有一个默认显示的列表,点击添加按钮可以改变默认值的设置。这个有什么作用呢?默认的属性是QTP用来描述抓取下来的对象的,你可以通过修改它让QTP在执行时根据你的设置灵活的匹配实际的对象。

本文出自asoqa的51Testing软件测试博客:http://www.51testing.com/?233320

QTP怎么去标识一个对象?

在录制时,QTP根据Object Identification中定义的对象属性在录制时识别页面的元素,并映射QTP的测试对象(Test Object, TO);同时根据Web Event Configuration中定义的规则识别对象事件。默认QTP自带了对ActiveXVisual BasicWeb对象的识别规则,其他例如JavaFlash等的需要加载相应插件。

 

在回放时,QTP根据测试对象的属性定位实际页面上的对象(Run-time Object, RO),并在RO上执行事件。如果回放时找不到对象,QTP会默认启动智能识别(Smart Identification),智能识别的规则在Object Identification中单独定义。

 

 

 

More About录制/回放

 

录制的主要目的在于获取对象,以便回放时能够识别。获取对象的方法有几种方式,录制只是其中一种,也就是录制这一步不是必须的,可以跳过。那还有哪些方式可以获取对象呢?

1.   Object RepositoryAdd Object直接抓取对象,其实也是另一种形式的录制

2.   常说的描述性编程,描述性编程又可以分成两种基本类型:基于QTP Test Object的描述性编程和基于DOM Object的描述性编程。后者需要对对象识别的理解更加深入,这里稍后介绍。而前者就是大家十分熟悉也经常使用的,具体有三种不同的使用方式:

      a)   DescrīptionChildObjects组合

Set ōDesc = Descrīption.Create()

oDesc("micclass").Value = "WebRadioGroup"

Set ōbjs = Browser("Google").Page("Google").ChildObjects(oDesc)

objs(0).Select "#1"

      b)   Descrīption对象参数化Test Object

Set ōDesc = Descrīption.Create()

oDesc("name").Value = " 手气不错"

Browser("Google").Page("Google").WebTable("高级搜索").WebButton(oDesc).Click

      c)   用属性参数化Test Object

            Browser("Google").Page("Google").WebTable("高级搜索").WebButton("name:=手气不错").Click

 

             默认的,录制回放时的事件都是QTP封装后的事件。

(待续。。。)


TAG: QTP 描述性编程 对象识别

芳华永远的个人空间 引用 删除 芳华永远   /   2012-08-03 07:21:55
谢谢楼主的好文章
蚯蚓的个人空间 引用 删除 huangqy   /   2010-01-18 10:11:13
学到好东西,楼主分析得很透~
蚯蚓的个人空间 引用 删除 huangqy   /   2010-01-18 10:10:42
3
季风的测试生活 引用 删除 jifeng   /   2009-02-12 12:09:37
很好,分析的恨透彻,LZ理解很深啊
 

评分:0

我来说两句

日历

« 2024-04-17  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 16523
  • 日志数: 11
  • 建立时间: 2008-12-10
  • 更新时间: 2010-06-10

RSS订阅

Open Toolbar