51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 10687|回复: 41
打印 上一主题 下一主题

[原创] 如何让QTP在大量列表中勾选出需要的数据?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-8-29 19:08:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要在一列姓名列表中找出所需要的人,并在其前面勾选上。录制的脚本直接按row来数行数

Browser("AA").Window("AB-Web").Page("AB").WebCheckBox("all_2").Set "ON"
Browser("AA").Window("AB-Web").Page("AB").WebCheckBox("all_3").Set "ON"

这也能解决问题,但存在一个潜在隐患:如果姓名列表发生变动,脚本就不正确了。

我想一劳永逸。如何能够让QTP自动寻找到目标姓名行,并在其前面完成钩选动作?

参见附图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-8-29 19:24:05 | 只看该作者
在我测试的项目里.WebCheckBox有个属性就是value,就是楼主要的名称,你参数化了就可以了.
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2007-8-29 19:34:01 | 只看该作者
用spy看每行的 class 为  web element
各行的区别在 innertext,分别为每行的内容——人名

复选框的 class 为 web check box
各复选框之间的区别好像是 outerhtml 的 values各不一样,其中也包含有对应的人名

我的思路是:
1. 按照innertext属性来找到对应的行,再在对应的复选框里勾上
2. 或者直接按复选框的outerhtml属性来查找、选择。 但spy可以看到outerhtml属性,选到对象库里就看不到这项属性了,不知能否办到

目前只有思路,但不知道怎么实现。请各位高手指教!
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2007-8-29 19:40:55 | 只看该作者
原帖由 风过无息 于 2007-8-29 19:24 发表
在我测试的项目里.WebCheckBox有个属性就是value,就是楼主要的名称,你参数化了就可以了.


没明白。你是指如图所式的value?这个值为ON,好像不能按你所言……

