51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 5662|回复: 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空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2011-2-14 14:55:17 | 只看该作者
我觉的没问题
回复 支持 反对

使用道具 举报

该用户从未签到

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

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

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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()
就报错了...
回复 支持 反对

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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~~
回复 支持 反对

使用道具 举报

该用户从未签到

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

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

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

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

  • 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的情况为啥看到的是空的
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    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]测试团长

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

    使用道具 举报

    该用户从未签到

    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]测试团长

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


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

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

    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)”还是碰到了类似的报错问题:未指定的错误

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

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-23 15:05 , Processed in 0.078105 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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