51Testing软件测试论坛

标题: 如何对描述性编程的对象进行有效的管理? [打印本页]

作者: lantianwei    时间: 2007-12-27 18:25
标题: 如何对描述性编程的对象进行有效的管理?
本人一直认为在自动化项目中应该尽量的用对象库,少用描述性编程,因为我觉得对象库对对象的管理还是非常方便的.但也听到同行有说描述性编程对对象非常好管理的说法,对于这说法,我到现在还没有搞清楚,他们是如何实现的.如果你也认为描述性编程对对象非常好管理,那么请给大家讲讲你是如何来实现的.在此先谢过!
    现在做的一个项目中,因为项目所有的父页面都是同一个页面,也就是Browser(*).Page(*)对于所有的页面都是一样的.如果用对象库来做的话,就需要人为的修改好多东西,而且其他什么命名规则,搞起来比较麻烦,所以我最后还是选择了用描述性编程,因为毕竟可以更快速的开发脚本.但用描述性编程有一个问题就是对象非常难维护,比如一个GUI变了,你就要到函数中去改,非常的烦琐.而且也不好定位,如果项目大的话更是如此.现在我为了便于对象的定位,所以只要对象找不到或其他什么对象错误,就会输出相关的对象信息,看一下LOG,还是可以比较快的定位到对象.但我还是不认为这样很好,所以今天特开此贴,希望和大家来一起讨论如何对描述性编程的对象进行有效的管理?希望大家多提好的建议,共同提高!
作者: hotsu    时间: 2007-12-27 22:56
引用“听到同行有说描述性编程对对象非常好管理的说法”

描述性编程不用对象库了,怎么还有这种故事?小弟想领教领教。
作者: zhumingwei    时间: 2007-12-28 00:02
回楼上的

虽然不用对象库了,但是你操作的还是对象啊.
假如有两个page,在这两个page中有两个button.你要点击这两个button.这四个对象你这么分辨?
作者: zhumingwei    时间: 2007-12-28 00:02
遇到和楼主一样的问题.请高手解答.我和楼主一起谢谢你
作者: hsjzfling    时间: 2007-12-28 00:21
标题: 回复 1# 的帖子
可以用XML等外部数据文件存放对象属性及其值,同一个对象的属性及值只需要修改数据文件中对应的值即可。貌似已经有同行朋友这样做了。
无论是使用对象库还是描述性编程都可以使用此方法,不过描述性编程使用此方法的效果更明显~

PS:不过我还是倾向于认同LZ的第一句话"本人一直认为在自动化项目中应该尽量的用对象库,少用描述性编程"
作者: yabest    时间: 2007-12-28 01:55
对描述性编程的对象进行有效的管理?

那就只能模仿QTP对象库的功能自己做一个外部对象库了,可以用EXCEL、XML文件作为外部对象库的存储文件。

不过最后只怕还是是吃力不讨好,这种外部对象库用起来很麻烦,维护起来也麻烦!

有这功夫,不如多熟悉一下QTP对象库的管理方法,多研究一下QTP对象库的对象设置技巧,然后用QTP对象库来实现!

QTP对象库是QTP自带的对象库,跟QTP脚本结合得非常好,用起来舒爽多了!
作者: lantianwei    时间: 2007-12-28 09:27
标题: 回复 5# 的帖子
你说的外部对象库我也想过,我还想过用VBS的数据字典,但仔细想想,其实这跟用对象库没有本质的区别.而且整理外部文件对象库的时间和直接整理QTP的对象库的时间哪个会更少呢?其实我们做项目对描述性编程和对象库的选择的初衷都是为了提高效率,个人认为描述性编程可以加快脚本开发,特别是对一些不唯一或特殊对象的控制是更方便,但是维护真的不敢恭维.

