zoujufei 发表于 2010-5-13 13:40:49

【在线等待】如何进行多选

1、我想通过下面的循环语句连续4次进行对象类别是WebElement的多选,但运行过程中,每次单击,都会将上次的勾选取消,只勾选当前点击的。
2、通过手动点击webtable的每一行的第一列,是可以实现多选的,不过点击其他列确实会取消上一次勾选的。但我下面的脚本ChildItem (1,1,"WebElement",0)也是选中的是第一列啊,为什么会不能实现多选呢
Dim i
For i=35 to 38
    Set oDesc = Description.Create()
    oDesc("class").Value = "x-grid3-row-table"
    oDesc("index").Value = i
        set a=Browser("Centerm Management System").Page("Centerm Management System").WebTable(oDesc).ChildItem (1,1,"WebElement",0)
        a.click
Next

skyzhu 发表于 2010-5-13 13:53:54

ChildItem (1,1,"WebElement",0)

每次都点1行1列,不取消那才怪了

zoujufei 发表于 2010-5-13 14:02:24

回复 2# 的帖子

因为我这个系统webtable不是作为独立一个整体,而是每一行都作为一个单独的webtable。所以你看我前面的循环语句,是分别选择4个不同的webtable(每个webtable只有1行,有3列),通过运行,系统也在4个webtable的第一行第一列进行选中,目前的问题是,无法多选

skyzhu 发表于 2010-5-13 14:33:32

index这种属性只能靠调试、打日志了
长什么样也不知道,帮不了你了。。。

feiyunkai 发表于 2010-5-13 14:47:41

一种简单的方法(实际项目中用过)

'首先将任意一个需要勾选的对象的上级WebTable添加到对象库,然后以下代码可实现循序点击index为35到38的对象
'假设添加进来的对象的上级WebTable为:WebTable("35"),则:
For i=35 to 38
Browser("Centerm Management System").Page("Centerm Management System").WebTable("35").SetTOProperty("index",i)
Browser("Centerm Management System").Page("Centerm Management System").WebTable("35").ChildItem (1,1,"WebElement",0).click
Next

'附:具体操作:
'添加上级WebTable对象的方法,按CTRL+R,点击“+”按钮,点击需要勾选的对象,点击上级的WebTable,点击OK

[ 本帖最后由 feiyunkai 于 2010-5-13 15:07 编辑 ]

zoujufei 发表于 2010-5-13 15:16:31

回复 5# 的帖子

Browser("Centerm Management System").Page("Centerm Management System").WebTable("35").SetTOProperty("index",i)-----这句用意是什么
另外,我目前这个系统存在一个问题,就是无法将webtable添加到对象库,所以我都采用描述性编程

feiyunkai 发表于 2010-5-13 15:26:28

采用描述性编程,可以使用以下代码

'修改对象的index属性,作用等同于你代码中的oDesc("index").Value = i
'另外,QTP只要能识别的对象就可以添加到对象库,上一个回复已经附加了添加方法:打开对象库,点击“+”按钮,点击你需要勾选的对象,(后面这个步骤是重点)在弹出的Object selection-add to repository中选择WebTable,这样这个WebTable就添加到对象库了,除非Object selection中没有那个对象
'采用描述性编程,可以使用以下代码
For i=35 to 38
Browser("Centerm Management System").Page("Centerm Management System").WebTable("class:=x-grid3-row-table","index:="&i).ChildItem (1,1,"WebElement",0).click
Next

[ 本帖最后由 feiyunkai 于 2010-5-13 15:36 编辑 ]

zoujufei 发表于 2010-5-13 15:29:53

回复 7# 的帖子

我有用过你这种方式,但还是每次选中都会把上次的取消

zoujufei 发表于 2010-5-13 15:33:44

回复 7# 的帖子

另外,想再请教你,你也看到我选中webtable,是通过class和index,class属性比较稳定不会变化,但index目前我是通过数它处于第几个这样确定的,有没有更好的方式来定位我想要的webtable

Haereticus 发表于 2010-5-13 15:36:44

试试onfocus

zoujufei 发表于 2010-5-13 15:42:06

回复 10# 的帖子

onfocus事件也无效

feiyunkai 发表于 2010-5-13 15:49:21

原帖由 zoujufei 于 2010-5-13 15:33 发表 http://bbs.51testing.com/images/common/back.gif
另外,想再请教你,你也看到我选中webtable,是通过class和index,class属性比较稳定不会变化,但index目前我是通过数它处于第几个这样确定的,有没有更好的方式来定位我想要的webtable

'我知道的方法有2个:
'方法一:添加新属性,不过这个方法不太易用,需要把每个属性相同的对象都添加一个新属性
'方法二、循环查找(我的项目中就用了这种方法),利用单元格内容确定所需要勾选的复选框,例:
Dim row,maxrow
maxrow=Browser("***").Page("***").WebTable("***").RowCount'获取WebTable最大行数
For row=2 to maxrow
a=Browser("***").Page("***").WebTable("***").GetCellData(row,2)'假设第2列的单元格内容,用于区分是否勾选
If a="值" Then      '设置勾选条件
Browser("***").Page("***").WebTable("***").ChildItem(row,1,"webcheckbox",0).click'勾选第一列的复选框
End If
Next

Haereticus 发表于 2010-5-13 15:52:34

用a.highlight看看你每次是否都定位到那个对象

zoujufei 发表于 2010-5-13 16:05:21

回复 12# 的帖子

根据单元格内容确实可以找到我想要的那一行,但问题是单元格内容很容易 变化,无法保证在脚本运行时也还是这样的内容。所以目前我通过index,但index又经常会变动,因为当前的webtable是一个子对话框,它的父对话框又有很多class属性相同的webtable。目前,我没有很好的办法来区分父界面和子界面的webtable,只能通过index

skyzhu 发表于 2010-5-14 10:50:31

每操作一下。。highlight调试一下。。。多数是index规则没找到,每次操作后可能会变
页: [1]
查看完整版本: 【在线等待】如何进行多选