lovetest6 发表于 2005-10-27 13:13:59

如何参数化link

有个朋友问
如何参数化link
大致意思是说,页面上有很多link
录的时候点一个link,回放的时候能够点很多link
即所谓"link的参数化":)

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

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



For j=0 to i
Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Link("[ 版主讨论区 ]").SetTOProperty "Text",arr(j)
            Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Link("[ 版主讨论区 ]").Click
Browser("Browser").Back
Next

lovetest6 发表于 2005-10-27 13:18:05

这段代码先是打开一个空的页面,然后输入url.
到达论坛首页。

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

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

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

[ Last edited by lovetest6 on 2005-10-27 at 13:20 ]

up(51testing) 发表于 2005-11-3 11:23:13

为什么?

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

up(51testing) 发表于 2005-11-3 11:36:39

为什么?

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

lovedemon 发表于 2005-11-4 14:23:34

我有一个办法解决这个问题,可以通过更改link 控间属性值的方法达到这个目的,如进入界面后点击名位“7”的连接,录制成功后,更改link7的属性值中的text项,假设将其改为5,那么下次运行时就会点击5这个连接,并且可以对这个值进行参数化,点击多个连接

lovedemon 发表于 2005-11-4 14:26:13

还有一个问题,就是如何达到一次登陆,点击多个连接的目的这个理论上可以使用call action来达到,一个action1负责登陆,一个负责点击action2,但是我遇到了问题就是无法控制action2进行重复循环希望楼主帮忙想办法,我已经将这个问题,单独作为一个问题,提交到坛子中

zhengfeng 发表于 2005-11-10 18:00:23

不错,佩服.

shengyan 发表于 2005-11-11 12:26:31

我来试一下

shengyan 发表于 2005-11-12 09:24:21

斑竹错了,最后一个循环应该是
For j=0 to i-1
   ................               
Next

shengyan 发表于 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

walker1020 发表于 2006-9-5 17:14:07

这样的好帖子应该置顶!

Joan2005 发表于 2006-10-10 10:09:36

收藏

Joan2005 发表于 2006-10-10 21:24:28

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

还有一个问题:
能不能把第二行绿色代码Link("[软件质量管理]")中的Link[软件质量管理]用变量代替?例如Link("&arry")这种形式?正确的改怎么写,格式好象不正确,运行有错.
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

walker1020 发表于 2006-10-12 20:21:46

把 倒数第4行改为下面的代码试试看:
Browser("Browser").Page("51Testing软件测试论坛 测试 | 软件测试").Link("[软件质量管理]").SetTOProperty("text" ,arr(j) )
.click

Joan2005 发表于 2006-10-13 09:01:45

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

zhyb_2008 发表于 2006-10-18 17:21:30

感谢。

viviv_wang 发表于 2006-10-20 18:35:04

感觉还是有些问题,发现都只参数化了link的对象,问题是link对象点击后的page都不需要去检查吗?
至少要检查page(object).exist吧.
那么page都需要参数化才可以吧.所以觉得必须两个地方同时参数化.
个人看法,joan2005的运行能通过,应该是运气吧.呵呵

viviv_wang 发表于 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

wuzhuayu 发表于 2006-10-24 23:27:10

弱弱的问一句,为啥我按照大家的办法,到了Navigate这一步,回放的时候就没有什么反应了呢??sdlkfj9

joshfang 发表于 2006-12-14 03:26:47

我更弱弱的问一句,我怎么第一句都执行不了呢?

[ 本帖最后由 joshfang 于 2006-12-14 03:28 编辑 ]
页: [1] 2 3
查看完整版本: 如何参数化link