51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 17217|回复: 45
打印 上一主题 下一主题

[原创] 浅谈QTP,Window与Index

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-6-20 00:40:14 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
睡觉之前,在这里浅谈下QTP与Index。多有不是之处,还请大家指点下。
    之前使用QTP测试的VB程序,知道了Index在对象识别时候起到一个很重要的主用,和条街的门牌号一样。某某街某某号,然后QTP就通过这个东西去找出来,而且也是固定不变,因此,大家就开始偏向对描述性编程的喜好与拥护。优势如下:可移植性强,对对象库的依赖减少(一会有人丢我焦皮说我扯蛋,对象库是QTP精华什么的话一句句就出来,等我说完先)
    为什么说到它的移植性强呢,首先,通过对象库去识别对象并保存对象,会出现因为机器环境不同的情况,对象在不同机器上识别为不同类别而导致脚本可移植差。关于对象库的依赖,与上边那点有点类似。
     随着时间的推移,对QTP的了解加深。现在主要是在web方面写的脚本,发现了在web的page里面,对象标示用的index是会随着对象的变化而变化着,并非一成不变(我对这个观点一直很质疑,虽然是自己发现的,但还是反复的试验着)。
     首先说下自己的质疑点
     1,关于index的生成。在VB里面,大家知道,这是开发远自己就可以定义的,但是在web里面呢?如果是可以有开发自己定义的,哪么为什么对象的标示index却在变动。
     2,这个Index是否是QTP自己在运行程序过程中,自己对该程序做的标示,也就是非window的自己标示方法,才会导致这个值在变化着。
     
     自己研究了下,后来发现,当我们添加某一个web元素时候,这个对象会对应自己的一个index,这个是window或者是web程序自己对控件的标示。而我们使用description描述出来webelemenet的对象的index,这个是QTP自己对对象的标示方法。但这样是否会冲突和矛盾呢?其实是不会的。在对象库中添加的对象,我们在代码中直接编写,QTP就自己去对象库中查找这个东西,自然这个对象的标示是web或者window自己做的。而当我们用webelement去查找这个东西时候,QTP就在网页元素自己做好了标示,类似active Screen事先把对象页面存储起来一样,已经对它们分别做好了身份识别。

     好了,说了这么多,说说用处先吧。
     大家在测试web过程,最担心的问题就是,对象识别不到,或者识别到了,不是自己理想的类型,哎,委曲求全,来个低级录制吧....
    eg:之前看到论坛有人在求救一些关于无法识别的,类似view tree之类的东西,感到很郁闷...
    哪么,根据上边的那个原理,大家可以看到,其实我们通过描述的方法做到这样:以下是一棵可以张开的树,有3个可以张开的,并且QTP对他们分别节点标示 index为1,2,3,而我们把节点张开后...

至于代码,大家自己写写看。这里可能有些地方说错了,抛砖引玉,大家指点指点。

