51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 5660|回复: 20
打印 上一主题 下一主题

[原创] GetCellData(I,J)函数的问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2011-2-14 10:05:29 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 lilinuo_2011 于 2011-2-14 14:45 编辑

最近一直有一个问题困扰着我,以下是用qtp进行自动化测试时碰到的一个问题:

Browser("TCC Control").Page("TCC Control").WebList("userName").Select "ADMIN"
Browser("TCC Control").Page("TCC Control").WebEdit("password").SetSecure "4d54dd6a5e4979de98068a8fee420eb0936a"
Browser("TCC Control").Page("TCC Control").WebButton("登  录").Click
Browser("TCC Control_2").Dialog("Windows Internet Explorer").WinButton("是(Y)").Click
Browser("TCC Control").Page("TccBus System  Esb").Frame("menuFrame").Link("方法访问日志管理").Click
Browser("TCC Control").Page("TccBus System  Esb").Frame("bodyFrame").WebEdit("startTime").Set "2011-01-04 00:00:00"
Browser("TCC Control").Page("TccBus System  Esb").Frame("bodyFrame").WebEdit("endTime").Set "2011-01-26 00:00:00"
Browser("TCC Control").Page("TccBus System  Esb").Frame("bodyFrame").WebButton("查询").Click

Set obj = Browser("TCC Control").Page("TccBus System  Esb").Frame("query_frame").WebTable("WebTable")
'获取表格的行数
RowCount =obj.RowCount

For I = 2 To RowCount
For J = 1 To obj.ColumnCount(I)
    Dim ExampleName
    '获取表格中的某个单元格的数据
    ExampleName = obj.GetCellData(I,J)
    Msgbox ExampleName
Next
Next

Browser("TCC Control").Page("TccBus System  Esb").Sync
Browser("TCC Control").Close
Browser("TCC Control").Dialog("Windows Internet Explorer").WinButton("确定").Click

但是问题是:“方法访问日志管理”界面的表格,qtp的函数GetCellData(I,J)
会报出“未指定的错误”,代码本身应该并没有问题并没有问题…
但不清楚怎么解决,前提是GetCellData(I,J)的I和J都是没有问题的,obj.RowCount和obj.ColumnCount(I)取得也都没有问题......我都开始怀疑是否是QTP本身的一个BUG,目前使用的QTP版本是9.2,操作系统使用的是Microsoft Windows XP Professional 版本 2002 Service Pack 3 ,ie版本:7.0.5730.13......



这个问题初步判断是和开发写得界面有关,想问一下碰到如此复杂的界面如何使用脚本进行自动化测试,遍历表格中的所有数据,因为用目前的方式看来读取是有困难的...

本帖子中包含更多资源

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

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

使用道具 举报

该用户从未签到

21#
发表于 2011-2-15 21:55:34 | 只看该作者
spy为空你看看是不是QTP问题...啥版本qtp啊-.-!要不要打补丁....
回复 支持 反对

使用道具 举报

该用户从未签到

20#
发表于 2011-2-15 19:55:56 | 只看该作者
楼主,最好是,将页面,放上来,这样大家可以帮你看看源代码。
一张图片说明不了什么问题,
回复 支持 反对

使用道具 举报

该用户从未签到

19#
发表于 2011-2-15 19:48:56 | 只看该作者
1楼主真是的,干嘛纠结于webtable,
spy下,单元格,看看对象层次结构是什么?
2再有,就是新建个对象库,将webtalbe加入,然后看属性是什么? 都有那些属性。
有的时候,spy的时候,属性不全,这样可以看都有那些属性,
3假如,没有属性,那么 看看单元格的层次结构,然后描述编程,找到该对象,取值,不久ok了?
继续交流!
回复 支持 反对

使用道具 举报

该用户从未签到

18#
 楼主| 发表于 2011-2-15 16:03:17 | 只看该作者
我让开发发生类似问题的另一个界面中在table标签中加入id属性后,因为该界面改动更为简单,然后仍然没有解决类似问题...
Browser("TCC Control").Page("TCC Control").WebList("userName").Select "ADMIN"
Browser("TCC Control").Page("TCC Control").WebEdit("password").SetSecure "4d5a2ba03734c17e19ff325597acb45621e6"
Browser("TCC Control").Page("TCC Control").WebButton("登  录").Click
Browser("TCC Control_2").Dialog("Windows Internet Explorer").WinButton("是(Y)").Click
Browser("TCC Control").Page("TccBus System  Esb").Frame("menuFrame").Image("展开/折叠").Click
Browser("TCC Control").Page("TccBus System  Esb").Frame("menuFrame").Link("运行情况").Click
Browser("TCC Control").Page("TccBus System  Esb").Frame("bodyFrame").Link("更多......").Click

