kursk 发表于 2007-4-29 07:59:13

动态WebRadioGroup的选择方法

如下图,我们有时会遇到下图中的列表,表中的列表项的个数是动态变化的,排列顺序也是动态变化的。操作的方法是
点击所要选择的项目的前面的单选按钮,然后才能对这一项进行操作——删除、修改等等


在使用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:24

sdlkfj1 赚点技术指数,纯粹好玩,大家不要生气啊

mstiunicon 发表于 2007-4-29 09:09:30

动态的RadioGroup还是要根据具体的情况来处理。我有碰到要用RadioGroup的value来选择的,也有要根据动态的行的其它列的值来辅助选择的。不好说阿

kursk 发表于 2007-4-29 12:03:02

我这个方法就是根据同一行的其他列的值来辅助选择的

如果是根据radiogroup的value值来选择应该是很简单的吧

walker1020 发表于 2007-5-12 17:57:59

原帖由 kursk 于 2007-4-29 08:10 发表 http://bbs.51testing.com/images/common/back.gif
sdlkfj1 赚点技术指数,纯粹好玩,大家不要生气啊

你好玩了,可是大家不觉得这好玩,因为就没有几个人来看。sdlkfj6

walker1020 发表于 2007-5-12 17:59:24

你在 #1 写的 Exit for 和 End If的位置对吗? 是否应该交换一下?难道这就是你要的效果?

kursk 发表于 2007-5-31 12:41:40

exit for是退出最近的一个for循环,应该没有什么关系吧

loho1968 发表于 2007-5-31 14:13:33

不错

henhenchen 发表于 2007-5-31 21:28:27

回复 #1 kursk 的帖子

不错. 要是我遇到这种情况.我会用到WEBTABLE 来处理.思路和你的差不多.

kursk 发表于 2007-6-1 11:16:38

webtable怎么确定找的元素是第几行?第几列呢?

我开始也想用行列来找,但是没有找到对应的属性,于是才采用了坐标对位的方法

henhenchen 发表于 2007-6-1 12:18:59

回复 #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:05

原来如此,握手

mstiunicon 发表于 2007-6-1 17:23:38

回复 #11 henhenchen 的帖子

原来如此,这个方法的确简单有效。赞一个。

haiyan073408 发表于 2007-7-21 23:08:00

回复 #10 kursk 的帖子

GetRowWithCellText("branch1_1",Column,)可以得到想要的cell的Row。但我不知道怎么样获得这个cell的Index值。

garyyes 发表于 2007-7-23 04:34:30

原帖由 kursk 于 2007-4-29 07:59 发表 http://bbs.51testing.com/images/common/back.gif
如下图,我们有时会遇到下图中的列表,表中的列表项的个数是动态变化的,排列顺序也是动态变化的。操作的方法是
点击所要选择的项目的前面的单选按钮,然后才能对这一项进行操作——删除、修改等等
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:11

如果想要执行,随机点击webradiogroup 应该怎么做呢?

爱喝可乐的蚊子 发表于 2008-8-28 17:01:20

源代码有两个地方不懂:hug:
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:29

原帖由 爱喝可乐的蚊子 于 2008-8-28 17:01 发表 http://bbs.51testing.com/images/common/back.gif
源代码有两个地方不懂:hug:
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:02

very much   thinks!!!!!!

谢谢楼主,也谢谢garyyes

whoamiyaya 发表于 2009-9-17 22:54:16

WebTable看来是个好东东,要好好学学,谢谢分享:)
页: [1] 2
查看完整版本: 动态WebRadioGroup的选择方法