51Testing软件测试论坛

标题: 已知网页表的单元格的行号和列号,QTP可以点击这个单元格里的连接吗? [打印本页]

作者: FLY000    时间: 2008-6-12 18:31
标题: 已知网页表的单元格的行号和列号,QTP可以点击这个单元格里的连接吗?
已知网页表的单元格的行号和列号,QTP可以点击这个单元格里的连接吗?
作者: hsjzfling    时间: 2008-6-12 20:06
当然可以~
通过WebTable的ChildItem方法可以获得单元格中的对象,然后去Click就行了,例如
Set myLink = Browser().Page().WebTable().ChildItem(<row>,<column>,"Link",0)
myLink.Click
作者: FLY000    时间: 2008-6-12 20:26
谢谢
作者: FLY000    时间: 2008-6-13 17:21
For i1=1 to nRow1
        oLink=Browser("登录服务器").Page("华普财务分析系统").Frame("Frame").WebTable("公司").ChildItem(i1,1,"Image")
        oLink.Click'下面要插入计算等待时间
        wait(4)
        endBox=Browser("登录服务器").Page("华普财务分析系统").WebTable("已经钻到最下级,无法继续钻取。").Exist
        If endBox=false Then
                nRow2=Browser("登录服务器").Page("华普财务分析系统").Frame("Frame").WebTable("公司").RowCount
                lnNum=nRow2-nRow1
                Call CheckSum(i1,lnNum)
                nRow1=nRow2
        End If
Next

这一句取不到oLink对象,提示:错误的参数个数或无效的参数属性值: 'Browser(...).Page(...).Frame(...).WebTable(...).ChildItem'

哪里错了啊?

[ 本帖最后由 FLY000 于 2008-6-13 17:22 编辑 ]
作者: FLY000    时间: 2008-6-13 17:24
我想点击第一列,单元格里的加号。
作者: hsjzfling    时间: 2008-6-13 18:01
QTP 不是已经明确告诉你哪里错了么。。。
"错误的参数个数或无效的参数属性值"
打开帮助查看下ChildItem,就知道怎么错了~~而且我在2楼给你的例子不也给了你提示了么,ChildItem是有4个必填的参数的~
作者: FLY000    时间: 2008-6-13 18:21
我改成oLink=Browser("登录服务器").Page("华普财务分析系统").Frame("Frame").WebTable("公司").ChildItem(i1,1,"Image",0)

并且在前面加了定义:
oLink=Description.Create()
oLink("Class").Value="Image"
oLink("Index").Value=0

提示:对象变量未设置: 'oLink'
作者: FLY000    时间: 2008-6-13 18:38
Browser("登录服务器").Page("华普财务分析系统").Frame("Frame").WebTable("公司").ChildItem(i1,1,"Image",0) 这个在DEBUG VIEW里面可以看到是个OBJECT

所以我觉得是不是前面OLINK定义错了?不知道该怎么定义。

[ 本帖最后由 FLY000 于 2008-6-13 18:42 编辑 ]
作者: FLY000    时间: 2008-6-13 20:38
知道问题在哪里了,取的是公司这个单元格,而这个单元格没有加号,所以取不到oLink对象不存在。但是我不知道怎么处理,如果不存在这个加号,就跳过这一行,也就是要给出个判断。

[ 本帖最后由 FLY000 于 2008-6-13 20:41 编辑 ]
作者: hsjzfling    时间: 2008-6-13 20:53
原帖由 FLY000 于 2008-6-13 18:21 发表
我改成oLink=Browser("登录服务器").Page("华普财务分析系统").Frame("Frame").WebTable("公司").ChildItem(i1,1,"Image",0)

并且在前面加了定义:
oLink=Description.Create()
oLink("Class").Value="Image"
...


倒。。。画蛇添足了。。。

把这段定义全删掉就好了~
作者: FLY000    时间: 2008-6-13 20:57
再次感谢你
作者: FLY000    时间: 2008-6-13 21:01
但是我是要让程序当单元格里的加号不存在,就跳过这一行,也就是当取不到加号时,要给出个判断。如果有加号就点击加号。
我不知道怎么处理。

For i1=1 to nRow1
        Set oLink=Browser("登录服务器").Page("华普财务分析系统").Frame("Frame").WebTable("公司").ChildItem(i1,1,"Image",0)
        If oLink.exist=true Then  (这里会报错)
                oLink.Click

[ 本帖最后由 FLY000 于 2008-6-13 21:04 编辑 ]
作者: FLY000    时间: 2008-6-13 21:24
想到了,可以取出单元格的所有对象,再判断是否有Image
作者: FLY000    时间: 2008-6-13 21:48
这样也不行。
----------------------------------------
Set oDesc=Description.Create()
oDesc("micClass").Value="Image"

