当运行的环境不同时,对话框的FRAME是变化的怎么办?
本帖最后由 FLY000 于 2010-11-19 19:15 编辑在系统中,同一个功能,在不同的任务、不同的报表期、不同的数据集下使用,
这个功能的对话框的FRAME的属性是变化的怎么办? 本帖最后由 FLY000 于 2010-11-19 19:10 编辑
Function DetailAudit()
Browser("Wtap2.0").Page("DataManagePage").Frame("CollectMainFrame").Link("审核").Click
Browser("Wtap2.0").Page("DataManagePage").Frame("CollectMainFrame").Link("详细审核").Click
Browser("Wtap2.0").Page("DataManagePage").Frame("DetailAuditFrame").Link("下一步").Click
Browser("Wtap2.0").Page("DataManagePage").Frame("DetailAuditFrame").Link("下一步_2").Click
Browser("Wtap2.0").Page("DataManagePage").Frame("DetailAuditFrame").Link("开始").Click
Browser("Wtap2.0").Page("DataManagePage").Frame("DetailAuditFrame").Link("关闭").Click
End Function
这个函数,当运行不同的任务时,FRAME的属性会改变,导致对象找不到,脚本运行失败. 本帖最后由 FLY000 于 2010-11-19 19:14 编辑
一般FRAME对象是通过name来识别的,或者html id,但是我们程序的程序这两个值都是空的,INDEX值又比较大,而且不稳定;
所以只能通过url来识别,且当在不同的环境下(如:任务,报表期)使用此功能(如:汇总,审核功能)时,那么这个对话框的url中的参数就不一样;
审核功能的FRAME
导入数据功能的FRAME
正则表达式……模糊匹配就是了 我习惯的做法是,首先取出当前页面中所有的IFRAME对象,然后遍历对象列表,判断队列中对象的URL字符串是否包含指定的字符串,如果包含,则返回 本帖最后由 FLY000 于 2010-11-22 11:17 编辑
Function CollectData()
Browser("Wtap2.0").Page("DataManagePage").Frame("CollectMainFrame").Link("汇总").Click
Browser("Wtap2.0").Page("DataManagePage").Frame("CollectMainFrame").Link("汇总数据").Click
Set objFrame = GetFrame("hz")
objFrame.WebCheckBox("层层汇总").Click
objFrame.Link("汇总").Click
End Function
Function GetFrame(RegName)
Set oDescFrame = Description.Create()
oDescFrame("micclass").Value = "Frame"
Set oDescFrameCollection = Browser("Wtap2.0").Page("DataManagePage").ChildObjects(oDescFrame)
For i = 0 to oDescFrameCollection.count-1
strUrl = oDescFrameCollection(i).GetRoproperty("url")
If InStr(1,strUrl,RegName)>0Then
Set GetFrame =oDescFrameCollection(i)
Exit For
End If
Next
End Function
通过Set objFrame = GetFrame("hz")可以得到想要的那个FRAME,
但是
objFrame.WebCheckBox("层层汇总").Click
这句提示:
objFrame.WebCheckBox("html tag:=INPUT","type:=checkbox","name:=recur").Click
改为描述性编程也不行
对象不支持此属性或方法: 'objFrame.WebCheckBox' Browser("Wtap2.0").Page("DataManagePage").Frame("url:=.*hz*").WebCheckBox("html tag:=INPUT","type:=checkbox","name:=recur").Click
正则匹配 “hz”这个字符串匹配不到
Frame("url:=.*hz*") ;P
Browser("Wtap2.0").Page("DataManagePage").Frame("url:=.*hz*").WebCheckBox("html tag:=INPUT","type:=c ...
FLY000 发表于 2010-11-22 14:55 http://bbs.51testing.com/images/common/back.gif :L
FLY000 发表于 2010-11-22 16:33 http://bbs.51testing.com/images/common/back.gif
通过ChildObjects得到的子对象已经是真实存在的实际对象了,只能再用ChildObjects来得到孙对象 通过ChildObjects得到的子对象已经是真实存在的实际对象了,只能再用ChildObjects来得到孙对象
yabest 发表于 2010-11-22 16:50 http://bbs.51testing.com/images/common/back.gif
哦,明白了 那么我用正则匹配的方法来做,要怎么写正则表达式来匹配“hz”这个字符?:
Browser("Wtap2.0").Page("DataManagePage").Frame("url:=.*hz*").WebCheckBox("html tag:=INPUT","type:=checkbox","name:=recur").Click
正则匹配 “hz”这个字符串匹配不到
Frame("url:=.*hz*") 其实不用这么麻烦,绕半天的。
你就直接在对象库里,将那个frame对象的条件,用正则表达式 设置成url=".*hz.*",就可以了,跟你写这一堆代码的作用是等价的。 当这个frame的url会变化时,你可以动态修改这个frame仓库对象的属性,然后再进行操作,比如
Browser("Wtap2.0").Page("DataManagePage").Frame("CollectMainFrame").SetTOProperty("url", "bj")
Browser("Wtap2.0").Page("DataManagePage").Frame("CollectMainFrame").WebCheckBox("层层汇总").Click 那么我用正则匹配的方法来做,要怎么写正则表达式来匹配“hz”这个字符?:
Browser("Wtap2.0").Page("D ...
FLY000 发表于 2010-11-22 16:55 http://bbs.51testing.com/images/common/back.gif
正则表达式不过关。
. 表示 1个 任意字符
.* 表示 任意个 任意字符
z*表示 任意个 字符z如"" , z ,zz ,zzzzzzzzzzzz 哦,太感谢了,都明白了:lol Browser("Wtap2.0").Page("DataManagePage").Frame("CollectMainFrame").SetTOProperty("url", "bj")
这个做法可能行不通吧,要通过SetTOProperty把url设置成运行时的实际值,比如:
url实际的值是:../hz.jsp?taskId={09CB19B7-D75D-4E3A-B4B6-C9CE4269AE2E}.0603bc0db3e3193538931a185558aa04&bbq=201011--&userid=2210000
而这个实际值在不同的环境时,是会变化的 本帖最后由 yabest 于 2010-11-22 17:41 编辑
Browser("Wtap2.0").Page("DataManagePage").Frame("CollectMainFrame").SetTOProperty("url", "bj")
这 ...
FLY000 发表于 2010-11-22 17:25 http://bbs.51testing.com/images/common/back.gif
我只是偷懒,设置成 ".*hz.*" 就可以了,一样可以用正则表达式。
尽量用对象库来实现,这样简单,代码简洁。
不要用描述性写那么多代码,看得多累啊! 哦,我是尽量用对象库来做的:lol
页:
[1]
2