Set obj = Browser("TCC Control").Page("TccBus System  Esb").Frame("bodyFrame_2").WebTable("html id:=_table3")
'获取表格的行数
RowCount =obj.RowCount
For I = 2 To RowCount
        For J = 1 To obj.ColumnCount(I)
    '获取表格中的某个单元格的数据
    ExampleName = obj.GetCellData(5,5)
        msgbox  ExampleName
        Next
Next

Browser("TCC Control").Page("TccBus System  Esb").Frame("bodyFrame_2").Link("下页").Click
Browser("TCC Control").Page("TccBus System  Esb").Sync
Browser("TCC Control").Close
Browser("TCC Control").Dialog("Windows Internet Explorer").WinButton("确定").Click

在“ExampleName = obj.GetCellData(5,5)”还是碰到了类似的报错问题:未指定的错误

真不知道怎么去解决这个问题...
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2011-2-15 15:38:11 | 只看该作者
index是不能用GetROProperty("index") 来获取的。
另外,你那边为什么表的properties和methods都是空这才是问题所在。properties为空,就导致了用描述性编程来识别的那张表时的失败。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    慵懒
    2019-4-10 17:57
  • 签到天数: 35 天

    连续签到: 1 天

    [LV.5]测试团长

    16#
    发表于 2011-2-15 15:32:59 | 只看该作者
    回复 15# lilinuo_2011


    index属性是不能用GetROProperty来输出的
    LZ要么用for循环把webtable("html tag:=TABLE","index:="&i)一个个输出试试
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
     楼主| 发表于 2011-2-15 15:20:29 | 只看该作者
    Set obj = Browser("TCC Control").Page("TccBus System  Esb").Frame("query_frame").WebTable("WebTable")
    index = obj.GetROProperty("index")
    msgbox index

    .....

    Dim ExampleName
    Set objReal = Browser("TCC Control").Page("TccBus System  Esb").Frame("query_frame").WebTable("index:=" & index)
    For I = 2 To RowCount
        For J = 1 To obj.ColumnCount(I)
            '获取表格中的某个单元格的数据
         ExampleName = objReal.GetCellData(I,J)
            Msgbox ExampleName
        Next
    Next

    是无效的,msgbox index
    输出的是空...我怀疑用index是否有效...我连x/y都尝试过了,也无效,x=0,y=0
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-4-10 17:57
  • 签到天数: 35 天

    连续签到: 1 天

    [LV.5]测试团长

    14#
    发表于 2011-2-15 14:33:02 | 只看该作者
    LZ还是需添加index来识别吧
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
     楼主| 发表于 2011-2-15 14:15:39 | 只看该作者
    Set obj = Browser("TCC Control").Page("TccBus System  Esb").Frame("query_frame").WebTable("WebTable")
    micclass = obj.GetROProperty("micclass")
    text = obj.GetROProperty("text")
    ....
    Dim ExampleName
    Set objReal = Browser("TCC Control").Page("TccBus System  Esb").Frame("query_frame").WebTable("micclass:="&micclass,"text:="&text)
    For I = 2 To objReal.RowCount
            For J = 1 To objReal.ColumnCount(I)
        '获取表格中的某个单元格的数据
        ExampleName = objReal.GetCellData(I,J)

            Msgbox ExampleName
    NEXT
    NEXT

    结果在For I = 2 To objReal.RowCount
    报出如下的错误:
    Cannot identify the object "[ WebTable ]" (of class WebTable). Verify that this object's properties match an object currently displayed in your application.
    Line (59): "For I = 2 To objReal.RowCount".
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-4-10 17:57
  • 签到天数: 35 天

    连续签到: 1 天

    [LV.5]测试团长

    12#
    发表于 2011-2-15 13:56:22 | 只看该作者
    我找了个我这边的环境试了下, 这么写可以输出表格上的value的, 代码如下:
    Set obj1= Browser("CreationTime:=0").Page(":=").Frame("name:=businessfrm").WebTable("html tag:=TABLE", "Index:=1")
    For i=2 to obj1.RowCount
            For j=1 to obj1.ColumnCount(i)
                    aaa=obj1.GetCellData(i,j)
                    msgbox "aaa="&aaa
            Next
    Next
    不过spy看的时候property和methods都有的, 不知LZ的情况为啥看到的是空的
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
    发表于 2011-2-15 13:20:29 | 只看该作者
    你为啥非要用html tag这个属性?micclass加上text不能定位么?
    webtable("html tag").Value = "TABLE",但是一碰到
    webtable("html tag").Value = "TABLE"
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2011-2-15 12:40:43 | 只看该作者
    Object Spy定位到你要的那张表,properties和methods都是空?截个图看看.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
     楼主| 发表于 2011-2-15 11:58:20 | 只看该作者
    本帖最后由 lilinuo_2011 于 2011-2-15 13:31 编辑

    还有一点,大家都知道,我们平时需要查看对象的封装属性可以打开qtp的spy,然后选择我们需要查看的对象,SPY中即会显示出此对象的属性。

    但是我要getcelldata的这个表格,我用spy去获取时properties和methods都是空,是不是这个也会造成qtp在识别对象时的问题?????

    本帖子中包含更多资源

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

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
     楼主| 发表于 2011-2-15 11:42:01 | 只看该作者
    Set obj = Browser("TCC Control").Page("TccBus System  Esb").Frame("query_frame").WebTable("WebTable")
    index = obj.GetROProperty("source_index")
    msgbox index

    .....

    Dim ExampleName
    Set objReal = Browser("TCC Control").Page("TccBus System  Esb").Frame("query_frame").WebTable("source_index:=" & index)
    For I = 2 To RowCount
        For J = 1 To obj.ColumnCount(I)
            '获取表格中的某个单元格的数据
         ExampleName = objReal.GetCellData(I,J)
            Msgbox ExampleName
        Next
    Next

    也会在ExampleName = objReal.GetCellData(I,J)
    处报出“未指定的错误”,msgbox index
    输出的是5~~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
     楼主| 发表于 2011-2-15 11:20:36 | 只看该作者
    具体失败的代码如下:
    Dim oWebTableDesc
    Set oWebTableDesc = Description.Create()
    oWebTableDesc("html tag").value = "TABLE"
    Set oTableList = Browser("TCC Control").Page("TccBus System  Esb").Frame("query_frame").ChildObjects(oWebTableDesc)
    for i=0 to oTableList.Count()-1
       print oTRAndTDList (i).GetROProperty("html tag")
    Next
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
     楼主| 发表于 2011-2-15 11:07:34 | 只看该作者
    但是,有一点,我仍然比较困惑的是既然
    RowCount和obj.ColumnCount(I)都能取正确,说明这个obj是识别正常的,但是为什么到它要用到getcelldata()函数的时候却发生了问题??
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
     楼主| 发表于 2011-2-15 10:52:21 | 只看该作者
    确实是在取第一个值时报错的...

    这个问题初步判断是由于网页中存在多个table,而且每个table标签的属性相仿,qtp在识别的时候识别到第一个table后找不到我所要的cell单元的原因造成的...
    问题现在就变成了在不更改开发代码的情况下如何在多层table存在的界面中使用getcelldata()获得我所想要的数据?因为用描述性编程貌似也是会找到多个对象的...

    本来想通过
    set webtable= Description.Create()
    webtable("html tag").Value = "TABLE",但是一碰到
    webtable("html tag").Value = "TABLE"
    就一直报出:General run error的错误
    然后想用
    NUM = Browser("TCC Control").Page("TccBus System  Esb").Frame("query_frame").ChildObjects().Count()
    for i = 1 to num
       .....
    next

    来定位我想要的那个table,但是到
    NUM = Browser("TCC Control").Page("TccBus System  Esb").Frame("query_frame").ChildObjects().Count()
    就报错了...
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
    发表于 2011-2-14 21:05:32 | 只看该作者
    dim 干嘛在循环里边呢? 移到外边,还有 出错是 i j 值是多少?
    是不是 在取第一个值的时候 就报错了?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
    发表于 2011-2-14 16:52:48 | 只看该作者
    不只是一层webtable吧
    GetCellData的参数能不能输入4个坐标来定位?我忘了。。

    或者用其他方法获取吧,spy找到这些值的公共属性后用 index来定位
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-23 11:12 , Processed in 0.092696 second(s), 29 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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