libingyu135 发表于 2014-12-30 16:14:08

【我分享】浅谈 [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所识别的。


页: [1]
查看完整版本: 【我分享】浅谈 [QTP之识别机制与ChildObjects方法]