51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 5640|回复: 36
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-11-19 18:31:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 FLY000 于 2010-11-19 19:15 编辑

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

这个功能的对话框的FRAME的属性是变化的怎么办?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 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的属性会改变,导致对象找不到,脚本运行失败.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2010-11-19 19:07:28 | 只看该作者
本帖最后由 FLY000 于 2010-11-19 19:14 编辑

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

审核功能的FRAME



导入数据功能的FRAME

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2010-11-19 23:33:20 | 只看该作者
正则表达式……模糊匹配就是了
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2010-11-20 09:58:26 | 只看该作者
我习惯的做法是,首先取出当前页面中所有的IFRAME对象,然后遍历对象列表,判断队列中对象的URL字符串是否包含指定的字符串,如果包含,则返回
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 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)>0  Then
   Set GetFrame =oDescFrameCollection(i)
   Exit For
    End If
   Next
End Function

通过Set objFrame = GetFrame("hz")可以得到想要的那个FRAME,
但是
objFrame.WebCheckBox("层层汇总").Click
这句提示:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2010-11-22 11:50:42 | 只看该作者
objFrame.WebCheckBox("html tag:=INPUT","type:=checkbox","name:=recur").Click

改为描述性编程也不行

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

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 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*")
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2010-11-22 15:39:06 | 只看该作者


Browser("Wtap2.0").Page("DataManagePage").Frame("url:=.*hz*").WebCheckBox("html tag:=INPUT","type:=c ...
FLY000 发表于 2010-11-22 14:55
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2010-11-22 16:33:10 | 只看该作者
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2010-11-22 16:50:53 | 只看该作者
FLY000 发表于 2010-11-22 16:33



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

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2010-11-22 16:53:34 | 只看该作者
通过ChildObjects得到的子对象已经是真实存在的实际对象了,只能再用ChildObjects来得到孙对象
yabest 发表于 2010-11-22 16:50


哦,明白了
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 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*")
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2010-11-22 16:56:41 | 只看该作者
其实不用这么麻烦,绕半天的。

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

使用道具 举报

该用户从未签到

15#
发表于 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
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2010-11-22 17:07:52 | 只看该作者
那么我用正则匹配的方法来做,要怎么写正则表达式来匹配“hz”这个字符?:

Browser("Wtap2.0").Page("D ...
FLY000 发表于 2010-11-22 16:55



   

正则表达式不过关。

.     表示 1个 任意字符
.*   表示 任意个 任意字符
z*  表示 任意个 字符z  如  "" , z ,  zz ,  zzzzzzzzzzzz
回复 支持 反对

使用道具 举报

该用户从未签到

17#
 楼主| 发表于 2010-11-22 17:17:33 | 只看该作者
哦,太感谢了,都明白了
回复 支持 反对

使用道具 举报

该用户从未签到

18#
 楼主| 发表于 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

而这个实际值在不同的环境时,是会变化的
回复 支持 反对

使用道具 举报

该用户从未签到

19#
发表于 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



    我只是偷懒,设置成 ".*hz.*" 就可以了,一样可以用正则表达式。

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

    不要用描述性写那么多代码,看得多累啊!
回复 支持 反对

使用道具 举报

该用户从未签到

20#
 楼主| 发表于 2010-11-22 17:50:27 | 只看该作者
哦,我是尽量用对象库来做的
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-17 14:22 , Processed in 0.087422 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表