51Testing软件测试论坛

标题: Frame_4,Frame_5....用正则表达式做 [打印本页]

作者: FLY000    时间: 2008-6-6 20:21
标题: Frame_4,Frame_5....用正则表达式做
Browser("登录服务器").Page("华普财务分析系统").Frame("Frame_3").WebTable("name:=类别").RowCount

每次循环,Frame会改变,Frame_4,Frame_5....我用正则表达式做

Browser("登录服务器").Page("华普财务分析系统").Frame("Frame_[3-9]").WebTable("name:=类别").RowCount

QTP提示:The "Frame_[3-9]" Frame object was not found in the Object Repository.
作者: FLY000    时间: 2008-6-6 21:24
cFrame="Frame_"+cstr(j2+1)
nRow2=Browser("登录服务器").Page("华普财务分析系统").Frame("name=:"&cFrame).WebTable("name:=类别").RowCount

我这样做也不行。
作者: liangjz    时间: 2008-6-7 00:29
标题: 回复 2# 的帖子
Browser("登录服务器").Page("华普财务分析系统").Frame("Frame_.*").WebTable("name:=类别").RowCount
作者: hsjzfling    时间: 2008-6-9 10:44
回3楼 你确定Frame("Frame_.*")这样使用正则表达式没问题么~~据我所知,对象名称上是不能使用正则表达式的

回LZ楼 实际上你的问题很可能是可以通过录制时修改Page/Frame Options的设置来解决的,录制的脚本中没有了_2,_3这些重复对象产生,就不会有你现在的问题了~~(页面中本就存在多个这样名叫Frame的对象的情况除外~)
看的出来LZ初步会使用描述性编程了,不过还没能很好的了解其实质以及部分细节。其一是name属性,这个name不是你看到在对象库中高高在上的那个Name,而是你在使用Spy查看对象时Runtime Object那一列对象属性中的一个属性。因此2楼的做法也是不可行的。

那么正确的做法应该是,先去对象库中比较这些Frame对象的识别属性,看是否完全一样,若相同则不需要使用正则表达式,将这些属性转换成描述性编程语句就可以了;若不相同,则需要根据对象属性值的不同之处与变化规律,来确定如何使用变量或者正则表达式匹配这些属性值。
顺便提一下咯,在属性完全一样时我们还可以有其它的解决办法,比如,将那些Frame_2,_3等等对象下的子对象都拖到第一个Frame对象中去,然后QTP把代码中的对象名Frame_2,_3等都替换为Frame即可。若子对象也完全一样,那么就只需要替换下代码中的对象名就好了。

若LZ还不能很好的理解的话,可以把那几个Frame对象在对象库中属性值截图发上来看看,这样我才能帮你给出代码
作者: jifenggold    时间: 2008-6-9 16:03
4楼正解,通过设置能够解决这种问题。
作者: FLY000    时间: 2008-6-10 10:08
1.而是你在使用Spy查看对象时Runtime Object那一列对象属性中的一个属性。
----Frame的属性怎么用SPY查看啊?

2.我这里Frame属性是一样的,Frame下的对象不同,我觉得用你说的转化成描述性编程来做较好。
----我改了options里面的设置,现在录制完后,对象都在一个Frame下面了。
----那些Frame是不是就是在对象库里的名字不一样?实际上属性是一样的,这样的话,用描述性编程来做也不能区分那些Frame啊

3.将那些Frame_2,_3等等对象下的子对象都拖到第一个Frame对象中去,然后QTP把代码中的对象名Frame_2,_3等都替换为Frame即可
----你说的这个方法,我觉得不行,因为Frame是动态生成的。“Browser("登录服务器").Page("华普财务分析系统").Frame("name=:"&cFrame).WebTable("name:=类别")” ,生成的Frame中的WebTable对象也是生成时才取的,WebTable对象并没有事先添加到对象库中,要生成多少个Frame也是不确定的。

[ 本帖最后由 FLY000 于 2008-6-10 11:31 编辑 ]
作者: FLY000    时间: 2008-6-10 10:18
附件是我现在对象库中的FRAME和OPTIONS里面的FRAME设置
作者: FLY000    时间: 2008-6-10 11:04
每个Frame的属性都是一样的,除了在对象库里的名字不同
作者: boyeestudio    时间: 2008-8-13 15:44
标题: 这个问题,怎么设置让那个Frame在录制时不出现Frame_2,_3之类的?
这个问题,怎么设置让那个Frame在录制时不出现Frame_2,_3之类的?高手给个截图啊!
作者: luckxiaot    时间: 2008-8-13 16:07
用描述性编程,或者把那写FRAME_2,FRAME_3下的对象全都放到FRAME下,把FRAME_2,FRAME_3删除!!
作者: kevin_swpi    时间: 2008-8-13 16:36
其实楼主问题通过整理对象库来解决

你自己把各个frame进行命名
然后根据需要再把下面的对象来进行整理

因为你这样可能出现很多frame_?  
这样不管是维护还是在代码里看起都很恼火

http://www.51testing.com/?161787 ... e_itemid_89571.html
看看这个 (顺便给zte_bogk空间打个广告 )
应该对你有启发
作者: yabest    时间: 2008-8-13 17:02
原帖由 FLY000 于 2008-6-10 10:18 发表
附件是我现在对象库中的FRAME和OPTIONS里面的FRAME设置


你两个都选 Different Test Object Description好了,就不会出现多个Page、Frame对象了。




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