如何让QTP在大量列表中勾选出需要的数据?
要在一列姓名列表中找出所需要的人,并在其前面勾选上。录制的脚本直接按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自动寻找到目标姓名行,并在其前面完成钩选动作?
参见附图: 在我测试的项目里.WebCheckBox有个属性就是value,就是楼主要的名称,你参数化了就可以了. 用spy看每行的 class 为web element
各行的区别在 innertext,分别为每行的内容——人名
复选框的 class 为 web check box
各复选框之间的区别好像是 outerhtml 的 values各不一样,其中也包含有对应的人名
我的思路是:
1. 按照innertext属性来找到对应的行,再在对应的复选框里勾上
2. 或者直接按复选框的outerhtml属性来查找、选择。 但spy可以看到outerhtml属性,选到对象库里就看不到这项属性了,不知能否办到
目前只有思路,但不知道怎么实现。请各位高手指教! 原帖由 风过无息 于 2007-8-29 19:24 发表 http://bbs.51testing.com/images/common/back.gif
在我测试的项目里.WebCheckBox有个属性就是value,就是楼主要的名称,你参数化了就可以了.
没明白。你是指如图所式的value?这个值为ON,好像不能按你所言……
[ 本帖最后由 kangaroo 于 2007-8-30 11:08 编辑 ] 或者是指WebCheckBox的value属性?我查过了,这个属性是数字,目前还不知道这些数字的含义,但要靠它来查可能性不大 any help? 你自己不是说了吗,innertext不一样,那就用innertext来做对象识别主要属性就可以了。
录制其中一个对象,然后动态修改对象的innertext属性。Object(description).SetTOProperty Property, Value
原帖由 kangaroo 于 2007-8-29 19:34 发表 http://bbs.51testing.com/images/common/back.gif
用spy看每行的 class 为web element
各行的区别在 innertext,分别为每行的内容——人名
复选框的 class 为 web check box
各复选框之间的区别好像是 outerhtml 的 values各不一样,其中也包含有对应的人 ... 还有建议下次不要使用英文
"录制的脚本直接按row来数行数" 这句话很酷
我翻译过来就是
录制的脚本直接按行来数行数
回复 #7 jackymail 的帖子
我猜可以这么办,但……我不知道怎么实现。才自学一个月,只会录脚本,看脚本,用脚本生成器写简单脚本,但这种按思路写程序----我真的不会sdlkfj1估计要用到GetTOProperty之类的命令吧. 再学一段时间就行了,先把这个问题放一下。
回复 #10 jackymail 的帖子
sdlkfj9可是这个问题现在就要解决,这是头儿的命令 我也碰到相同的问题。
感觉不好实现,因为WebCheckBox和用户名的WebElement两个对象是独立的,没有相关联的关系。所以根据UserName选CheckBox不知道通过哪里关联。。。期待高手回复。。
另,WebCheckBox的value属性是和它的排序有关的吧。我的环境是从零加一递增的。。。
回复 #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
不晓得能否利用到这一点 我比较不幸,outerhtml也没有关联!幸好上头没要求必须要这样实现。sdlkfj5
即然这样,是否可以将outerhtml取出,用正则表达式判断用户名是否在里面,是则选中。
正则表达式我还没得空研究,不过猜想应该能实现这个功能吧。。。
供你参考sdlkfj2 我又有一个思路,名单就是个只有一列的表,把这个表的内容取出来查,这样比较好实现.
还有,把 WebCheckBox 做为 WebElement 的 ChildItem去操作,似乎可以解决两者关联问题.
不过,这里要设计到VB Script循环语句, ChildItem, 循环次数的设定……
待我研究下----真给逼上梁山了 吼吼!!!问题解决了!!!
row = Browser("AA").Window("AA-Web").Page("AB").WebTable("ALL").RowCount
For i=1 to row -1
IfBrowser("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 编辑 ] 恭喜恭喜,也借来用用sdlkfj6 如何对" sheila.shi "参数化?我又搞不定了。原来都是在keyword view里操作,现在不行了
help!!!! 问题又解决一项!!参数化就用这句:
IfBrowser("AA").Window("AA-Web").Page("AB").WebTable("ALL").GetCellData(i, 1) = DataTable("ConfCall_All", dtLocalSheet) Then
踏破铁鞋无觅处,得来全不费工夫。原来就这么简单地替换以下就搞定!!嘻嘻嘻嘻 其实不用那么麻烦的找关联关系,不用钻牛角尖,想一个通用直观有效的方法,就是根据坐标来定位某个对象相应的WebCheckbox
吐血大奉献,写了一个通用函数,可以一劳永逸的解决类似问题,适合各种情况'================================================================
' FUNCTION NAME:
' FindCheckBox
' FUNCTION DESCRIPTION:
' Find the corresponding webcheckbox of title object in parent object, and output the webcheck
' FUNCTION USAGE:
' Set parentObject = Browser("ATS Login").Page("ATS Login").Frame("mainRight")
' Set titleObject = Browser("ATS Login").Page("ATS Login").Frame("mainRight").Link("test")
' ret = FindCheckBox(parentObject, titleObject, checkBoxObject)
' checkBoxObject.Set "ON"
' FUNCTION PARAMETER
' ParentObject: The parent object of title object and webcheckbox object
' TitleObject: The title object
' CheckBoxObject: Output the corresponding webcheckbox object of title object
' FUNCTION RETURN:
' 0: Success to find and output the corresponding webcheckbox object of title object
' -1: Fail to find the corresponding webcheckbox object of title object
' FUNCTION ORIGINAL CREATOR:
' yabest
' FUNCTION CREATION DATE:
' 2007-08-30
' FUNCTION UPDATE HISTORY:
'===============================================================
Function FindCheckBox(ByVal ParentObject, ByVal TitleObject, ByRef CheckBoxObject)
Dim titleObjectY1, titleObjectY2, curChildObjectMidY
Dim checkBoxDesc, childObjects
Dim childNum, childIndex, findIndex
'Get the title object's top/bottom y position
titleObjectY1 = CInt(TitleObject.GetROProperty("abs_y"))
titleObjectY2 = CInt(TitleObject.GetROProperty("abs_y")) +CInt(TitleObject.GetROProperty("height"))
'get all webcheckbox objects
Set checkBoxDesc = Description.Create()
checkBoxDesc("micclass").Value = "WebCheckBox"
Set childObjects = ParentObject.ChildObjects(checkBoxDesc)
'search the webcheckbox according y position.
childNum = childObjects.Count
findIndex = -1
For childIndex = 0 to childNum-1
Set curChildObject = childObjects(childIndex)
curChildObjectMidY = CInt(curChildObject.GetROProperty("abs_y")) + CInt(curChildObject.GetROProperty("height"))/2
'the webcheckbox should be: (y+height/2) in area
If curChildObjectMidY>=titleObjectY1 andcurChildObjectMidY<= titleObjectY2 Then
findIndex = childIndex
Exit For
End If
Next
'if not found, return fail
If findIndex = -1 Then
FindCheckBox = -1
Exit Function
End If
'if found, return success
Set CheckBoxObject = curChildObject
FindCheckBox = 0
End Function
[ 本帖最后由 yabest 于 2007-8-31 15:35 编辑 ]