51Testing软件测试论坛

标题: QTP选择多个复选框 [打印本页]

作者: tommy_sun    时间: 2010-4-13 17:05
标题: QTP选择多个复选框
就拿“中国竞彩网-足球-过关奖金页面”来说,那么多复选框,怎么才能点到我想选的?而且录脚本的时候根本记录不到Webtable。拜请高手指点!如果有些代码给我研究也好,感激不尽!!!
按位置或按数量勾选复选框已经有高手指点过了,可是碰到内容不断更新变化的网页,这种方法就不行了,烦请坛内高手不吝赐教。(如果举例说明更加感谢!)

问题已解决

解决方法:脚本先抓取Webelement如“周二001”的属性,然后做个判断与我的预期值做比较,再根据判断结果来勾复选框。

[ 本帖最后由 tommy_sun 于 2010-4-21 10:34 编辑 ]
作者: TIB    时间: 2010-4-14 11:36
录制不到WebTable不等于识别不出WebTable,可以在对象库中自己添加进去

或者用描述性编程在脚本中直接描述出来

下面是一个使用DP的例子(把页面中所有WebCheckBox都勾选上):
Dim oWebChkDesc
Set oWebChkDesc = Description.Create
oWebChkDesc("micclass").value = "WebCheckBox"
oWebChkDesc("html tag").Value = "INPUT"

' 获取所有匹配描述的对象
Dim allCheck, oCheckBox
Set allCheck = Browser("Web Tours").Page("Web Tours").ChildObjects(oWebChkDesc)
For i = 0 to allCheck.Count - 1
       Set oCheckBox = allCheck(i)
       oCheckBox.Set "ON"
Next
作者: shotstar    时间: 2010-4-14 13:29
LS已经给出勾选所有复选框的方法来了。如果你要勾选特定的几个,可以在LS代码的循环里做判断去进一步区分。
作者: tommy_sun    时间: 2010-4-14 15:29
标题: 回复 2# 的帖子
哈哈,真好,太感谢了!
我先研究下代码。
作者: tommy_sun    时间: 2010-4-14 16:17
标题: 回复 2# 的帖子
我试过了,很好。
但是,这样勾复选框是按数目勾选的或者说按位置勾选的,那如果复选框的位置发生变化,勾选的结果会和我预期的不一样。我还是拿“中国竞彩网-足球-过关奖金页面”做的实验,查看了几个Checkbox的属性,它们的区别只是位置上的区别,第一行的第一个就是m001001第二个m001002,第二行第一个是m002001....我打算用前面的赛事编号(如:周四001)来确定勾选哪些复选框,再请高手指点一下。
作者: TIB    时间: 2010-4-14 21:51
看看每个WebCheckBox的name属性是否有区别
作者: tommy_sun    时间: 2010-4-15 09:03
标题: 回复 6# 的帖子
name属性都一样,都是空。现在的第一行赛事编号已经变了,可是复选框没变,第一行第一个复选框还是m001001,我再按位置去勾的话,那肯定是错的。
作者: TIB    时间: 2010-4-15 09:09
从DOM入手看看吧,研究一下赛事编号与webcheckbox之间的结构关系
作者: TIB    时间: 2010-4-15 09:15
看了一下竞彩网,那个是一个WebTable对象,包含了WebCheckbox,所以其实只要通过WebTable访问单元格就可以了

可以自己在对象库中把WebTable对象加进去
作者: tommy_sun    时间: 2010-4-15 11:44
标题: 回复 9# 的帖子
谢谢!
上午一直忙,有时间了我试下。再次感谢你多次指点!
作者: gold_85    时间: 2010-4-16 16:49
Set NewObject = Description.Create
        NewObject("micclass").value ="WebCheckBox"
        NewObject("html tag").value="INPUT"
        NewObject("type").value = "checkbox"

        Set NewObjects = Browser("计算器中国竞彩网").Page("计算器中国竞彩网").ChildObjects(NewObject)
        Numbers = NewObjects.Count
        
        For i = 0 to NewObjects.count - 1
                NewObjects(i).Set "ON"
        Next


这样就可以了,但是最多可以让你选择6组,所以你要判断一下..
作者: tommy_sun    时间: 2010-4-20 08:53
标题: 回复 11# 的帖子
谢谢!
但其实这个和 TIB 2楼提供的方法是一样的,那么一旦在中间删除一行或增加一行,单元格的数量就会有变化,想要选中我的预期值就得修改脚本。
作者: wugecat    时间: 2010-4-20 09:30
LZ,页面太复杂了,不如搞一个简单的.回头你再拿复杂的练手
作者: tommy_sun    时间: 2010-4-21 10:32
标题: 问题已解决
谢谢各位!
解决方法:脚本先抓取Webelement如“周二001”的属性,然后做个判断与我的预期值做比较,再根据判断结果来勾复选框。
作者: 白发三千    时间: 2010-4-21 23:53
Set allCheck = Browser("Web Tours").Page("Web Tours").ChildObjects(oWebChkDesc) ??
描述性编程具有后续强迫性,前面采用描述性编程,后面也要用,上面这句应该会报错,应该采用描述性编程来写.
Set allCheck = Browser("title:=Web Tours").Page("title:=Web Tours").ChildObjects(oWebChkDesc)
作者: TIB    时间: 2010-4-22 09:48
原帖由 白发三千 于 2010-4-21 23:53 发表
Set allCheck = Browser("Web Tours").Page("Web Tours").ChildObjects(oWebChkDesc) ??
描述性编程具有后续强迫性,前面采用描述性编程,后面也要用,上面这句应该会报错,应该采用描述性编程来写.
Set allCheck = Br ...


不对吧,请试验证过了再说




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