51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 7394|回复: 20
打印 上一主题 下一主题

[原创] 【浅谈 QTP之识别机制与ChildObjects方法】

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-10-20 17:34:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多时候,我们使用了ChildObjects去捕获页面的某些元素,很多人会很郁闷的发现捕获得很不全,或者根本就捕获不到。
关于QTP自身的方法中,它封装了很多其它语言的方法,并自己做了修改,让自己的方法更适合用户使用在自动化中,自然也有它自己的好好坏坏。
给大家一个我自己随便写的page,里面的元素的节点都是Input,name=btnI。然后大家再用QTP把这个page添加到对象库中去,并修改下下面代码,运行下效果
先给大家看看下面代码片:
Dim Ele_name
Set Ele_name=description.Create()
Ele_name("name").value="btnI"
msgbox browser("Browser").Page("Page").ChildObjects(Ele_name).count
msgbox browser("Browser").Page("Page").Object.getElementsByName("btnI").count

有时候大家在某些页面上运行上面代码后,你会惊讶的发现,怎么Child_Input和GetName_Input怎么会不相等呢,而且会是child_Input<=GetName_Input?
在我们的想象范围内,ChildObjects(Ele_name)和getElementsByName("btnI")应该是一样的才对,但实际上,它们之间是存在的类似继承的关系。
  首先我们来了解getElementsByName方法的由来:
  getElementsByName是一个element的方法,是一个比较底层,基于JS等的方法。getElementsByName返回一个element数组,包含具有指定标记名的所有Element节点的子孙节点,其顺序为在文档中出现的顺序。而它捕获到的元素的方式是通过对HTML的节点进行了遍历,去得所有name为btnI的元素。
  ChildObjects,它则是QTP自身的方法,返回对象中包含的子对象的集合。
  如果细心的朋友,会想,哪么究竟ChildObjects抓到的是那几个元素,为什么其它的不是呢?然后会用spy点击下sumbit,你会发现它的name不是我们脚本中写的“btnI”,而是“sumbit”!!
  问题就是出现在这里!QTP的识别机制中,会把某些webelement对应的属性识别做修改,就类似sumbit的name属性是"btnI"但是在QTP面前,它的属性识别却是一个sumbit一样。
这也就导致了childObjects捕获不到这个元素的原因。
  通用,如果喜欢研究的读者,也可以使用getElementsByTagName去试验,会发现INPUT节点中,type为hidden的元素,是不被QTP所识别的。

本帖子中包含更多资源

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

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

使用道具 举报

该用户从未签到

2#
发表于 2008-10-20 17:41:47 | 只看该作者
沙发下先。实际测试当中得注意!谢谢共享
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2008-10-20 17:43:18 | 只看该作者
呵呵,学习学习
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2008-10-20 19:42:14 | 只看该作者
不错,支持一下!
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2008-10-20 20:42:53 | 只看该作者
LZ很仔细啊,以前都没太注意过那两个问题。

补充小结下咯,就目前观察到的web来看,只有对于WebButton对象,QTP封装name属性时会取其value属性的值,而对于其它诸如WebEdit等等对象而言,QTP封装name属性时还是取name属性的值。

而在使用ChildObjects方法时,不能想当然的去描述对象,而需要将每类对象的属性都好好spy下,避免各种意外的特例干扰。描述属性的选择也要好好琢磨下,做的多了熟练了就会比较轻松。

对于type为hidden的对象,QTP确实不能识别,因为该对象根本就不会载入到页面中。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2015-6-29 10:24
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    6#
    发表于 2008-10-20 21:06:21 | 只看该作者
    谢谢分享
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
     楼主| 发表于 2008-10-21 00:29:40 | 只看该作者
    这个帖子其实我写了1个多星期,一直写不好,不是做web开发的,所以有些词语用得不是哪么顺,想了很久。还有为了让问题更直观,所以反复改了1个星期。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2008-10-21 01:33:34 | 只看该作者
    原帖由 假装不在 于 2008-10-21 00:29 发表
    这个帖子其实我写了1个多星期,一直写不好,不是做web开发的,所以有些词语用得不是哪么顺,想了很久。还有为了让问题更直观,所以反复改了1个星期。


    有心的人啊~~偶就么这么勤劳
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
     楼主| 发表于 2008-10-21 08:49:32 | 只看该作者
    原帖由 hsjzfling 于 2008-10-21 01:33 发表


    有心的人啊~~偶就么这么勤劳



    ........
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2008-10-21 10:51:44 | 只看该作者
    支持假装不在的原创!!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
     楼主| 发表于 2008-10-21 17:21:24 | 只看该作者
    原帖由 kevin_swpi 于 2008-10-21 10:51 发表
    支持假装不在的原创!!


    学习到东西才重要...
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2008-10-26 23:57:22 | 只看该作者
    学习到了,一直被ChildObjects获取到的对象个数疑惑着,明天验证下!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2008-10-30 10:16:42 | 只看该作者

    不错,支持下

    写得不错,其实很多看似高深的东西,只在我们弹指一挥间,就看你有没有认真的去发现,表扬主人的探索精神!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2008-10-30 10:55:46 | 只看该作者
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
    发表于 2008-10-30 21:24:16 | 只看该作者
    有点深奥哦 等慢慢研究一下
    谢谢分享  
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2008-11-3 12:48:29 | 只看该作者
    所以说在测某个产品的时候,最好对其采用的技术有一定的了解,会事半功倍的
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.3]测试连长

    17#
    发表于 2009-12-29 15:50:38 | 只看该作者
    如果学下js的话会很有帮助呀。。但是我总跟vbs混淆。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
    发表于 2010-4-15 15:30:02 | 只看该作者
    学习了!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
    发表于 2010-4-15 15:48:53 | 只看该作者
    msgbox browser("Browser").Page("Page").Object.getElementsByName("btnI").count 这句的count应该改为length
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
    发表于 2010-9-16 16:31:08 | 只看该作者
    楼主,是不是使用DOM的方法比较保险,得到的对象集合是按照页面上的顺序排列的?,如从上到下,从左到右,
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-12 04:58 , Processed in 0.086488 second(s), 29 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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