51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 14644|回复: 42
打印 上一主题 下一主题

如何参数化link

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2005-10-27 13:13:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有个朋友问
如何参数化link
大致意思是说,页面上有很多link
录的时候点一个link,回放的时候能够点很多link
即所谓"link的参数化":)

以我们的bbs为例,给出以下代码
  1. Browser("Browser").Page("Page").Sync
  2. Browser("Browser").Navigate "http://bbs.51testing.com/index.php"
  3. Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Sync

  4. Set tags=Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Object.links
  5. Dim i,j, arr()
  6. i=0
  7. For Each element in tags
  8.     If Ucase(element.tagname)="A" and left(element.InnerText,1)="[" Then
  9. ReDim Preserve arr(i+1)
  10.      arr(i)=element.InnerText
  11.     i=i+1
  12. end if
  13. Next



  14. For j=0 to i
  15. Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Link("[ 版主讨论区 ]").SetTOProperty "Text",arr(j)
  16.             Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Link("[ 版主讨论区 ]").Click
  17. Browser("Browser").Back
  18. Next
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2005-10-27 13:18:05 | 只看该作者
这段代码先是打开一个空的页面,然后输入url.
到达论坛首页。

然后得到所有版面的名称,也就是link的名称。
存到数组里面。
然后使用SetTOProperty更换录制时候录下的link的属性。
这时候再click
也就是
  1. Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Link("[ 版主讨论区 ]").Click
复制代码
就可以了。

希望大家拍砖,完善这个脚本。:)

我完善的部分:
link上的文字不用存到datetable中,提高效率。
修改了object.all为object.links避免了判断页面中过多的tag.

[ Last edited by lovetest6 on 2005-10-27 at 13:20 ]
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2005-11-3 11:23:13 | 只看该作者

为什么?

我Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Object没有link这一属性
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2005-11-3 11:36:39 | 只看该作者

为什么?

我Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Object没有link这一属性
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2005-11-4 14:23:34 | 只看该作者
我有一个办法解决这个问题,可以通过更改link 控间属性值的方法达到这个目的,如进入界面后点击名位“7”的连接,录制成功后,更改link7的属性值中的text项,假设将其改为5,那么下次运行时就会点击5这个连接,并且可以对这个值进行参数化,点击多个连接
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2005-11-4 14:26:13 | 只看该作者
还有一个问题,就是如何达到一次登陆,点击多个连接的目的这个理论上可以使用call action来达到,一个action1负责登陆,一个负责点击action2,但是我遇到了问题就是无法控制action2进行重复循环希望楼主帮忙想办法,我已经将这个问题,单独作为一个问题,提交到坛子中
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2005-11-10 18:00:23 | 只看该作者
不错,佩服.
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2005-11-11 12:26:31 | 只看该作者
我来试一下
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2005-11-12 09:24:21 | 只看该作者
斑竹错了,最后一个循环应该是
For j=0 to i-1
     ................                 
