51Testing软件测试论坛

标题: 请教:qtp 如何遍历div列表 [打印本页]

作者: robinpipi    时间: 2012-12-11 10:19
标题: 请教:qtp 如何遍历div列表
目前有这么一个页面:[attach]82710[/attach]

不是WebTable的,是div
如果要实现这么一个功能:比如要删除某一个好友,根据昵称,勾选对应的复选框。
复选框有固定的id,可以通过查看dom查到,写死在代码里,
可我想通过遍历来实现这个功能,而不是写死id
[attach]82711[/attach]

参照书上226页的例子,但那个是webtable的,对于这种div的,我应该如何做呢。
Dim oWebElements,oDesc
Set oDesc=description.Create()
oDesc("micClass").value="WebElement"
oDesc("html tag").value="DIV"
oDesc("class").value="fbox"
set oWebElements=Browser("好友管理").Page("好友管理").ChildObjects(oDesc)
oCount=oWebElements.count()

For i=1  To  oCount
这里该如何写呢?
Next
作者: xjwldlover    时间: 2012-12-11 10:33

  1. Dim tempObj
  2. For i=1 To oCount -1
  3.     Set tempObj = oWebElements.Item(i)
  4.     --Do someThing
  5. Next
复制代码

作者: 泰然    时间: 2012-12-11 11:57
.object.getElement系列函数,包括了:
getElementsByName
getElementByID
getElementsByTagName
作者: robinpipi    时间: 2012-12-11 13:53
回复 2# xjwldlover


    测试了代码报错。div里面存在item?
作者: xjwldlover    时间: 2012-12-11 14:26
回复 4# robinpipi

额~  div里存在item ,这句没看懂,这两个不搭啊,item是childObjects返回的Collection的元素。
如果在 Collection.item(1)这里报错了,明显是下标越界,就是你的childobjects返回的元素个数是0个,这里下标最低使用1,当然报错了。
把i=1修改成For I=0 to oWebelements.count-1
作者: robinpipi    时间: 2012-12-11 14:57
回复 5# xjwldlover


    惭愧,那接下来如何写呢,新手,恳求。
作者: robinpipi    时间: 2012-12-11 15:18
这是通过spy获取到的页面代码

  1. <DIV class=fbox>
  2. <INPUT id=checkbox_19625278 class=fbox_check name=checkbox value=19625278 type=checkbox>
  3. <A class=avatarlink href="http://my.cn/index.php?userid=19625278">
  4. <IMG class=avatar_s2 title=网友4q3g0r1 alt=网友4q3g0r1 src="http://userface.img.pic.com/60x60/922/417/19625278.jpg">
  5. <EM class=snsoffline></EM></A><UL>
  6. <TABLE border=0>
  7. <TBODY>
  8. <TR>
  9. <TD>
  10. <A class=fname href="http://my.cn/index.php?userid=19625278">网友4q3g0r1</A>&nbsp;&nbsp;
  11. </TD>
  12. <TD>
  13. <IMG style="DISPLAY: none" id=fri_block_19625278 align=absMiddle src="http://my.cn/theme/default/images/u42.png">
  14. </TD>
  15. </TR>
  16. </TBODY>
  17. </TABLE>
  18. <LI id=remark19625278 class=finfo title=""></LI>
  19. <LI class=fbtn>
  20. <A href="javascript:send_mes(19625278,'网友4q3g0r1');">发短消息</A>&nbsp;&nbsp;|&nbsp;&nbsp;
  21. <A id=fri_btn19625278 href="javascript:fri_blockfriends(19625278,1)">屏蔽动态</A>&nbsp;&nbsp;|&nbsp;&nbsp;
  22. <A href="javascript:fri_showEditFriendsTip('',19625278,1,'网友4q3g0r1')">修改组和备注</A>&nbsp;&nbsp;|&nbsp;&nbsp;
  23. <A href="javascript:fri_showDelFriendsTip(19625278,'网友4q3g0r1','NO')">删除</A>
  24. </LI>
  25. </UL>
  26. </DIV>
复制代码

作者: robinpipi    时间: 2012-12-11 15:20
获取innertext:        tempObj.GetROProperty("innertext") 得到的是:网友4q3g0r1 发短消息  |  屏蔽动态  |  修改组和备注  |  删除
这个内容,怎么能跟checkbox框对应,或者说如何获取checkbox框呢
作者: xjwldlover    时间: 2012-12-11 15:54
通过childObject 和 For next找到单个对象obj后,使用obj的相关方法获取checkbox对象(获取参见3#)。
作者: robinpipi    时间: 2012-12-11 16:09
回复 9# xjwldlover


For i=0  To  oCount-1
Set tempObj = oWebElements.Item(i)
msgbox Browser("好友管理").Page("好友管理").Object.getElementsByName("checkbox")(i).value
Next

这跟是否获取到单个对象obj没关系了啊
作者: xjwldlover    时间: 2012-12-11 17:37
额 建议LZ先获取任意一个checkbox,做勾选操作→
然后补强,根据条件过滤checkbox,然后勾选。

LZ目前的思路有点像Object.Set "VALUE",想一步到位,这样不太容易啊;目前的问题中间多了一步,Object是什么~
作者: robinpipi    时间: 2012-12-11 17:50
回复 11# xjwldlover


    你是说Browser("好友管理").Page("好友管理").Object.getElementsByName("checkbox")(i).value 这个object吗
作者: robinpipi    时间: 2012-12-11 17:53
目前我大概有个思路:首先获得了tempObj,然后判断这个tempObj的innertext是否包含昵称,如果包含的话,那么Browser("好友管理").Page("好友管理").Object.getElementsByName("checkbox")(i).set "ON" ,不晓得对不对
作者: robinpipi    时间: 2012-12-11 17:58
Browser("好友管理").Page("好友管理").Object.getElementsByName("checkbox")(i).Set "ON"  为什么报对象不支持此方法 set
作者: robinpipi    时间: 2012-12-11 17:59
晓得了,Browser("好友管理").Page("好友管理").Object.getElementsByName("checkbox")(i).checked=true
作者: 梧桐落叶    时间: 2012-12-17 15:19
本帖最后由 梧桐落叶 于 2012-12-17 15:25 编辑

一般会这样处理input checkbox
  1. Set MyDescrīption = Descrīption.Create()
  2. MyDescrīption(“html tag”).Value = “INPUT”
  3. MyDescrīption(“type”).Value = “checkbox”
  4. Set Checkboxes = Browser("好友管理").Page("好友管理").ChildObjects(MyDescrīption)

  5. NoOfChildObjs = Checkboxes.Count

  6. For Counter=0 to NoOfChildObjs-1

  7. Checkboxes(Counter).Set “ON”

  8. Next
复制代码





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