For i1=1 to nRow1
        objs=Browser("登录服务器").Page("华普财务分析系统").Frame("Frame").WebTable("公司").ChildObjects(oDesc)---运行到这句报错(General run error)
        NumObjs=objs.count()
        For i=1 to NumObjs-1
                If obj(i).GetRoProperty("class")=Image Then

[ 本帖最后由 FLY000 于 2008-6-13 21:56 编辑 ]
作者: FLY000    时间: 2008-6-14 09:41
我把INDEX参数加上去了,oLink=Browser("登录服务器").Page("华普财务分析系统").Frame("Frame").WebTable("公司").ChildItem(i1,1,"Image",0)
如果单元格有加号,是可以取到加号对象,并且oLink.Click也可以点击这个加号。

但是问题是有的单元格没有加号时,oLink=Browser("登录服务器").Page("华普财务分析系统").Frame("Frame").WebTable("公司").ChildItem(i1,1,"Image",0) 在debug view里可以看到,这句取出来也是个object。但是运行到oLink.Click这句时就会报错:对象变量未设置: 'oLink'。 我怀疑是取出的oLink是个空对象,所以oLink.Click就会出错。

我要实现的问题是:遍历第一列所有行。如果单元格有加号,就点击这个单元格的加号,否则,取看下一行单元格是否有加号,有就点加号,没有就继续取下一行。
我现在不知道怎么判断oLink是否是加号,因为就算单元格没有加号,取出来也是个object,但Click会报错。
作者: hsjzfling    时间: 2008-6-14 10:49
提示
1、 14楼的代码中有非常明显的粗心犯的错,建议你在代码最顶上加上Option Explicit,然后所有变量都先定义后使用。

2、 判断是否有+号图片存在,常规方法是检查点了,但考虑到同一常用的图片,其src值往往都是一样的,所以你只需要在取到Image对象后判断其src属性的值就行了。当然,被测程序中没有+号的时候有其它图片代替时这样做,若无其它对象那么你就要多加个判断,判断取到的对象是否为空。
作者: FLY000    时间: 2008-6-14 12:20
问题解决了,用这样一句就可以了。If not oLink is nothing Then

For i1=1 to nRow1
        Set oLink=Browser("登录服务器").Page("华普财务分析系统").Frame("Frame").WebTable("公司").ChildItem(i1,1,"Image",0)
        If not oLink is nothing Then
                oLink.Click
           '下面要插入计算等待时间
                wait(2)
'                endBox=Browser("登录服务器").Page("华普财务分析系统").WebTable("已经钻到最下级,无法继续钻取。").Visible
'                If endBox=false Then
                        nRow2=Browser("登录服务器").Page("华普财务分析系统").Frame("Frame").WebTable("公司").RowCount
                        lnNum=nRow2-nRow1
                        CheckSum i1,lnNum1,nColumn1
                        nRow1=nRow2
'                End If
        End If
Next
作者: FLY000    时间: 2008-6-14 12:20
QTP似乎有毛病
Function CheckSum(i,lnNum,nColumn)
'   Dim j
'   Dim nData
'   Dim nSum
'   Dim cellData
   Dim nSum
       
   For j=3 to nColumn
           nSum=0
           nSum=cdbl(nSum)
           nData=cdbl(Browser("登录服务器").Page("华普财务分析系统").Frame("Frame").WebTable("公司").GetCellData(i,j))
           For i=i+1 to i+lnNum
                   tData=cdbl(Browser("登录服务器").Page("华普财务分析系统").Frame("Frame").WebTable("公司").GetCellData(i,j))
                   nSum=nSum+tData
           Next
           If nSum<>nData Then
                   msgbox("第"+i+"行公司钻取的下级合计值不对")'要写入text文件
           End If
   Next
End Function

tData=cdbl(Browser("登录服务器").Page("华普财务分析系统").Frame("Frame").WebTable("公司").GetCellData(i,j))---DEBUG VIEW里面可以看到cdbl(Browser("登录服务器").Page("华普财务分析系统").Frame("Frame").WebTable("公司").GetCellData(i,j))取出了值
但是tData却提示未定义变量

nData=cdbl(Browser("登录服务器").Page("华普财务分析系统").Frame("Frame").WebTable("公司").GetCellData(i,j))---这一句又是正常的
作者: hsjzfling    时间: 2008-6-14 14:42
标题: 回复 18# 的帖子
QTP这里提示的很正确。。。
不是跟你说了么,加了Option Explicit之后,所有的变量都需要先定义再使用,你的tData本来就没有定义,而只定义了nData,那当然要提示你tData没定义了~




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