【浅谈 QTP之识别机制与ChildObjects方法】
很多时候,我们使用了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所识别的。 沙发下先。实际测试当中得注意!谢谢共享 呵呵,学习学习 不错,支持一下!:victory: LZ很仔细啊,以前都没太注意过那两个问题。
补充小结下咯,就目前观察到的web来看,只有对于WebButton对象,QTP封装name属性时会取其value属性的值,而对于其它诸如WebEdit等等对象而言,QTP封装name属性时还是取name属性的值。
而在使用ChildObjects方法时,不能想当然的去描述对象,而需要将每类对象的属性都好好spy下,避免各种意外的特例干扰。描述属性的选择也要好好琢磨下,做的多了熟练了就会比较轻松。
对于type为hidden的对象,QTP确实不能识别,因为该对象根本就不会载入到页面中。 谢谢分享 :hug: 这个帖子其实我写了1个多星期,一直写不好,不是做web开发的,所以有些词语用得不是哪么顺,想了很久。还有为了让问题更直观,所以反复改了1个星期。 原帖由 假装不在 于 2008-10-21 00:29 发表 http://bbs.51testing.com/images/common/back.gif
:hug: 这个帖子其实我写了1个多星期,一直写不好,不是做web开发的,所以有些词语用得不是哪么顺,想了很久。还有为了让问题更直观,所以反复改了1个星期。
有心的人啊~~偶就么这么勤劳 原帖由 hsjzfling 于 2008-10-21 01:33 发表 http://bbs.51testing.com/images/common/back.gif
有心的人啊~~偶就么这么勤劳
:L ........ 支持假装不在的原创!!:lol :lol 原帖由 kevin_swpi 于 2008-10-21 10:51 发表 http://bbs.51testing.com/images/common/back.gif
支持假装不在的原创!!:lol :lol
学习到东西才重要... 学习到了,一直被ChildObjects获取到的对象个数疑惑着,明天验证下!
不错,支持下
写得不错,其实很多看似高深的东西,只在我们弹指一挥间,就看你有没有认真的去发现,表扬主人的探索精神! :victory: 有点深奥哦 等慢慢研究一下谢谢分享:lol 所以说在测某个产品的时候,最好对其采用的技术有一定的了解,会事半功倍的 如果学下js的话会很有帮助呀。。但是我总跟vbs混淆。。 学习了! msgbox browser("Browser").Page("Page").Object.getElementsByName("btnI").count 这句的count应该改为length 楼主,是不是使用DOM的方法比较保险,得到的对象集合是按照页面上的顺序排列的?,如从上到下,从左到右,
页:
[1]
2