Next
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2005-11-12 22:03:21 | 只看该作者
实现了lovedemon 的方法,献丑一下,大家看看还能怎么优化一下??
Browser("Browser").Page("Page").Sync
Browser("Browser").Navigate "http://bbs.51testing.com/index.php"
Browser("Browser").Page("51Testing软件测试论坛 ---软件测试,软件质量工程").Sync
Dim arr
arr = Array("[软件质量管理]" ,"[软件需求管理]" )
Dim i
i = 0
For i=0 to 1
Browser("Browser").Page("51Testing软件测试论坛 ---软件测试,软件质量工程").Link("[软件测试论坛公告]").SetTOProperty "Text",arr(i)
Browser("Browser").Page("51Testing软件测试论坛 ---软件测试,软件质量工程").Link("[软件测试论坛公告]").Click
reporter.ReportEvent micPass,"click links",arr(i)
Browser("Browser").Page("51Testing软件测试论坛 - [软件测试论坛公告]--").Sync
Browser("Browser").Back
Next
Browser("Browser").Page("51Testing软件测试论坛 ---软件测试,软件质量工程").Sync
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    11#
    发表于 2006-9-5 17:14:07 | 只看该作者
    这样的好帖子应该置顶!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2006-10-10 10:09:36 | 只看该作者
    收藏
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2006-10-10 21:24:28 | 只看该作者
    下面是我录制的脚本,我有2点疑问.
    1.在运行到红色脚本处出错,一般运行错误.但在第二个for语句设置断点后,单步调试时不会出错.
    2.绿色代码第一行,用settoproterty改变属性值后,执行代码后点击"软件质量管理",是跳到改变属性后的页面还是仍然是"软件质量管理"页面.在单步执行时,查看页面每次循环都是"软件质量管理"页面.但在测试结果中查看,每次点击出现相应的界面(即改变属性值后相应的页面).
    大家知道什么原因吗?

    还有一个问题:
    能不能把第二行绿色代码Link("[软件质量管理]")中的Link[软件质量管理]用变量代替?例如Link("&arry[j]")这种形式?正确的改怎么写,格式好象不正确,运行有错.
    Browser("Browser").Page("Page").Sync
    Browser("Browser").Navigate "http://bbs.51testing.com"
    Set tags=Browser("Browser").Page("51Testing软件测试论坛 测试 | 软件测试").object.links
    Dim i,j ,arry()
    i=0
    For each element in tags
    If Ucase(element.tagname)="A" and left(element.innertext,1)="[" Then
      ReDim preserve arry(i+1)
      arry(i)=element.innertext
    i=i+1
    End If
    Next
    For j=0 to i-1
    Browser("Browser").Page("51Testing软件测试论坛 测试 | 软件测试").Link("[软件质量管理]").SetTOProperty "text" ,arr(j)
    browser("Browser").Page("51Testing软件测试论坛 测试 | 软件测试").Link("[软件质量管理]").click

    reporter.ReportEvent micPass,"click links",arry(j)
    browser("Browser").Back
    Next
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    14#
    发表于 2006-10-12 20:21:46 | 只看该作者
    把 倒数第4行改为下面的代码试试看:
    Browser("Browser").Page("51Testing软件测试论坛 测试 | 软件测试").Link("[软件质量管理]").SetTOProperty("text" ,arr(j) )
    .click
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
    发表于 2006-10-13 09:01:45 | 只看该作者
    to 14.按你说的去做,就会出现,找不不到对象[软件测试综合栏目].
    上边代码reporter.ReportEvent micPass,"click links",arry(j)下边加一句wait(time)运行就不会出错了.IE速度太慢,还没跳转到下一个页面就开始执行下面代码了,所以会出错.
    现在唯一的疑问就是为什么单步执行和运行看到的连接页面是不同的?但最终结果是正确的?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2006-10-18 17:21:30 | 只看该作者
    感谢。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
    发表于 2006-10-20 18:35:04 | 只看该作者
    感觉还是有些问题,发现都只参数化了link的对象,问题是link对象点击后的page都不需要去检查吗?
    至少要检查page(object).exist吧.
    那么page都需要参数化才可以吧.所以觉得必须两个地方同时参数化.
    个人看法,joan2005的运行能通过,应该是运气吧.呵呵
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
    发表于 2006-10-23 11:24:08 | 只看该作者
    不知道下面这样是否可以?没有亲自验证.

    Browser("Browser").Page("Page").Sync
    Browser("Browser").Navigate "http://bbs.51testing.com/index.php"
    Set tags=Browser("Browser").Page("51Testing软件测试论坛 测试 | 软件测试").object.links
    Dim i,j ,arry()
    i=0
    For each element in tags
    If Ucase(element.tagname)="A" and left(element.innertext,1)="[" Then
      ReDim preserve arry(i+1)
      arry(i)=element.innertext
    i=i+1
    End If
    Next
    For j=0 to i-1
    Browser("Browser").Page("51Testing软件测试论坛 测试 | 软件测试").Link("[软件质量管理]").SetTOProperty "text" ,arr(j)
    browser("Browser").Page("51Testing软件测试论坛 测试 | 软件测试").Link("[软件质量管理]").click
    while(browser("Text:=xxx","index:="&j).exist)
    browser("Text:=xxx","index:= "&j).back
    reporter.ReportEvent micPass,"click links",arry(j)
    'browser("Browser").Back
    Next
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
    发表于 2006-10-24 23:27:10 | 只看该作者
    弱弱的问一句,为啥我按照大家的办法,到了Navigate这一步,回放的时候就没有什么反应了呢??sdlkfj9
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
    发表于 2006-12-14 03:26:47 | 只看该作者
    我更弱弱的问一句,我怎么第一句都执行不了呢?

    [ 本帖最后由 joshfang 于 2006-12-14 03:28 编辑 ]

    本帖子中包含更多资源

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

    x
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-27 18:09 , Processed in 0.080895 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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