FLY000 发表于 2010-11-19 18:31:45

当运行的环境不同时,对话框的FRAME是变化的怎么办?

本帖最后由 FLY000 于 2010-11-19 19:15 编辑

在系统中,同一个功能,在不同的任务、不同的报表期、不同的数据集下使用,

这个功能的对话框的FRAME的属性是变化的怎么办?

FLY000 发表于 2010-11-19 18:36:09

本帖最后由 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:07:28

本帖最后由 FLY000 于 2010-11-19 19:14 编辑

一般FRAME对象是通过name来识别的,或者html id,但是我们程序的程序这两个值都是空的,INDEX值又比较大,而且不稳定;
所以只能通过url来识别,且当在不同的环境下(如:任务,报表期)使用此功能(如:汇总,审核功能)时,那么这个对话框的url中的参数就不一样;

审核功能的FRAME



导入数据功能的FRAME

lyscser 发表于 2010-11-19 23:33:20

正则表达式……模糊匹配就是了

dreamever 发表于 2010-11-20 09:58:26

我习惯的做法是,首先取出当前页面中所有的IFRAME对象,然后遍历对象列表,判断队列中对象的URL字符串是否包含指定的字符串,如果包含,则返回

FLY000 发表于 2010-11-22 11:16:35

本帖最后由 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
这句提示:

FLY000 发表于 2010-11-22 11:50:42

objFrame.WebCheckBox("html tag:=INPUT","type:=checkbox","name:=recur").Click

改为描述性编程也不行

对象不支持此属性或方法: 'objFrame.WebCheckBox'

FLY000 发表于 2010-11-22 14:55:08

Browser("Wtap2.0").Page("DataManagePage").Frame("url:=.*hz*").WebCheckBox("html tag:=INPUT","type:=checkbox","name:=recur").Click

正则匹配 “hz”这个字符串匹配不到

Frame("url:=.*hz*")

yabest 发表于 2010-11-22 15:39:06

;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

FLY000 发表于 2010-11-22 16:33:10

:L

yabest 发表于 2010-11-22 16:50:53


FLY000 发表于 2010-11-22 16:33 http://bbs.51testing.com/images/common/back.gif


通过ChildObjects得到的子对象已经是真实存在的实际对象了,只能再用ChildObjects来得到孙对象

FLY000 发表于 2010-11-22 16:53:34

通过ChildObjects得到的子对象已经是真实存在的实际对象了,只能再用ChildObjects来得到孙对象
yabest 发表于 2010-11-22 16:50 http://bbs.51testing.com/images/common/back.gif

哦,明白了

FLY000 发表于 2010-11-22 16:55:08

那么我用正则匹配的方法来做,要怎么写正则表达式来匹配“hz”这个字符?:

Browser("Wtap2.0").Page("DataManagePage").Frame("url:=.*hz*").WebCheckBox("html tag:=INPUT","type:=checkbox","name:=recur").Click

正则匹配 “hz”这个字符串匹配不到

Frame("url:=.*hz*")

yabest 发表于 2010-11-22 16:56:41

其实不用这么麻烦,绕半天的。

你就直接在对象库里,将那个frame对象的条件,用正则表达式 设置成url=".*hz.*",就可以了,跟你写这一堆代码的作用是等价的。

yabest 发表于 2010-11-22 17:03:10

当这个frame的url会变化时,你可以动态修改这个frame仓库对象的属性,然后再进行操作,比如

Browser("Wtap2.0").Page("DataManagePage").Frame("CollectMainFrame").SetTOProperty("url", "bj")
Browser("Wtap2.0").Page("DataManagePage").Frame("CollectMainFrame").WebCheckBox("层层汇总").Click

yabest 发表于 2010-11-22 17:07:52

那么我用正则匹配的方法来做,要怎么写正则表达式来匹配“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

FLY000 发表于 2010-11-22 17:17:33

哦,太感谢了,都明白了:lol

FLY000 发表于 2010-11-22 17:25:41

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:38:23

本帖最后由 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.*" 就可以了,一样可以用正则表达式。

    尽量用对象库来实现,这样简单,代码简洁。

    不要用描述性写那么多代码,看得多累啊!

FLY000 发表于 2010-11-22 17:50:27

哦,我是尽量用对象库来做的:lol
页: [1] 2
查看完整版本: 当运行的环境不同时,对话框的FRAME是变化的怎么办?