[ 本帖最后由 lantianwei 于 2007-12-28 09:29 编辑 ]
作者: lantianwei    时间: 2007-12-28 09:36
标题: 回复 6# 的帖子
我现在遇到的问题是如果用对象库太麻烦了,要有对象的命名规则,而且录制出来的PAGE,都是同一个TITLE加个数字,如果我按命名规则要改死了,而且子对象也要改;而用描述性编程,就没有这方面的痛苦,我现在整个系统就用一个PAGE,如果变只需改一个,而且你用一个变量代替一下使脚本也减了好多,而如果用对象库,那完了,把所有的页面当一个PAGE吧,那么多的对象在一个PAGE下面,相信也很难维护;如果分开的话,那PAGE名要改死你,同时也增加了脚本长度.现在用描述性编程觉得起码对开发脚本来说还是有益处的,可以更快的进行开发.如果QTP有像WR中可以自定义对象逻辑名的接口,应该可以减少好多对对象库的命名维护的时间.不过这样的接口实现起来应该也不会太容易.

[ 本帖最后由 lantianwei 于 2007-12-28 09:47 编辑 ]
作者: zhou840401    时间: 2007-12-28 10:21
PAGE名不会很难改吧,一百多个页面,也就改一百多次而已,对象库的名字一改,脚本当中相应的用到这个名字的都会自动更新的,如果说改了之后,增加了脚本长度,那你可以用with语句啊,这样不就很短了,而且我觉得如果全部的PAGE名都是一样的话,更加不应该用描述性编程了,识别可能会存在一些问题,多个对象的属性是一样的,到时调试起来可能就比较麻烦了.用外部对象库,或者是用xml来存取对象属性,真是是吃饱了撑的.纯属个人意见.
作者: lantianwei    时间: 2007-12-28 10:50
标题: 回复 9# 的帖子
PAGE名不会很难改吧,一百多个页面,也就改一百多次而已
>>我觉得我们的系统不只一百多个页面,而且你要为页面取一个富有含义的名字(有时这名字是不怎么好取的),而且还要唯一,不麻烦吗?
脚本当中相应的用到这个名字的都会自动更新的
>>如果公司要求对象有一定的命名规范呢?更新不可以解决吧!
如果说改了之后,增加了脚本长度,那你可以用with语句啊,这样不就很短了
>>即使用WITH,也有好多的PAGE对象会被重复写到.
特别有些页面就一个语句,那WITH还有什么用啊?
我觉得如果全部的PAGE名都是一样的话,更加不应该用描述性编程了
>>什么意思?难道把所有的对象放到一个对象库的PAGE下面?那有几千个对象,你不晕才怪了!
以上纯属个人意见!
作者: zhou840401    时间: 2007-12-28 11:03
你所说的同一个页面,是指如果用对象库来存取的话(不修改),会有一些页面的是以"_1",或者"_2"结尾这些来表示的吧,如果是这样的话,怎么会有几千个对象都存在同一个页面下呢.
作者: lantianwei    时间: 2007-12-28 11:19
标题: 回复 11# 的帖子
哦 你的意思还是分开处理咯 那样重复太多了啊 最主要还是改名字太麻烦了!
作者: yabest    时间: 2007-12-28 11:23
原帖由 lantianwei 于 2007-12-28 09:36 发表
我现在遇到的问题是如果用对象库太麻烦了,要有对象的命名规则,而且录制出来的PAGE,都是同一个TITLE加个数字,如果我按命名规则要改死了,而且子对象也要改
而如果用对象库,那完了,把所有的页面当一个PAGE吧,那么多的对象在一个PAGE下面,相信也很难维护;如果分开的话,那PAGE名要改死你,同时也增加了脚本长度.


所以跟你说要懂得QTP对象库管理对象的技巧嘛。
Web应用界面和Windows应用界面的一个区别,是Windows应用有严格的窗口概念,窗口标题也很清晰,对象管理起来很方便很清晰;
而Web应用就没有严格的窗口概念,都在一个窗口里,标题也经常只有一个,所以管理起来不方便。
但是Web应用的Page就相当于Windows应用的窗口,虽然Page没有严格区分的title,但是你可以根据其他属性如url,还是可以区分的。

同时,Web应用的窗口概念比较淡,page和窗口还是有区别,所以学windows应用的窗口,用page来严格区分对象,就不是很聪明。
到时候就像LZ说的有太多个page对象了,上百个page对象,管理起来太恐怖了!
Windows应用一般不会有那么多个窗口,不然管理起来累也累死了。

