omg 发表于 2008-12-8 23:57:46

同一操作用对象库和描述性编程,回放结果不一样

最近在写一些简单的QTP脚本,发现一个奇怪的现象(如题),不知道为什么,希望明白人给我解释一下。详细情况如下

SwfWindow("abc").SwfTable("def").SelectCell 0, "Title"

SwfWindow("abc").SwfTable("swfname:=xxx").SelectCell 0, "Title"
在我的测试环境里,上面这两种操作方式,只有当采用第一种时QTP才能回放成功。如果QTP采用第二种写法的脚本来回放,会产生一个错误 “Exception occured。”。使用描述性编程的方式,我也能确定QTP找到了这个Table控件,能返回正常的RowCount,但当使用描述性编程调用SelectCell,SelectRow,SelectColumn方法就会出错。
出现这种情形,是什么原因导致的?高手达人请帮忙解释解释。感激不尽。

目标程序:由.net 3.5开发,并使用DevExpress控件
QTP版本:9.2
OS:Windows 2003

walker1020 发表于 2008-12-9 13:00:37

运行 MsgboxSwfWindow("abc").SwfTable("swfname:=xxx").Exist看看SwfWindow("abc").SwfTable("swfname:=xxx")是否 存在

鹭岛 发表于 2008-12-9 15:58:44

SwfWindow("abc").SwfTable("def").SelectCell 0, "Title"

SwfWindow("abc").SwfTable("swfname:=xxx").SelectCell 0, "Title"

这两句本身就不相等。。。第一句虽然你只看到了SwfTable的一个属性值为def,但是对象库提那家的时候已经把其他相应属性也添加了也能唯一标识了,而你第二句话,纯粹是通过单一属性来查找,当然不一定能唯一标识了

my_horse 发表于 2008-12-9 17:07:34

"swfname:=xxx"必须能唯一标识名为“def”这个对象

omg 发表于 2008-12-9 17:15:16

原帖由 walker1020 于 2008-12-9 13:00 发表 http://bbs.51testing.com/images/common/back.gif
运行 MsgboxSwfWindow("abc").SwfTable("swfname:=xxx").Exist看看SwfWindow("abc").SwfTable("swfname:=xxx")是否 存在
肯定存在,能正常返回MsgboxSwfWindow("abc").SwfTable("swfname:=xxx").RowCount的值。

已用 MsgboxSwfWindow("abc").SwfTable("swfname:=xxx").Exist测试,得到True。

原帖由 鹭岛 于 2008-12-9 15:58 发表 http://bbs.51testing.com/images/common/back.gif
SwfWindow("abc").SwfTable("def").SelectCell 0, "Title"

SwfWindow("abc").SwfTable("swfname:=xxx").SelectCell 0, "Title"

这两句本身就不相等。。。第一句虽然你只看到了SwfTable的一个属性值为def,但是对象库提那家的时候已经把其他相应属性也添加了也能唯一标识了,而你第二句话,纯粹是通过单一属性来查找,当然不一定能唯一标识了
不能当唯一标识,能正常返回MsgboxSwfWindow("abc").SwfTable("swfname:=xxx").RowCount的值么?
并且我使用了多个属性来匹配控件的,回放还是出错 。

鹭岛 发表于 2008-12-10 09:05:41

回复 5# 的帖子

你可以先测试下两次重复操作,查看下属性,第一次和第二次有没有变化
BS架构的经常属性值是变来变去的~~特别是NAME的值总是不固定,至少我们公司开发的很多BS架构的都是大部分属性的值不固定的,你试着用别的属性~~~我们公司开发的DELPHI的程序,我发现就window id、x、y的属性值不改变,其他的属性值,前后比较几乎全变了,每次都不一样。。。

omg 发表于 2008-12-10 09:58:43

回复 6# 的帖子

swfname--The object's name as set by the developer.
swfname path--The full hierarchy of swfname with all parent objects.
swftypename--The full type name of the object.

我用了上面3个属性来匹配控件,这几个属性,我觉得如果代码没变,随便怎么跑,都不会变吧。
关键是在编写脚本,在获取属性,在QTP回放脚本,这几个过程中,都一直是把程序打开的,没有关闭,没有重启,没有重新加载。
目标程序是C/S结构的。
在同一次回放脚本时:
SwfWindow("abc").SwfTable("swfname:=xxx").RowCount                               ---------- 执行通过
SwfWindow("abc").SwfTable("swfname:=xxx").SelectCell 0, "Title"                ---------- 执行失败

而且SwfTable中有很多行,也存在"Title"的列。

omg 发表于 2008-12-10 18:08:24

自己顶一下
页: [1]
查看完整版本: 同一操作用对象库和描述性编程,回放结果不一样