[ 本帖最后由 假装不在 于 2008-6-20 12:10 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

46#
发表于 2009-9-5 19:37:39 | 只看该作者
刚知道index属性是qtp给出的,收获不小

qtp不是所有的对象都会有index属性吗? 我刚才随便看了几个网页的一些控件的属性,发现怎么都没的。。。

[ 本帖最后由 whoamiyaya 于 2009-9-5 23:20 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

45#
发表于 2009-9-5 15:30:21 | 只看该作者
看了你的很多日志,学到了很多。
回复 支持 反对

使用道具 举报

该用户从未签到

44#
发表于 2009-7-22 21:14:11 | 只看该作者
总的来说,楼上同志们都谈到过一些QTP中Index在实际测试中总结出来的现象.
下面我就来说说我的观点吧,
1,index是一个辅助识别属性(就是可以没有<在已经唯一标识一个对象的情况下>也可以有,),当相同描述的对象出现多个,就如某楼所说的,"性别=男"这""一个描述属性""在""全家""里因为有多个,所以就一定要Index来辅助描述.
2,index在对象是唯一的情况下,没有任何意义和价值,也就是说,只要这个对象在这个页面中确实是唯一的,那么无论你的index是什么值都能够正确识别这个对象
3,当index属性在对象库中为none的时候,不能使用SetTOProperty赋值index属性,
因为赋值能成功,但是无法使用赋值后的对象正确识别需要index属性识别的对象
回复 支持 反对

使用道具 举报

该用户从未签到

43#
发表于 2008-9-25 11:22:31 | 只看该作者
最近正好碰上这类的问题,学到很多东西。不过实际应用的时候还是有问题呢。。。
回复 支持 反对

使用道具 举报

该用户从未签到

42#
发表于 2008-9-25 11:22:07 | 只看该作者
最近正好碰上这类的问题,学到很多东西。不过实际应用的时候还是有问题呢。。。
回复 支持 反对

使用道具 举报

该用户从未签到

41#
发表于 2008-9-24 19:26:34 | 只看该作者
楼上的回复很牛叉!倒不是因为内容,而是因为字,估计视力不怎么好的人有眼福了
回复 支持 反对

使用道具 举报

该用户从未签到

40#
发表于 2008-9-11 15:04:13 | 只看该作者
对象库在QTP的易用性方面肯定是“精华”,因为你使用对象库时,可以通过"父对象.子对象.属性(或者是动作)“来编程,使用描述性编程就得自己记住对象之间的上下级关系和对象的属性。
但对象库和描述性编程的工作原理都是一样
回复 支持 反对

使用道具 举报

该用户从未签到

39#
发表于 2008-9-11 10:48:25 | 只看该作者
可惜qtp没有开放对象库操作的api,不然可以试验一下
不过我猜想他们的识别效率一般
从识别原理来说,对象给出待识别用的属性越多,越容易定位到对象,识别速度也就越快
仅用index不会很快,更何况还有可能是动态变化的
另外qtp中只用index识别的方法我试验过,识别速度有点慢
回复 支持 反对

使用道具 举报

该用户从未签到

38#
 楼主| 发表于 2008-9-11 10:15:18 | 只看该作者
原帖由 rcpp 于 2008-9-11 10:01 发表


脚本自动维护?有点意思
也就是除了对象的位置发生变化,就算对象多少属性变化,也不会识别失败?
而对象位置变化的时候,根据事先保存的属性值进行搜索,找到新的位置后进行index更新?
嗯,有创意
跟QTP的 ...


里面做到的自动修改脚本,前提应该是那个修改脚本的机器必须在前个版本之前,把那些控件的属性都记录下来,然后在第二个版本中进行寻找,然后定位index,列出一张表。
把老的表和新的表对比,做出修改。
所以这个修改脚本的机器有2个关键点,1:就是如何做到当页面打开时候一次性把所有控件的属性等保存。
2:对象的保存与对比更替。

个人觉得原理应该是这样的,这些如果要做的话,不会哪么难。
但或者这家印度公司有更好的方法。


至于它的可行性,个人觉得不是哪么高,反驳点:
1,如果涉及到旧版本的控件在流程中,也就是在脚本中有涉及到,而在新版本修改后会去掉这个控件,哪么脚本就必须手工去维护。

不过它也有它的存在价值,就是控件识别与修改。这个工具就好像是自动修改QTP的对象库一样。
回复 支持 反对

使用道具 举报

该用户从未签到

37#
发表于 2008-9-11 10:01:14 | 只看该作者
原帖由 liangjz 于 2008-7-21 23:21 发表
有印度的公司通过规范的web页面 index,仅用 index这个属性作为对象识别依据以及保存全部属性值

若有某一个属性变更,则计算最有可能变更的web元素,自动修改脚本实现自动化维护脚本。


脚本自动维护?有点意思
也就是除了对象的位置发生变化,就算对象多少属性变化,也不会识别失败?
而对象位置变化的时候,根据事先保存的属性值进行搜索,找到新的位置后进行index更新?
嗯,有创意
跟QTP的智能识别有点类似的实现,不过能自动修改,那维护的成本就下降了
回复 支持 反对

使用道具 举报

该用户从未签到

36#
发表于 2008-9-11 07:29:26 | 只看该作者

我刚基础自动化测试

对qtp了解也不多,不过我想以后这个帖子会帮我很大的忙的!
回复 支持 反对

使用道具 举报

该用户从未签到

35#
发表于 2008-7-25 10:18:45 | 只看该作者
嗯,昨天还被这个对象库弄的头疼,不知道定位,学到很多啊
回复 支持 反对

使用道具 举报

该用户从未签到

34#
发表于 2008-7-24 09:07:07 | 只看该作者
额,学到不少
回复 支持 反对

使用道具 举报

该用户从未签到

33#
发表于 2008-7-24 08:14:56 | 只看该作者
如果web页面的标准化及规范做的完全好的话,确实index在这里就非常方便使用了。
回复 支持 反对

使用道具 举报

该用户从未签到

32#
发表于 2008-7-21 23:21:33 | 只看该作者
有印度的公司通过规范的web页面 index,仅用 index这个属性作为对象识别依据以及保存全部属性值

若有某一个属性变更,则计算最有可能变更的web元素,自动修改脚本实现自动化维护脚本。
回复 支持 反对

使用道具 举报

该用户从未签到

31#
发表于 2008-7-21 18:04:40 | 只看该作者
呵呵,还有个问题,这个图上有三个加号,第一个加号index是0,第二个是7,第三个是13。
当点加好添加了一行后,下面第二个和第三个加号的index都加1。
当点第二个加号,第三个加号的index加了4。

就用这个规律,来得出第二个和第三个加号index的值。

除了这个办法,还有其他的吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

30#
发表于 2008-7-21 17:55:35 | 只看该作者
Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_5").WebEdit("index:=0").Set "DIM——BGD"

我试过了,只用index这个属性就可以了,也不用添加到对象库。
回复 支持 反对

使用道具 举报

该用户从未签到

29#
 楼主| 发表于 2008-7-21 16:12:30 | 只看该作者

回复 26# 的帖子

你这样就不用添加对象到对象库去了。直接写就好了。
回复 支持 反对

使用道具 举报

该用户从未签到

28#
发表于 2008-7-21 15:27:28 | 只看该作者
原帖由 FLY000 于 2008-7-21 12:13 发表
请大家帮忙看看这个问题怎么解决:
以下是录制的代码,图中维表设置的两个webedit在录制的时候名称是WebEdit和WebEdit_2,字段设置下的字段是通过加号按钮来添加,动态生成的,每设置一个webedit,录制的时候webedi ...



我觉得可以用index属性,而且我觉得你可以使用for循环统计index的值,这样添加行,就比较方便。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-25 20:17 , Processed in 0.088598 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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