因此,不能每个page独立一个对象,那就会有上百个page对象(及下属对象),也实在恐怖。
也不能只有一个page对象,那太多的对象都放在一个page里实在乱糟糟的。

所以,聪明的做法,就是做适当归并,按模块来分,分成几个或十几个模块,每个模块内的page都用同一个page对象。
这样page对象数量不会太多,好管理,而且同一模块内的子对象一般都相同,放在同一个page对象里合并管理,也能提高效率。

要实现每个模块内的page都用同一个page对象,只要在page对象的url或title属性里同时兼容多个page,可以用正则表达式匹配多个值就可以了。

比如我的一个Web对象库:

[ 本帖最后由 yabest 于 2007-12-28 11:30 编辑 ]
作者: lantianwei    时间: 2007-12-28 11:33
标题: 回复 13# 的帖子
YABEST关于按模块划分,确实不错,值得提倡!
你说的用其他属性来区分PAGE,其实我也曾经想过用URL来定位对象,但对于我现在这个系统行不通,因为它的URL是服务器端动态生成的,而且是加密的,所以在PAGE对象中找一个可以唯一区分的属性是不可能的.
作者: yabest    时间: 2007-12-28 11:45
原帖由 lantianwei 于 2007-12-28 11:33 发表
YABEST关于按模块划分,确实不错,值得提倡!
你说的用其他属性来区分PAGE,其实我也曾经想过用URL来定位对象,但对于我现在这个系统行不通,因为它的URL是服务器端动态生成的,而且是加密的,所以在PAGE对象中找一个可以唯 ...


哎呀,人是活的嘛,你要动一下脑筋啊!对象库就在你的手里,软的不行,你就来硬的,强暴它还不容易!

有时要把某个对象强行塞给某个page或windows,它不愿意,总想跑到它喜欢的page或windows里。
不想跟它纠缠,也不想费口舌,我就动粗,就将其他page或windows里的属性改死了!
于是这个对象无处可归了,只能乖乖的被我塞进指定的page或windows里了哈!

你也可以一样动粗的!!!

[ 本帖最后由 yabest 于 2007-12-28 11:54 编辑 ]
作者: lantianwei    时间: 2007-12-28 12:39
原帖由 yabest 于 2007-12-28 11:45 发表


哎呀,人是活的嘛,你要动一下脑筋啊!对象库就在你的手里,软的不行,你就来硬的,强暴它还不容易!

有时要把某个对象强行塞给某个page或windows,它不愿意,总想跑到它喜欢的page或windows里。
不想跟它纠 ...

呵呵...这招听起来不错,能给举个例子吗?(你说的强改其他PAGE意思不是非常明白)
作者: yabest    时间: 2007-12-28 13:40
原帖由 lantianwei 于 2007-12-28 12:39 发表

呵呵...这招听起来不错,能给举个例子吗?(你说的强改其他PAGE意思不是非常明白)


那我就举个例子!

比如我有四个模块,他们的page都没办法用url或title区分。
但是我要将这四个模块的子对象都分开管理,分别放入page1、page2、page3、page4这4个page对象里。

于是我先在对象库里建立四个page对象,将它们的过滤属性title都设置为.*,这样执行的时候,随便用哪个page对象都能匹配web上当前page对象。

在把子对象加入这4个对象时,QTP不知道该把子对象加入哪一个page对象里,可能就随便加入了其中一个page对象。
但是我们要按照我们的规划,强行指定子对象进入某个page对象,比如page3对象里。
那我们可以把page1、page2、page4的title属性改为die,只留page3的title为.*,然后加入子对象,子对象就只能乖乖的进入page3里了!
加完对象后,再把page1、page2、page4的title属性改回来,就可以正常执行了。
作者: lantianwei    时间: 2007-12-28 14:09
原帖由 yabest 于 2007-12-28 13:40 发表


那我就举个例子!

比如我有四个模块,他们的page都没办法用url或title区分。
但是我要将这四个模块的子对象都分开管理,分别放入page1、page2、page3、page4这4个page对象里。

于是我先在对象库里建立四个 ...

哈哈...不错!挺邪的一招!
领教了!
作者: 恋上一支鱼    时间: 2010-4-1 22:19
收藏~~




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