51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

楼主: jackymail
打印 上一主题 下一主题

[原创] 描述性编程VS 对象库

[复制链接]

该用户从未签到

61#
发表于 2007-8-13 13:26:40 | 只看该作者
原帖由 danmy 于 2007-8-13 13:09 发表

受教~~ 不过本人还是对对象库持保留意见

就说这个例子吧
其实
Link("职员").SetTOProperty("text", datatable.value("职员",dtLocalSheet))
Link("职员").click

和Link("text:="& datatable.value(" ...

是可以的, 但是用对象库录制的话, 这个弹出对话框所指的对象就必须在这frame和网页对话框对象下层都存在,否则myframe.getpopmsg()就出现对象找不到,这个函数复用性就很差了

>>录制的对象库中,对象的树形型结束是可以调整的。你可以把对话框从某一个网页对象下面独立出来。就如同windows程序中大全用的dialog对象一样,完全可以单独独立成一个对象(当然可以包括这个dialog中所包括的对象)。当然,你不能把一个“按钮”独立出来,这样就无法识别了(windows的程序必须基于窗口,网页的程序,我没有测试过,不太了解对象的最小单位应该是什么?),大家可以试试
vbwindow("A).vbwindow("b).vbbutoon("c").active==vbwindow("b").vbbutoon("c").active
回复 支持 反对

使用道具 举报

该用户从未签到

62#
发表于 2007-8-13 13:35:39 | 只看该作者
原帖由 danmy 于 2007-8-13 13:09 发表

受教~~ 不过本人还是对对象库持保留意见

就说这个例子吧
其实
Link("职员").SetTOProperty("text", datatable.value("职员",dtLocalSheet))
Link("职员").click

和Link("text:="& datatable.value(" ...


界面的操作对象大部分是可以静态识别的,需要动态识别的还是少数的!这少数,可以用SetTOProperty实现的。不要因小失大,舍弃对象库。
录制是对象库方式的优点,一系列操作下来,你手工写脚本要写的半死,录制一下子就生成了大量的脚本了,只要稍做修改即可。两者效率可是天差之别啊!
对象库起名字是有好处的,脚本清晰好看。描述性脚本里没有给对象另外起名,实在是太难看了。如果另设对象变量,那就复杂化了,脚本一样难看。

象你说的对话框的问题,我也是一样写个通用函数,用描述性编程来实现的。
我测试的几个系统,包括Web、Java的,都有类似的对话框处理函数,这是属于我说的,特殊情况,少量使用。
不要因对话框这样的特殊问题而因噎废食,舍弃对象库。QTP支持描述性,只是将其作为对象库的补充嘛!

[ 本帖最后由 yabest 于 2007-8-13 13:38 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

63#
发表于 2007-8-13 13:51:23 | 只看该作者
原帖由 yabest 于 2007-8-13 13:35 发表


界面的操作对象大部分是可以静态识别的,需要动态识别的还是少数的!这少数,可以用SetTOProperty实现的。不要因小失大,舍弃对象库。
录制是对象库方式的优点,一系列操作下来,你手工写脚本要写的半死, ...



象你说的对话框的问题,我也是一样写个通用函数,用描述性编程来实现的。
我测试的几个系统,包括Web、Java的,都有类似的对话框处理函数,这是属于我说的,特殊情况,少量使用。
不要因对话框这样的特殊问题而因噎废食,舍弃对象库。QTP支持描述性,只是将其作为对象库的补充嘛!
>>对的,具体问题具体分析。但是为什么对话框你不使用对象库,而使用一个通用的函数呢?从理论上来讲,描述性编程的,对象库都可以实现呀(包括动态产生的对象)。
回复 支持 反对

使用道具 举报

该用户从未签到

64#
发表于 2007-8-13 14:41:36 | 只看该作者
原帖由 loho1968 于 2007-8-13 13:51 发表
>>对的,具体问题具体分析。但是为什么对话框你不使用对象库,而使用一个通用的函数呢?从理论上来讲,描述性编程的,对象库都可以实现呀(包括动态产生的对象)。


用对象库,一样可以实现,但是麻烦点。
因为对话框不好录制,有些等待对话框一闪而过,你根本抓不到,另外一些错误对话框,你也不知道什么时候会出现!
不好录制的对象,那就只能用描述性编程了,总不能为了抓这个等待对话框,反复抓上半天吧,那还不让人笑死了!
回复 支持 反对

使用道具 举报

该用户从未签到

65#
发表于 2007-8-14 08:55:26 | 只看该作者
无聊,yabest觉得讨论这个话题很有趣么?
这两种方式你分别研究3个月了,再来说吧。

本贴终结到66楼。

66楼的是猪,白痴!
回复 支持 反对

使用道具 举报

该用户从未签到

66#
发表于 2007-8-14 09:00:48 | 只看该作者
原帖由 ppent 于 2007-8-10 22:33 发表
对象库和描述性编程都是基于对象识别原理上的应用,两者在识别原理上是一致的,唯一的差别是对象库比描述性的对象识别多了一层封装,正如高级语言对于汇编语言。也正是如此,所以在使用上有信手拈来的感觉。
在 ...

同意这个的观点,我们也做过在Robot的基础上的一层封装,做成关键字形式,就是safs(open source),看你们争的真有意思,根据公司项目的需求来决定在什么地方使用对象库还是描述性语言,最终还是一样的.好用了,当然被屏蔽的东西就多些,灵活了,自然描写起来就麻烦些.有什么好争的呀.受不了了.潜水多日,看到这些忍不住上来说两句.
回复 支持 反对

使用道具 举报

该用户从未签到

67#
发表于 2007-8-14 09:09:58 | 只看该作者
看对象仓库就可以了,网上也有很多的例子呀google下
回复 支持 反对

使用道具 举报

该用户从未签到

68#
发表于 2007-8-14 09:10:47 | 只看该作者
实在不行的话,发邮件给我,我给你传一个过来.zhongbo45@sina.com
回复 支持 反对

使用道具 举报

该用户从未签到

69#
发表于 2007-8-14 09:40:05 | 只看该作者
原帖由 mstiunicon 于 2007-8-14 08:55 发表
无聊,yabest觉得讨论这个话题很有趣么?
这两种方式你分别研究3个月了,再来说吧。

本贴终结到66楼。

66楼的是猪,白痴!


哈哈,确实是很无聊的讨论,感觉就像小孩子在争论孙悟空和奥特曼谁厉害一样.

yabest也确实有点偏激了.人家说"尽量多用对象库,少用描述性编程"的时候,你说人家是"和稀泥"的说法

但是上面你又自己说特殊情况下还是要用描述性编程,这不是搬石头砸自己的脚么?

反正我的做法就是先录制了,再回放,回放不过去的改描述性编程就完了
回复 支持 反对

使用道具 举报

该用户从未签到

70#
发表于 2007-8-14 10:55:32 | 只看该作者
原帖由 wtucel 于 2007-8-14 09:40 发表
...
yabest也确实有点偏激了.人家说"尽量多用对象库,少用描述性编程"的时候,你说人家是"和稀泥"的说法
但是上面你又自己说特殊情况下还是要用描述性编程,这不是搬石头砸自己的脚么?
...


晕死,"尽量多用对象库,少用描述性编程"这话是我说的!
loho1968的帖子里,加">>"才是他自己的,不加是引用别人的,跟一般的用法相反了哈。

原帖由 yabest 于 2007-8-13 13:08 发表

所以要尽量多用对象库,少用描述性。
>>如果是针对软件测试这个目标,使用什么方式不是最重要的,关键在于你是否掌握了,能否熟悉的运用,并达成的你的目标,结果才是最重要的。
  
又来了,和稀泥。不同方式,虽然一样可以达到目的,但是要付出的成本和代价可能相差很远的!

回复 支持 反对

使用道具 举报

该用户从未签到

71#
发表于 2007-8-14 10:59:21 | 只看该作者
描述性编程需要一个非常不错的框架,否则就会被搞得很被动,但想要找到或设计一个支持通用的系统的框架,估计这个工作量很大,如果不运用框架,做出来的东西很不好理解。而且费时确实稍长

对于大多数的应用来说,对象库就比较不错了,我甚至怀疑QTP使用对象库本身就是一套应用描述性编程的框架应用。

如果很复杂,非常复杂,或者说乱七八糟的系统,确实用描述性编程更好一点,但是,这样的系统,难道就不能改一改?

如果你一直用对象库,可以用一段时间来了解了解描述性编程,如果你一直用描述性编程,建议你从头开始用用对象库。
这样,可能大家会发现,原来事情本来就很简单,是我们自己把它弄复杂了
回复 支持 反对

使用道具 举报

该用户从未签到

72#
发表于 2007-8-14 11:00:47 | 只看该作者
原帖由 mstiunicon 于 2007-8-14 08:55 发表
无聊,yabest觉得讨论这个话题很有趣么?
这两种方式你分别研究3个月了,再来说吧。

这两种方式我都用了好多年了,识别对象的原理是一样的,只是形式上的差别而已,没啥好神秘的!
对描述性,我深知其弊端,所以虽然也会用,但尽量少用,有节制的用.

本贴终结到66楼。
66楼的是猪,白痴!


这边论坛是用帖子的形式,帖子也有标题的,你不喜欢不感兴趣,就别点进来了,又没人强迫你进来!
反而是你想强迫别人,不许别人讨论,还用"是猪,白痴"这样的用语,真没素质!

[ 本帖最后由 yabest 于 2007-8-14 23:06 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

73#
发表于 2007-8-14 21:49:13 | 只看该作者
原帖由 danmy 于 2007-8-13 13:09 发表

受教~~ 不过本人还是对对象库持保留意见

就说这个例子吧
其实
Link("职员").SetTOProperty("text", datatable.value("职员",dtLocalSheet))
Link("职员").click

和Link("text:="& datatable.value(" ...



这哥们正解
我来个例子,一个工作流系统,发起工作流会生成一个以日期后加6位数字的ID
那么下一执行者,要点页面上的列表中的这个ID号的Link进入执行他的操作,(工作任务列表的排序为任务流转时间先后顺序)
有几个问题:
要是不用描述性,你怎么知道你发起的这个工作流ID是多少,
你知道到下一个执行者的界面中列表在哪个位置,难道就人一个测试人员在发起工作流?

[ 本帖最后由 auqdppyv 于 2007-8-14 21:50 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

74#
发表于 2007-8-14 23:44:21 | 只看该作者
原帖由 auqdppyv 于 2007-8-14 21:49 发表



这哥们正解
我来个例子,一个工作流系统,发起工作流会生成一个以日期后加6位数字的ID
那么下一执行者,要点页面上的列表中的这个ID号的Link进入执行他的操作,(工作任务列表的排序为任务流转时间先后顺序) ...


你这样说不清楚,你就先用描述性脚本写出来吧,我用对象库脚本实现给你看!
除了不确定的对象,或者很难抓取的对象,对象库都能实现描述性的功能,只是把对象描述写在象库或脚本里的差别而已。

[ 本帖最后由 yabest 于 2007-8-14 23:48 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

75#
发表于 2007-8-15 09:06:10 | 只看该作者
原帖由 yabest 于 2007-8-14 23:44 发表


你这样说不清楚,你就先用描述性脚本写出来吧,我用对象库脚本实现给你看!
除了不确定的对象,或者很难抓取的对象,对象库都能实现描述性的功能,只是把对象描述写在象库或脚本里的差别而已。



SetTOProperty+正则表达式,就可以代替描述性编程,因为只要你能描述,就可以SetTOProperty。
回复 支持 反对

使用道具 举报

该用户从未签到

76#
发表于 2007-8-15 13:25:56 | 只看该作者

试试看

Function SearchList ( )

        Dim i,j,tempText,text,referOperation
        listOperation = DataTable("工作列表操作",dtGlobalSheet)
       
        '取要定位的表格行数

        rows=Browser("Browser").Page("Page").WebTable("innertext:="&innertext_v,"index:="&index).RowCount
                '循环查找
        For i=1 to rows
                tempText= Browser("Browser").Page("Page").WebTable("innertext:="&innertext_v,"index:="&index).GetCellData(i,3)
                If   StrComp(tempText,operation_number) = 0 Then
                        Browser("Browser").Page("Page").WebTable("innertext:="&innertext_v,"index:="&index).ChildItem(i,columns,"WebList", 0).Select listOperation
                        Browser("Browser").Page("Page").Sync
                        ExitAction
                End If
                If i=rows  Then
                        Reporter.ReportEvent micFail,"工作列表搜索","搜索的目标工作记录不存在!"
                End If
        Next

End Function
回复 支持 反对

使用道具 举报

该用户从未签到

77#
发表于 2007-8-15 16:17:13 | 只看该作者
原帖由 auqdppyv 于 2007-8-15 13:25 发表
Function SearchList ( )

        Dim i,j,tempText,text,referOperation
        listOperation = DataTable("工作列表操作",dtGlobalSheet)
       
        '取要定位的表格行数

        rows=Browser("Browser").Page("Page").WebTab ...



只要将WebTable添加进对象库,并起名WorkList,设置innertext和index两个特征属性。
你看这样子用对象库,脚本是不是更清晰更好看!

Function SearchList ( )

        Dim i,j,tempText,text,referOperation
        listOperation = DataTable("工作列表操作",dtGlobalSheet)
      
        '取要定位的表格行数

        Browser("Browser").Page("Page").WebTable("WorkList").SetTOProperty("innertext", innertext_v)
        Browser("Browser").Page("Page").WebTable("WorkList").SetTOProperty("index", index)

        rows=Browser("Browser").Page("Page").WebTable("WorkList").RowCount
                '循环查找
        For i=1 to rows
                tempText= Browser("Browser").Page("Page").WebTable("WorkList").GetCellData(i,3)
                If   StrComp(tempText,operation_number) = 0 Then
                        Browser("Browser").Page("Page").WebTable("WorkList").ChildItem(i,columns,"WebList", 0).Select listOperation
                        Browser("Browser").Page("Page").Sync
                        ExitAction
                End If
                If i=rows  Then
                        Reporter.ReportEvent micFail,"工作列表搜索","搜索的目标工作记录不存在!"
                End If
        Next

End Function
回复 支持 反对

使用道具 举报

该用户从未签到

78#
发表于 2007-8-15 16:49:12 | 只看该作者
Browser("Browser").Page("Page").WebTable("WorkList").SetTOProperty("innertext", innertext_v)
Browser("Browser").Page("Page").WebTable("WorkList").SetTOProperty("index", index)

脱裤子的技术果真高
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    79#
    发表于 2007-8-15 23:51:45 | 只看该作者
    讨论非常深入,值得学习
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    80#
     楼主| 发表于 2007-8-16 15:13:18 | 只看该作者
    原帖由 auqdppyv 于 2007-8-15 16:49 发表
    Browser("Browser").Page("Page").WebTable("WorkList").SetTOProperty("innertext", innertext_v)
    Browser("Browser").Page("Page").WebTable("WorkList").SetTOProperty("index", index)

    脱裤子的技术果真高

    这个问题谈不上脱裤子,yabest的方法类似于
    set EditDesc = Description.Create()

    EditDesc("Name").Value = "userName"

    EditDesc("Index").Value = "0"

    Browser("Welcome: Mercury").Page("Welcome: Mercury").WebEdit(EditDesc).Set "MyName"
    一次性声明描述性编程中使用的对象,在多次使用同一个对象的时候,节省了代码,这是任何编程语言都提倡的。
    学习。支持。

    ps: 最近连日收到鸡蛋,我都有些日子不来了,怎么还给我扔鸡蛋阿,现在鸡蛋那么贵,都省省不行啊!!
    ps2: 我说怎么找不到自己的帖子了呢,原来到精华区了阿。。。嘎嘎

    [ 本帖最后由 jackymail 于 2007-8-16 15:26 编辑 ]
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-23 02:25 , Processed in 0.079588 second(s), 21 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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