51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

楼主: 假装不在
打印 上一主题 下一主题

[原创] 浅谈QTP,Window与Index

[复制链接]
  • TA的每日心情
    开心
    2015-6-29 10:24
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    21#
    发表于 2008-6-21 13:55:18 | 只看该作者
    原帖由 yabest 于 2008-6-20 13:26 发表



    index不是对象的属性!QTP只是在有多个对象符合条件时,用index表示符合条件的对象里选择第index个!

    比如窗口上有 爷爷、奶奶、爸爸、妈妈、儿子、女儿 6个对象

    那么符合 “性别=男” 的条件就有3个对象 ...


    Yabest说得挺好的
    下面是qtp help文档里面讲的关于如何使用index去标识对象
    Identifying an Object Using the Index Property
    While learning an object, QuickTest can assign a value to the test object's Index property to uniquely identify the object. The value is based on the order in which the object appears within the source code. The first occurrence is 0.

    index是qtp附加给对象的,顺序也就是在源码中出现的顺序,第一个为0
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    22#
    发表于 2008-7-1 20:05:37 | 只看该作者
    index 序列较少的情况下,可用来标识对象比较好,如果index数量太大的标识对象,网页加载时发生变化的可能性很大,造成对象不能识别.所以,建议index 小于3个时就可以用,index大于10个时最好不用.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    23#
    发表于 2008-7-1 20:24:19 | 只看该作者
    15楼的解释  通俗易懂。。 哈哈
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    24#
     楼主| 发表于 2008-7-2 10:16:00 | 只看该作者

    回复 23# 的帖子

    确实
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    25#
    发表于 2008-7-2 15:45:25 | 只看该作者
    yabest gave us a explanation with a simple and easy-to-understand example on using index value in descriptive program.

    Thanks.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    录制的代码:
    'Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_5").WebEdit("WebEdit").Set "DIM——BGD"
    'Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_5").WebEdit("WebEdit_2").Set "保管点维"
    'Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_5").WebEdit("WebEdit_3").Set "PK_BGD"
    'Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_5").WebEdit("WebEdit_4").Set "30"
    'Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_5").WebEdit("WebEdit_5").Set "BGDCODE"
    'Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_5").WebEdit("WebEdit_6").Set "40"
    'Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_5").Image("add01").Click
    'Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_5").WebEdit("WebEdit_7").Set "BGDNAME"
    'Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_5").WebEdit("WebEdit_8").Set "60"
    'Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_5").Image("add01").Click
    'Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_5").WebEdit("WebEdit_9").Set "GREATEDATE"
    'Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_5").Image("add01").Click
    'Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_5").WebEdit("WebEdit_10").Set "SEALDATE"
    'Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_5").Image("add01").Click

    如果我不用name属性来表示。关掉只智能识别。对象库中只添加一个webedit对象,然后在代码里面用index来区别,可以吗?
    Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_5").WebEdit("class:=WebEdit","index:=0").Set "DIM——BGD"
    Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_5").WebEdit("class:=WebEdit","index:=1").Set "保管点维"
    Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_5").WebEdit("class:=WebEdit","index:=6").Set "PK_BGD"
    Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_5").WebEdit("class:=WebEdit","index:=7").Set "30"
    .....
    这里的index属性是将webedit添加到对象库看到的

    [ 本帖最后由 FLY000 于 2008-7-21 13:22 编辑 ]

    本帖子中包含更多资源

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

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    27#
    发表于 2008-7-21 15:21:54 | 只看该作者
    这样搞搞蛮好的,今天也碰到了这个问题。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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



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

    使用道具 举报

    该用户从未签到

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

    回复 26# 的帖子

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

    使用道具 举报

    该用户从未签到

    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这个属性就可以了,也不用添加到对象库。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

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

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

    本帖子中包含更多资源

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

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

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

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

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

    我刚基础自动化测试

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

    使用道具 举报

    该用户从未签到

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

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


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

    使用道具 举报

    该用户从未签到

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


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


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

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


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

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

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-10-7 14:25 , Processed in 0.091306 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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