51Testing软件测试论坛

标题: 请问怎么识别自动增减的链接 [打印本页]

作者: 小澈    时间: 2006-4-27 15:22
标题: 请问怎么识别自动增减的链接
如题,如果有某个链接需要点击,但是这个链接是因为上一步操作才会产生出来的,比如往列表中增加一条记录,我现在需要找到这条记录,请问有什么办法?这条记录增加后,不一定在最末端,也不一定在最首端,有什么属性可以用来找到他呢。因为是新增的,而且名字可能会重名,所以根据名字来找肯定不行了。看了这个对象的其他所有属性,好像没有能用来做标示的
比如下图,钢材是我新增加的一条记录,现在下一步需要点击钢材这个链接,该怎么才能找到它呢?

[ 本帖最后由 小澈 于 2006-4-27 15:25 编辑 ]
作者: gotesting    时间: 2006-4-28 14:11
关注
作者: jennie98    时间: 2006-4-29 14:09
知道的进来说说啊,学习呢
作者: harold_zou    时间: 2006-4-29 17:40
用描述语句代替录制的对象
作者: gotesting    时间: 2006-4-30 14:16
能否举例说明?谢谢!
作者: mary.mo    时间: 2006-4-30 15:07
用Exist可以判断
作者: 小澈    时间: 2006-4-30 16:56
原帖由 mary.mo 于 2006-4-30 15:07 发表
用Exist可以判断


好像不可以吧,名字可以重复的!!

用exist也无法判断出是否唯一啊
作者: 小澈    时间: 2006-4-30 17:00
其实,就是怎样在某一个页面上,找到自己想要的那个url,然后执行click

比如

dim s
s=browser("系统登录").Page("bidlinkEPSIII").Frame("main_frame_right_9").WebTable("采购目录").RowCount
datatable.Value("采购目录条数","采购目录维护")=s //检测数据是否正确
Set Link=Browser("系统登录").Page("bidlinkEPSIII").Frame("main_frame_right_9").WebTable("采购目录").ChildItem(s,2,"link",0)
link.click
可是在
Set Link=Browser("系统登录").Page("bidlinkEPSIII").Frame("main_frame_right_9").WebTable("采购目录").ChildItem(s,2,"link",0)
这句话总是不能正确执行,请问是为什么呢,执行中报错
webtable我已经手动填加到对象库里面去了,打.以后,后面的方法都会自动出来
可是
link打.后,后面就没有click的方法

我选定一个webtable作为对象,然后set了url href的值,可是都无法判断出来,不太明白

高手出来指点一二吧

[ 本帖最后由 小澈 于 2006-4-30 17:02 编辑 ]
作者: Hunter    时间: 2006-5-10 14:20
看看这么做可不可以?如下:
这么做的前提是增加link后,已存在的link的html id不发生变化。
假设你列表中已有2个link ,名称都是“钢材”。此时你需要新增一个名称为“钢材”的link,然后点击他,可以吗?
首先,把列表中存在的两个“钢材”的html id取出来,如下:
(遍历表格的该列,取出所有“钢材”的html id值,并记录下来。)
dim htmlValue,linkName,temp,targetName,i
targetName = "钢材"
rows = Browser().page().WebTable().GetRowCount
for i=1 to rows
         linkName = Browser().page().WebTable().ChildItem(i,1,"Link",0).GetRoProperty ("name")
         if linkNmae = targetName then
         temp = Browser().page().WebTable().ChildItem(i,1,"Link",0).GetRoProperty ("html id") // 我假设在第1列了,呵呵
         htmlValue = htmlValue&temp
         end if
Enf For

//此时手动增加一个“钢材”连接
rows = Browser().page().WebTable().GetRowCount
for i=1 to rows
         linkName = Browser().page().WebTable().ChildItem(i,1,"Link",0).GetRoProperty ("name")
         if linkNmae = targetName then
                  temp = Browser().page().WebTable().ChildItem(i,1,"Link",0).GetRoProperty ("html id")
                  if instrRev(htmlValue,temp)=0 then
                            Browser().page().WebTable().ChildItem(i,1,"Link",0).Click
                            Browser().page().sync
                            Exit For
                  end if
         end if
end for

[ 本帖最后由 Hunter 于 2006-5-10 14:30 编辑 ]
作者: bluelight    时间: 2006-5-10 15:52
我也试过用childitem都没有成功过。你的问题应该用description prog写:

  1. Dim myDesLink
  2. Set myDesLink  = description.Create()
  3. myDesLink("htm tag").value = "......"
  4. myDesLink("src").value = "........"

  5. 或者还有其他属性你可以确定
复制代码

以后都用myDesLink
browser(".....").Page(".....").Link(myDesLink).Click
然后应该就可以识别

如果没有其他属性可以在页面唯一确定它“钢材”,也许就只能用它与上级可识别控件的相对位置定位了
我就碰到过这样的问题,也只是很猪头地找到"abs_x""abs_y"这样的属性唯一确定需要点击的link.......sigh!

!不知道哪位还有更好的方法//bow
作者: Horus_Ra    时间: 2006-5-10 17:50
呵呵,XY这种方法不太可行,毕竟位置很可能变化……

既然有“钢材”两个字,那至少text属性应该能识别吧?
作者: bluelight    时间: 2006-5-11 09:46
那么要是这些数据都是动态的呢? 不一定是楼主例子中的“钢材”,text不就不管用了?
这样子的话该怎么办呢
作者: Horus_Ra    时间: 2006-5-11 11:48
你可以做参数化啊,做成变量……
作者: bluelight    时间: 2006-5-11 14:20
做成变量,那么参数从哪里读来呢?直接从数据库里面拿?

//我的意思是,只到run的时候,“钢材”这些的动态数据才能够确定;
在写script的时候,只知道存在这样的子link,
关于任何信息,都不能够确定,包括name等等 ;

这个时候参数化数据从何而来呢
作者: Horus_Ra    时间: 2006-5-11 17:31
哦,那你真是挺倒霉的~
楼主说了,位置也不是固定的……




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2