[ 本帖最后由 kangaroo 于 2007-8-30 11:08 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2007-8-30 11:08:53 | 只看该作者
或者是指WebCheckBox的value属性?我查过了,这个属性是数字,目前还不知道这些数字的含义,但要靠它来查可能性不大
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2007-8-30 14:21:52 | 只看该作者
any help?
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2007-8-30 15:23:08 | 只看该作者
你自己不是说了吗,innertext不一样,那就用innertext来做对象识别主要属性就可以了。
录制其中一个对象,然后动态修改对象的innertext属性。Object(description).SetTOProperty Property, Value

原帖由 kangaroo 于 2007-8-29 19:34 发表
用spy看每行的 class 为  web element
各行的区别在 innertext,分别为每行的内容——人名

复选框的 class 为 web check box
各复选框之间的区别好像是 outerhtml 的 values各不一样,其中也包含有对应的人 ...
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2007-8-30 15:24:23 | 只看该作者
还有建议下次不要使用英文
"录制的脚本直接按row来数行数" 这句话很酷
我翻译过来就是
录制的脚本直接按行来数行数
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2007-8-30 16:40:16 | 只看该作者

回复 #7 jackymail 的帖子

我猜可以这么办,但……我不知道怎么实现。才自学一个月,只会录脚本,看脚本,用脚本生成器写简单脚本,但这种按思路写程序----我真的不会sdlkfj1

估计要用到GetTOProperty之类的命令吧.
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2007-8-30 16:41:49 | 只看该作者
再学一段时间就行了,先把这个问题放一下。
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2007-8-30 16:52:14 | 只看该作者

回复 #10 jackymail 的帖子

sdlkfj9
可是这个问题现在就要解决,这是头儿的命令
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2007-8-30 17:22:08 | 只看该作者
我也碰到相同的问题。

感觉不好实现,因为WebCheckBox和用户名的WebElement两个对象是独立的,没有相关联的关系。所以根据UserName选CheckBox不知道通过哪里关联。。。期待高手回复。。

另,WebCheckBox的value属性是和它的排序有关的吧。我的环境是从零加一递增的。。。
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2007-8-30 17:40:17 | 只看该作者

回复 #12 木卫十二 的帖子

是这样的,WebCheckBox的value属性是按排序从0递增的

另: 在我的环境里用Highlight in Application查看,WebCheckBox是在WebElement里面的.这两个对象的outerhtml属性有一段是相同的,
WebChekBox的outerhtml属性:
<INPUT type=checkbox value=11 name=all is_used="1" user_name="aaron.gao">
WebElement的outerhtml属性:
<TD><INPUT type=checkbox value=11 name=all is_used="1" user_name="aaron.gao"> aaron.gao </TD>
而且这段里包含有我需要的user_name
不晓得能否利用到这一点
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2007-8-30 18:12:52 | 只看该作者
我比较不幸,outerhtml也没有关联!幸好上头没要求必须要这样实现。sdlkfj5

即然这样,是否可以将outerhtml取出,用正则表达式判断用户名是否在里面,是则选中。

正则表达式我还没得空研究,不过猜想应该能实现这个功能吧。。。

供你参考sdlkfj2
回复 支持 反对

使用道具 举报

该用户从未签到

15#
 楼主| 发表于 2007-8-30 18:34:42 | 只看该作者
我又有一个思路,名单就是个只有一列的表,把这个表的内容取出来查,这样比较好实现.

还有,把 WebCheckBox 做为 WebElement 的 ChildItem去操作,似乎可以解决两者关联问题.

不过,这里要设计到VB Script循环语句, ChildItem, 循环次数的设定……

待我研究下----真给逼上梁山了
回复 支持 反对

使用道具 举报

该用户从未签到

16#
 楼主| 发表于 2007-8-30 20:02:32 | 只看该作者
吼吼!!!问题解决了!!!

row = Browser("AA").Window("AA-Web").Page("AB").WebTable("ALL").RowCount
For i=1 to row -1
    If  Browser("AA").Window("AA-Web").Page("AB").WebTable("ALL").GetCellData(i, 1) = " sheila.shi "    Then
  Browser("AA").Window("AA-Web").Page("AB").WebTable("ALL").ChildItem(i,1,"WebCheckBox",0).Set "ON"
(
上句也可换为:
Set obj = Browser("AA").Window("AA-Web").Page("AB").WebTable("ALL").ChildItem(i,1,"WebCheckBox",0)
obj.Set "ON"
)
    Exit for
    End If
Next

下面就是对" sheila.shi "参数化了.

注意:
1. WebTable("ALL")必须是包含且只包含所有WebElement的表格, 注意和其他WebTable的区分.
2. If语句里=后的 " sheila.shi " 要注意引号里的空格, 是否该有空格可以通过table checkpoint里的configure value来确定.如果和checkpoint里的不一致会找不到目标对象.

这是最后一个思路的解决办法. 前面的思路似乎也是可行的. 谁能给出前面思路的解法?

[ 本帖最后由 kangaroo 于 2007-8-30 20:16 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2007-8-31 09:47:33 | 只看该作者
恭喜恭喜,也借来用用sdlkfj6
回复 支持 反对

使用道具 举报

该用户从未签到

18#
 楼主| 发表于 2007-8-31 11:07:49 | 只看该作者
如何对" sheila.shi "参数化?我又搞不定了。原来都是在keyword view里操作,现在不行了

help!!!!
回复 支持 反对

使用道具 举报

该用户从未签到

19#
 楼主| 发表于 2007-8-31 11:57:01 | 只看该作者
问题又解决一项!!参数化就用这句:
If  Browser("AA").Window("AA-Web").Page("AB").WebTable("ALL").GetCellData(i, 1) = DataTable("ConfCall_All", dtLocalSheet)    Then
踏破铁鞋无觅处,得来全不费工夫。原来就这么简单地替换以下就搞定!!嘻嘻嘻嘻
回复 支持 反对

使用道具 举报

该用户从未签到

20#
发表于 2007-8-31 15:29:54 | 只看该作者
其实不用那么麻烦的找关联关系,不用钻牛角尖,想一个通用直观有效的方法,就是根据坐标来定位某个对象相应的WebCheckbox

吐血大奉献,写了一个通用函数,可以一劳永逸的解决类似问题,适合各种情况
  1. '================================================================
  2. ' FUNCTION NAME:
  3. '        FindCheckBox
  4. ' FUNCTION DESCRIPTION:
  5. '        Find the corresponding webcheckbox of title object in parent object, and output the webcheck
  6. ' FUNCTION USAGE:
  7. '        Set parentObject = Browser("ATS Login").Page("ATS Login").Frame("mainRight")
  8. '        Set titleObject = Browser("ATS Login").Page("ATS Login").Frame("mainRight").Link("test")
  9. '        ret = FindCheckBox(parentObject, titleObject, checkBoxObject)
  10. '        checkBoxObject.Set "ON"
  11. ' FUNCTION PARAMETER
  12. '        ParentObject: The parent object of title object and webcheckbox object
  13. '        TitleObject:        The title object
  14. '        CheckBoxObject: [Output Param] Output the corresponding webcheckbox object of title object
  15. ' FUNCTION RETURN:
  16. '        0:        Success to find and output the corresponding webcheckbox object of title object
  17. '        -1:        Fail to find the corresponding webcheckbox object of title object
  18. ' FUNCTION ORIGINAL CREATOR:
  19. '        yabest
  20. ' FUNCTION CREATION DATE:
  21. '        2007-08-30
  22. ' FUNCTION UPDATE HISTORY:
  23. '===============================================================
  24. Function FindCheckBox(ByVal ParentObject, ByVal TitleObject, ByRef CheckBoxObject)

  25.         Dim titleObjectY1, titleObjectY2, curChildObjectMidY
  26.         Dim checkBoxDesc, childObjects
  27.         Dim childNum, childIndex, findIndex

  28.         'Get the title object's top/bottom y position
  29.         titleObjectY1 = CInt(TitleObject.GetROProperty("abs_y"))
  30.         titleObjectY2 = CInt(TitleObject.GetROProperty("abs_y")) +  CInt(TitleObject.GetROProperty("height"))

  31.         'get all webcheckbox objects
  32.         Set checkBoxDesc = Description.Create()
  33.         checkBoxDesc("micclass").Value = "WebCheckBox"
  34.         Set childObjects = ParentObject.ChildObjects(checkBoxDesc)

  35.         'search the webcheckbox according y position.
  36.         childNum = childObjects.Count
  37.         findIndex = -1
  38.         For childIndex = 0 to childNum-1
  39.                 Set curChildObject = childObjects(childIndex)
  40.                 curChildObjectMidY = CInt(curChildObject.GetROProperty("abs_y")) + CInt(curChildObject.GetROProperty("height"))/2
  41.                 'the webcheckbox should be:   (y+height/2) in [titleObjectY1, titleObjectY2] area
  42.                 If curChildObjectMidY>=titleObjectY1 and  curChildObjectMidY<= titleObjectY2 Then
  43.                         findIndex = childIndex
  44.                         Exit For
  45.                 End If
  46.         Next

  47.         'if not found, return fail
  48.         If findIndex = -1 Then
  49.                 FindCheckBox = -1
  50.                 Exit Function
  51.         End If

  52.         'if found, return success
  53.         Set CheckBoxObject = curChildObject
  54.         FindCheckBox = 0
  55.         
  56. End Function
复制代码

[ 本帖最后由 yabest 于 2007-8-31 15:35 编辑 ]
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-9-21 08:53 , Processed in 0.090353 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表