51Testing软件测试论坛

标题: 动态WebRadioGroup的选择方法 [打印本页]

作者: kursk    时间: 2007-4-29 07:59
标题: 动态WebRadioGroup的选择方法
如下图,我们有时会遇到下图中的列表,表中的列表项的个数是动态变化的,排列顺序也是动态变化的。操作的方法是
点击所要选择的项目的前面的单选按钮,然后才能对这一项进行操作——删除、修改等等
[attach]24220[/attach]

在使用Object spy检查webradiogroup的属性时发现一个有趣的现象,ojbect spy只返回被选中的那个radio的属性、abs_x,abs_y等等
,即使你spy未被选中的按钮也如此!不过下面的代码利用了这个现象。

另外radio的items count属性可以返回当前radio 的个数。

代码的思想是这样,首先根据找到要操作的选项,在本例中,假设是“branch3_1”这一项,因为它的排列顺序是不固定,所以我们不能
通过它目前图中的位置来找到它所对应的单选按钮,而且因为html语言中也没有给出当前第几行的属性,所以在单选按钮和“branch3_1”
之间只有一个屏幕纵坐标相同或相差一个固定值的关系,前面说过来object spy 只返回被选中的那个radio的属性,因此我们可以首先
for 循环,然后select每一个单选按钮,判断当前单选按钮的abs_y是否与“branch3_1”的abs_y相等或者相差一个固定值,如果“是”,就
说明选对了,退出循环。当然了,循环的总次数不能超过items count

源代码如下

   Dim y '获得所要退回步骤名称的Y值坐标
   Dim i
   Dim rownum '循环上限
   dim radiogroup 'radio 对象
   dim backroutes '选择项目名
     y=browser("browser").Window("***").Page("***").WebElement("html tag:=TD","innertext:="&backroutes).GetRoProperty("abs_y")+2
           Set radiogroup=browser("browser").Window("****").Page("****").WebRadioGroup("html tag:=INPUT","name:=radio1")
           rownum=radiogroup.GetRoProperty("items count")
           For i=0 to rownum-1
                   radiogroup.select "#"&i
           If radiogroup.GetRoProperty("abs_y")=y Then
                           browser("browser").Window("*****").Page("******").WebButton("html tag:=INPUT","name:=确定").click
                           Exit for
                   End If
           Next

[ 本帖最后由 kursk 于 2007-5-31 12:42 编辑 ]
作者: kursk    时间: 2007-4-29 08:10
sdlkfj1 赚点技术指数,纯粹好玩,大家不要生气啊
作者: mstiunicon    时间: 2007-4-29 09:09
动态的RadioGroup还是要根据具体的情况来处理。我有碰到要用RadioGroup的value来选择的,也有要根据动态的行的其它列的值来辅助选择的。不好说阿
作者: kursk    时间: 2007-4-29 12:03
我这个方法就是根据同一行的其他列的值来辅助选择的

如果是根据radiogroup的value值来选择应该是很简单的吧
作者: walker1020    时间: 2007-5-12 17:57
原帖由 kursk 于 2007-4-29 08:10 发表
sdlkfj1 赚点技术指数,纯粹好玩,大家不要生气啊


你好玩了,可是大家不觉得这好玩,因为就没有几个人来看。sdlkfj6
作者: walker1020    时间: 2007-5-12 17:59
你在 #1 写的 Exit for 和 End If的位置对吗? 是否应该交换一下?难道这就是你要的效果?
作者: kursk    时间: 2007-5-31 12:41
exit for是退出最近的一个for循环,应该没有什么关系吧
作者: loho1968    时间: 2007-5-31 14:13
不错
作者: henhenchen    时间: 2007-5-31 21:28
标题: 回复 #1 kursk 的帖子
不错. 要是我遇到这种情况.我会用到WEBTABLE 来处理.思路和你的差不多.
作者: kursk    时间: 2007-6-1 11:16
webtable怎么确定找的元素是第几行?第几列呢?

我开始也想用行列来找,但是没有找到对应的属性,于是才采用了坐标对位的方法
作者: henhenchen    时间: 2007-6-1 12:18
标题: 回复 #10 kursk 的帖子
和你的一样啊.
FOR I=1 TO ROWNO.
IF 比如 INSTR(GETCELLDATA(I,3),"“branch3_1”))>1 THEN K=I EXIT FOR
END
作者: kursk    时间: 2007-6-1 14:16
原来如此,握手
作者: mstiunicon    时间: 2007-6-1 17:23
标题: 回复 #11 henhenchen 的帖子
原来如此,这个方法的确简单有效。赞一个。
作者: haiyan073408    时间: 2007-7-21 23:08
标题: 回复 #10 kursk 的帖子
GetRowWithCellText("branch1_1",Column,[StartFromRow])可以得到想要的cell的Row。但我不知道怎么样获得这个cell的Index值。
作者: garyyes    时间: 2007-7-23 04:34
原帖由 kursk 于 2007-4-29 07:59 发表
如下图,我们有时会遇到下图中的列表,表中的列表项的个数是动态变化的,排列顺序也是动态变化的。操作的方法是
点击所要选择的项目的前面的单选按钮,然后才能对这一项进行操作——删除、修改等等
24220

...


对于dropdown list 和Web radio group这两种object,都可以用这种方法select一个item。但要注意:
1,先用GetRoProperty("items count") 或 Object.property.allitem(好像这样写,^_^),得到item数做循环。
2,select一个值时,用value和index值都是可以的。value是指字面的字符串,index是从0开始,前面加‘#’和不加,都是可以的。
作者: xiaoan_2131    时间: 2008-8-26 14:39
如果想要执行,随机点击webradiogroup 应该怎么做呢?
作者: 爱喝可乐的蚊子    时间: 2008-8-28 17:01
源代码有两个地方不懂
1.  y=browser("browser").Window("***").Page("***").WebElement("html tag:=TD","innertext:="&backroutes).GetRoProperty("abs_y")+2
这个"innertext:="&backroutes  里的&backroutes是什么意思啊?
2.  radiogroup.select "#"&i
这个"#"&i是什么用法啊?
作者: xiaoan_2131    时间: 2008-9-2 09:19
原帖由 爱喝可乐的蚊子 于 2008-8-28 17:01 发表
源代码有两个地方不懂
1.  y=browser("browser").Window("***").Page("***").WebElement("html tag:=TD","innertext:="&backroutes).GetRoProperty("abs_y")+2
这个"innertext:="&backroutes  里的&backrout ...


innertext:=backroutes 就是提取其中的按钮的属性的

select #&i 这是选择i作为下拉菜单的选项,每次都进行选择。
作者: cswalkman    时间: 2009-7-28 18:49
very much   thinks  !!!!!!

谢谢楼主,也谢谢garyyes
作者: whoamiyaya    时间: 2009-9-17 22:54
WebTable看来是个好东东,要好好学学,谢谢分享:)
作者: handonglayue521    时间: 2009-9-18 11:18
其实玩QTP的,都应该掌握一个原则或者说有这种心得,针对某些控件不好处理的,可以尝试从它的父级对象入手。这是一个比较常见和适用的方法。




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