51Testing软件测试论坛

标题: QTP脚本同步的讨论 [打印本页]

作者: 582357212    时间: 2011-1-11 10:51
标题: QTP脚本同步的讨论
假如这行脚本Dialog("Login").Dialog("Flight Reservations").Exist(10) ,目的是花十秒钟去找对象,但是这时候如果对象没有加载到内存,不就是找不到了么,对象找不到了还怎么能调用它的Exist方法,这不是一个先有鸡,还是先有蛋的问题么?能给我详细解说一下么,或者给出Exist方法具体实现的代码啊,谢谢
作者: gztester    时间: 2011-1-11 10:55
根据Dialog("Flight Reservations")在对象库中的描述信息查找界面上是否存在指定的对象
作者: lantianwei    时间: 2011-1-12 14:10
Dialog("Login").Dialog("Flight Reservations").Exist(10)
其实真实的执行是ObjectExists(Dialog("Login").Dialog("Flight Reservations"),10)
现在这样的写法只是让你感觉是面向对象编程
作者: 582357212    时间: 2011-1-14 10:27
本帖最后由 582357212 于 2011-1-14 10:36 编辑

回复 2# gztester
这我知道啊 但我问的是要想使用这个对象的exist方法  是不是要先找到对象啊? 没找到对象怎么使用这个方法,而这个方法就是来判断是否找到对象的 如果不调用exist方法 那么它这么调用exist是什么意思 具体他是怎么实现这个找的过程
作者: 582357212    时间: 2011-1-14 10:30
回复 3# lantianwei
奥  还有ObjectExists(Dialog("Login").Dialog("Flight Reservations"),10)
这个方法  学习了,谢谢!能给个ObjectExists()方法的代码么。我的意思是他实现查找对象过程的这个代码,谢谢啊
作者: 582357212    时间: 2011-1-14 10:55
本帖最后由 582357212 于 2011-1-14 11:02 编辑

回复 3# lantianwei
还有请教版主下,ObjectExists是不是他的父页面可以调用的方法,是QTP内置对象方法吧,是这个意思么:
Set FR= Dialog("Login")
FR.ObjectExists(Dialog("Login").Dialog("Flight Reservations"),10)
如果是这样我们想用一个function函数来实现所有判断对象是否存在,是否能遍历整个对象库中的整个对象树,调用它的ObjectExists方法来实现任何一个对象是否存在的判断?
作者: wugecat    时间: 2011-1-14 11:01
别纠结这些问题了
作者: 582357212    时间: 2011-1-14 11:05
回复 7# wugecat
呵呵 不是纠结而是第一  如果我们自己用C#编写自动化测试软件这些必须搞清楚,第二,脚本开发人员我们需要写function函数,这些问题不搞清楚  谈什么脚本开发。呵呵 哥哥 不是我想纠结啊。
作者: lantianwei    时间: 2011-1-14 11:07
回复 5# 582357212


    代码我是没有,而且我写的ObjectExists也并不定存在这样的同名方法,我只是告诉你思路,如果你想理解底层的,一般可以看WINDOWS API,但对于特定的语言,你就需要了解更多,对于VB,。NET。JAVA。。。他们都有不同的识别机制,比如。NET的反射,后期邦定等技术
作者: lantianwei    时间: 2011-1-14 11:10
回复 6# 582357212


    我猜想他的思路应该是先找第一个对象 然后再在第一个对象下找第二个对象;首先运行时 他查找的对象不是在对象库里找,而是在实践的运行环境下找即桌面下;对象库只起到根据对象库的属性进行查找对象的功能
作者: 582357212    时间: 2011-1-14 16:17
本帖最后由 582357212 于 2011-1-14 16:21 编辑

回复 10# lantianwei
呵呵 对 我说错了,我的意思是function函数中用的遍历方法查找对象思路是遍历程序的所有测试需要的控件组织结构。这个空间结构我用对象库中的树形结构来形容了下。当然调用函数给它传实参的时候,就是根据实参对象名然后取对象库中响应的识别属性到实际运行的程序界面上去找了。
作者: lantianwei    时间: 2011-1-14 16:39
回复 11# 582357212

查找对象遍历一般思路是这样,但肯定需要优化算法,可以设想如果你每操作一个对象就要进行一次遍历,那么性能可想而知~
作者: 582357212    时间: 2011-1-14 16:55
本帖最后由 582357212 于 2011-1-14 18:26 编辑

回复 12# lantianwei
呵呵 谢谢版主   我相信我用VBS写了不少项目的QTP脚本  对QTP的对象识别机制,应该还是能够大胆的说我也是了解点的,但ObjectExists方法我印象中都是自己写的,里面用CounterExists方法进行重载,不知道QTP还自带这个方法,我去用QTP试了下 还是没找到ObjectExists这种方法 如果版主找到的话给个具体示例代码, 呵呵 不过版主给了我提示,可能是是QTP给我们看的是exist方法,实际上实现的就是我们自己写的ObjectExists方法 再次感谢版主,呵呵 现在主要是想研究下QTP里面自带的一些方法具体怎么实现的,以有利于以后自主开发自动化测试工具, 再次感谢lantianwei版主的答疑  我使用了自己用VB编写的ObjectExists并且遍历成功了   顺便说下遍历的话  速度很快的  脚本运行速度几乎没有什么影响  呵呵
作者: FLY000    时间: 2011-1-18 10:51
是啊,有的时候用exist,waitproperty方法都没有办法判断对象是否存在,会报错,没办法,我只能用wait多等一会儿了




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2