受教~~ 不过本人还是对对象库持保留意见
就说这个例子吧
其实
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 原帖由 danmy 于 2007-8-13 13:09 发表 http://bbs.51testing.com/images/common/back.gif
受教~~ 不过本人还是对对象库持保留意见
就说这个例子吧
其实
Link("职员").SetTOProperty("text", datatable.value("职员",dtLocalSheet))
Link("职员").click
和Link("text:="& datatable.value(" ...
界面的操作对象大部分是可以静态识别的,需要动态识别的还是少数的!这少数,可以用SetTOProperty实现的。不要因小失大,舍弃对象库。
录制是对象库方式的优点,一系列操作下来,你手工写脚本要写的半死,录制一下子就生成了大量的脚本了,只要稍做修改即可。两者效率可是天差之别啊!
对象库起名字是有好处的,脚本清晰好看。描述性脚本里没有给对象另外起名,实在是太难看了。如果另设对象变量,那就复杂化了,脚本一样难看。
象你说的对话框的问题,我也是一样写个通用函数,用描述性编程来实现的。
我测试的几个系统,包括Web、Java的,都有类似的对话框处理函数,这是属于我说的,特殊情况,少量使用。
不要因对话框这样的特殊问题而因噎废食,舍弃对象库。QTP支持描述性,只是将其作为对象库的补充嘛!
[ 本帖最后由 yabest 于 2007-8-13 13:38 编辑 ] 原帖由 yabest 于 2007-8-13 13:35 发表 http://bbs.51testing.com/images/common/back.gif
界面的操作对象大部分是可以静态识别的,需要动态识别的还是少数的!这少数,可以用SetTOProperty实现的。不要因小失大,舍弃对象库。
录制是对象库方式的优点,一系列操作下来,你手工写脚本要写的半死, ...
象你说的对话框的问题,我也是一样写个通用函数,用描述性编程来实现的。
我测试的几个系统,包括Web、Java的,都有类似的对话框处理函数,这是属于我说的,特殊情况,少量使用。
不要因对话框这样的特殊问题而因噎废食,舍弃对象库。QTP支持描述性,只是将其作为对象库的补充嘛!
>>对的,具体问题具体分析。但是为什么对话框你不使用对象库,而使用一个通用的函数呢?从理论上来讲,描述性编程的,对象库都可以实现呀(包括动态产生的对象)。 原帖由 loho1968 于 2007-8-13 13:51 发表 http://bbs.51testing.com/images/common/back.gif
>>对的,具体问题具体分析。但是为什么对话框你不使用对象库,而使用一个通用的函数呢?从理论上来讲,描述性编程的,对象库都可以实现呀(包括动态产生的对象)。
用对象库,一样可以实现,但是麻烦点。
因为对话框不好录制,有些等待对话框一闪而过,你根本抓不到,另外一些错误对话框,你也不知道什么时候会出现!
不好录制的对象,那就只能用描述性编程了,总不能为了抓这个等待对话框,反复抓上半天吧,那还不让人笑死了! 无聊,yabest觉得讨论这个话题很有趣么?
这两种方式你分别研究3个月了,再来说吧。
本贴终结到66楼。
66楼的是猪,白痴! 原帖由 ppent 于 2007-8-10 22:33 发表 http://bbs.51testing.com/images/common/back.gif
对象库和描述性编程都是基于对象识别原理上的应用,两者在识别原理上是一致的,唯一的差别是对象库比描述性的对象识别多了一层封装,正如高级语言对于汇编语言。也正是如此,所以在使用上有信手拈来的感觉。
在 ...
同意这个的观点,我们也做过在Robot的基础上的一层封装,做成关键字形式,就是safs(open source),看你们争的真有意思,根据公司项目的需求来决定在什么地方使用对象库还是描述性语言,最终还是一样的.好用了,当然被屏蔽的东西就多些,灵活了,自然描写起来就麻烦些.有什么好争的呀.受不了了.潜水多日,看到这些忍不住上来说两句. 看对象仓库就可以了,网上也有很多的例子呀google下 实在不行的话,发邮件给我,我给你传一个过来.zhongbo45@sina.com 原帖由 mstiunicon 于 2007-8-14 08:55 发表 http://bbs.51testing.com/images/common/back.gif
无聊,yabest觉得讨论这个话题很有趣么?
这两种方式你分别研究3个月了,再来说吧。
本贴终结到66楼。
66楼的是猪,白痴!
哈哈,确实是很无聊的讨论,感觉就像小孩子在争论孙悟空和奥特曼谁厉害一样.
yabest也确实有点偏激了.人家说"尽量多用对象库,少用描述性编程"的时候,你说人家是"和稀泥"的说法
但是上面你又自己说特殊情况下还是要用描述性编程,这不是搬石头砸自己的脚么?
反正我的做法就是先录制了,再回放,回放不过去的改描述性编程就完了 原帖由 wtucel 于 2007-8-14 09:40 发表 http://bbs.51testing.com/images/common/back.gif
...
yabest也确实有点偏激了.人家说"尽量多用对象库,少用描述性编程"的时候,你说人家是"和稀泥"的说法
但是上面你又自己说特殊情况下还是要用描述性编程,这不是搬石头砸自己的脚么?
...
晕死,"尽量多用对象库,少用描述性编程"这话是我说的!
loho1968的帖子里,加">>"才是他自己的,不加是引用别人的,跟一般的用法相反了哈。
原帖由 yabest 于 2007-8-13 13:08 发表 http://bbs.51testing.com/images/common/back.gif
所以要尽量多用对象库,少用描述性。
>>如果是针对软件测试这个目标,使用什么方式不是最重要的,关键在于你是否掌握了,能否熟悉的运用,并达成的你的目标,结果才是最重要的。
又来了,和稀泥。不同方式,虽然一样可以达到目的,但是要付出的成本和代价可能相差很远的!
描述性编程需要一个非常不错的框架,否则就会被搞得很被动,但想要找到或设计一个支持通用的系统的框架,估计这个工作量很大,如果不运用框架,做出来的东西很不好理解。而且费时确实稍长
对于大多数的应用来说,对象库就比较不错了,我甚至怀疑QTP使用对象库本身就是一套应用描述性编程的框架应用。
如果很复杂,非常复杂,或者说乱七八糟的系统,确实用描述性编程更好一点,但是,这样的系统,难道就不能改一改?
如果你一直用对象库,可以用一段时间来了解了解描述性编程,如果你一直用描述性编程,建议你从头开始用用对象库。
这样,可能大家会发现,原来事情本来就很简单,是我们自己把它弄复杂了 原帖由 mstiunicon 于 2007-8-14 08:55 发表 http://bbs.51testing.com/images/common/back.gif
无聊,yabest觉得讨论这个话题很有趣么?
这两种方式你分别研究3个月了,再来说吧。
这两种方式我都用了好多年了,识别对象的原理是一样的,只是形式上的差别而已,没啥好神秘的!
对描述性,我深知其弊端,所以虽然也会用,但尽量少用,有节制的用.
本贴终结到66楼。
66楼的是猪,白痴!
这边论坛是用帖子的形式,帖子也有标题的,你不喜欢不感兴趣,就别点进来了,又没人强迫你进来!
反而是你想强迫别人,不许别人讨论,还用"是猪,白痴"这样的用语,真没素质!
[ 本帖最后由 yabest 于 2007-8-14 23:06 编辑 ] 原帖由 danmy 于 2007-8-13 13:09 发表 http://bbs.51testing.com/images/common/back.gif
受教~~ 不过本人还是对对象库持保留意见
就说这个例子吧
其实
Link("职员").SetTOProperty("text", datatable.value("职员",dtLocalSheet))
Link("职员").click
和Link("text:="& datatable.value(" ...
这哥们正解
我来个例子,一个工作流系统,发起工作流会生成一个以日期后加6位数字的ID
那么下一执行者,要点页面上的列表中的这个ID号的Link进入执行他的操作,(工作任务列表的排序为任务流转时间先后顺序)
有几个问题:
要是不用描述性,你怎么知道你发起的这个工作流ID是多少,
你知道到下一个执行者的界面中列表在哪个位置,难道就人一个测试人员在发起工作流?
[ 本帖最后由 auqdppyv 于 2007-8-14 21:50 编辑 ] 原帖由 auqdppyv 于 2007-8-14 21:49 发表 http://bbs.51testing.com/images/common/back.gif
这哥们正解
我来个例子,一个工作流系统,发起工作流会生成一个以日期后加6位数字的ID
那么下一执行者,要点页面上的列表中的这个ID号的Link进入执行他的操作,(工作任务列表的排序为任务流转时间先后顺序) ...
你这样说不清楚,你就先用描述性脚本写出来吧,我用对象库脚本实现给你看!
除了不确定的对象,或者很难抓取的对象,对象库都能实现描述性的功能,只是把对象描述写在象库或脚本里的差别而已。
[ 本帖最后由 yabest 于 2007-8-14 23:48 编辑 ] 原帖由 yabest 于 2007-8-14 23:44 发表 http://bbs.51testing.com/images/common/back.gif
你这样说不清楚,你就先用描述性脚本写出来吧,我用对象库脚本实现给你看!
除了不确定的对象,或者很难抓取的对象,对象库都能实现描述性的功能,只是把对象描述写在象库或脚本里的差别而已。
SetTOProperty+正则表达式,就可以代替描述性编程,因为只要你能描述,就可以SetTOProperty。
试试看
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=rowsThen
Reporter.ReportEvent micFail,"工作列表搜索","搜索的目标工作记录不存在!"
End If
Next
End Function 原帖由 auqdppyv 于 2007-8-15 13:25 发表 http://bbs.51testing.com/images/common/back.gif
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=rowsThen
Reporter.ReportEvent micFail,"工作列表搜索","搜索的目标工作记录不存在!"
End If
Next
End Function Browser("Browser").Page("Page").WebTable("WorkList").SetTOProperty("innertext", innertext_v)
Browser("Browser").Page("Page").WebTable("WorkList").SetTOProperty("index", index)
脱裤子的技术果真高 讨论非常深入,值得学习 原帖由 auqdppyv 于 2007-8-15 16:49 发表 http://bbs.51testing.com/images/common/back.gif
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 编辑 ]