51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3521|回复: 18
打印 上一主题 下一主题

[原创] 已知网页表的单元格的行号和列号,QTP可以点击这个单元格里的连接吗?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-6-12 18:31:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
已知网页表的单元格的行号和列号,QTP可以点击这个单元格里的连接吗?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2008-6-12 20:06:45 | 只看该作者
当然可以~
通过WebTable的ChildItem方法可以获得单元格中的对象,然后去Click就行了,例如
Set myLink = Browser().Page().WebTable().ChildItem(<row>,<column>,"Link",0)
myLink.Click
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2008-6-12 20:26:53 | 只看该作者
谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2008-6-13 17:21:28 | 只看该作者
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 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2008-6-13 17:24:45 | 只看该作者
我想点击第一列,单元格里的加号。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2008-6-13 18:01:28 | 只看该作者
QTP 不是已经明确告诉你哪里错了么。。。
"错误的参数个数或无效的参数属性值"
打开帮助查看下ChildItem,就知道怎么错了~~而且我在2楼给你的例子不也给了你提示了么,ChildItem是有4个必填的参数的~
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2008-6-13 18:21:28 | 只看该作者
我改成oLink=Browser("登录服务器").Page("华普财务分析系统").Frame("Frame").WebTable("公司").ChildItem(i1,1,"Image",0)

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

提示:对象变量未设置: 'oLink'
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2008-6-13 18:38:23 | 只看该作者
Browser("登录服务器").Page("华普财务分析系统").Frame("Frame").WebTable("公司").ChildItem(i1,1,"Image",0) 这个在DEBUG VIEW里面可以看到是个OBJECT

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

[ 本帖最后由 FLY000 于 2008-6-13 18:42 编辑 ]

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2008-6-13 20:38:19 | 只看该作者
知道问题在哪里了,取的是公司这个单元格,而这个单元格没有加号,所以取不到oLink对象不存在。但是我不知道怎么处理,如果不存在这个加号,就跳过这一行,也就是要给出个判断。

[ 本帖最后由 FLY000 于 2008-6-13 20:41 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2008-6-13 20:53:21 | 只看该作者
原帖由 FLY000 于 2008-6-13 18:21 发表
我改成oLink=Browser("登录服务器").Page("华普财务分析系统").Frame("Frame").WebTable("公司").ChildItem(i1,1,"Image",0)

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


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

把这段定义全删掉就好了~
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2008-6-13 20:57:53 | 只看该作者
再次感谢你
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2008-6-13 21:01:56 | 只看该作者
但是我是要让程序当单元格里的加号不存在,就跳过这一行,也就是当取不到加号时,要给出个判断。如果有加号就点击加号。
我不知道怎么处理。

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 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2008-6-13 21:24:21 | 只看该作者
想到了,可以取出单元格的所有对象,再判断是否有Image
回复 支持 反对

使用道具 举报

该用户从未签到

14#
 楼主| 发表于 2008-6-13 21:48:17 | 只看该作者
这样也不行。
----------------------------------------
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 编辑 ]

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

该用户从未签到

15#
 楼主| 发表于 2008-6-14 09:41:08 | 只看该作者
我把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会报错。
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2008-6-14 10:49:22 | 只看该作者
提示
1、 14楼的代码中有非常明显的粗心犯的错,建议你在代码最顶上加上Option Explicit,然后所有变量都先定义后使用。

2、 判断是否有+号图片存在,常规方法是检查点了,但考虑到同一常用的图片,其src值往往都是一样的,所以你只需要在取到Image对象后判断其src属性的值就行了。当然,被测程序中没有+号的时候有其它图片代替时这样做,若无其它对象那么你就要多加个判断,判断取到的对象是否为空。
回复 支持 反对

使用道具 举报

该用户从未签到

17#
 楼主| 发表于 2008-6-14 12:20:01 | 只看该作者
问题解决了,用这样一句就可以了。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
回复 支持 反对

使用道具 举报

该用户从未签到

18#
 楼主| 发表于 2008-6-14 12:20:27 | 只看该作者
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))---这一句又是正常的
回复 支持 反对

使用道具 举报

该用户从未签到

19#
发表于 2008-6-14 14:42:02 | 只看该作者

回复 18# 的帖子

QTP这里提示的很正确。。。
不是跟你说了么,加了Option Explicit之后,所有的变量都需要先定义再使用,你的tData本来就没有定义,而只定义了nData,那当然要提示你tData没定义了~
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-9-23 22:27 , Processed in 0.094393 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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