51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1479|回复: 0
打印 上一主题 下一主题

【我分享】浅谈 [QTP之识别机制与ChildObjects方法]

[复制链接]
  • TA的每日心情

    2020-2-2 12:43
  • 签到天数: 630 天

    连续签到: 1 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2014-12-30 16:14:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    很多时候,我们使用了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所识别的。


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

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-23 16:56 , Processed in 0.067068 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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