51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2713|回复: 13
打印 上一主题 下一主题

[求助] webtable嵌套的字段取值问题,参考前贴无助后发起

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-7-16 21:47:27 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
各位同仁,最近在工作要用到qtp,遇到对webtable的字段检查的问题,比较困惑,希望能坛子里找到解决的办法,多多指点。

这是在frame下的webtable,如图所示
希望得到"已加载"的字段来作检查。

用 Object Spy 学习此字段为frame.webtable.webtable.webtable.webelement,
当然spy成webelement是没办法的,但可以看出3个表的嵌套.

代码如下:
Dim i,j,n,m,k,num,obj,webobj,webtbl
Set webtbl=description.Create
webtbl("micclass").value="WebTable"
webtbl("html tag").Value = "TABLE"
set webobj=Browser("Browser").Page("Browser").Frame("设备信息加载").ChildObjects(webtbl)
num=webobj.count
'居然有10个table,后来发现很多空表               
msgbox "tables sum:" &num
For  j=0 To num - 1
        Set obj=webobj(j)
        m=obj.RowCount
        For i=1 to m
                n= obj.ColumnCount (i)
                '统计显示每个table下各有多少的行和列
                msgbox "table:"& j +1 &"rows:" & m &"columns:" & n
                For k = 1 to n
                '显示每个table里每个cell的值
                msgbox "table:"& j +1 & "row:"& i &"column:" & k &"cell:"& obj.GetCellData (i,k)
                Next
        Next
Next

'发现想要的值在第7个webtable里,但是只有一行一列,也就是说把整个字段标记为了一个cell.
也就是图中红色框中字符连成成串为cell的值,checkbox为一个空格
其他webtable没能找到这样的字段了。
'我在想图中所见的每个格为什么就不是表的一个cell呢?实在不行就只好把整个字段分解得到期望字段了。

其次,spy看到嵌套3个表,就做了下面的尝试
Dim desobj,num,obj,webobj,webtbl
统计webelement个数
Set desobj=description.Create
desobj("micclass").value="WebElement"
desobj("html tag").Value = "TD"
--------------------------
或者统计子表个数
Set desobj=description.Create
desobj("micclass").value="WebElement"
desobj("html tag").Value = "TD"
--------------------------------
Set webtbl=description.Create
webtbl("micclass").value="WebTable"
webtbl("html tag").Value = "TABLE"

'for遍历webtable 的index  ,10个webtable
set webobj=Browser("Browser").Page("Browser").Frame("设备信息加载").WebTable(webtbl).ChildObjects(desobj)
num=webobj.count

'居然无论是用webelement还是子表,每个webtable中num都为空

不知道我所有的操作有什么不妥,我也是才搞几天QTP,还理解不是很深。搜索了相关帖子还是没解决,
现在就是要得到表中的字段,往指点迷津,谢谢。

本帖子中包含更多资源

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

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

使用道具 举报

该用户从未签到

14#
发表于 2009-8-12 14:56:33 | 只看该作者
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2009-8-12 12:25:38 | 只看该作者
感谢 楼上的兄弟帮助 ,我始终没能解决,希望你能把方法或者代码贴上来,让我学习下。谢谢
回复 支持 反对

使用道具 举报

  • TA的每日心情
    无聊
    2015-3-12 14:20
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    12#
    发表于 2009-7-29 16:46:45 | 只看该作者
    用lz给的源代码可以取到webtable的值的啊

    本帖子中包含更多资源

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

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
     楼主| 发表于 2009-7-29 16:33:56 | 只看该作者
    读了嵌套的结构还是有问题,暂时没解决 先用split把工作做走再说,等以后再好生看哈
    谢谢各位帮助
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2009-7-21 11:42:05 | 只看该作者
    下一个debug bar,查看一下页面的表格嵌套结构。然后在你所需要获取table的父对象上使用object属性,去getElementsByTagName
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2009-7-21 10:05:42 | 只看该作者
    msgbox Browser("Browser").Page("age").Object.GetElementsByTagName("td").length

    这个你再加上一层webtable看下,Browser("Browser").Page("age").webtable(***).Object.GetElementsByTagName("td").length
    这个方法我也没有用过,假兄应该多有研究,可以直接找他帮你解决下问题。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
     楼主| 发表于 2009-7-17 18:17:56 | 只看该作者
    代码如下
    <body>
      <style>   
      *{   margin:0;   padding:0;}   
      body{   height:100%;}   
      .dis{   width:100%;     background:   green;   position:absolute;   left:0;   right:0;   top:0;   bottom:0;   -moz-opacity:0.5;   filter:alpha(opacity=50);z-index:98;   height:100%; visibility: hidden  }   
      </style>   
    <div id="tip" style="position:absolute; left:300px; top:250px; width:400px; height:20px; z-index:99; background-color: #94BBDD; layer-background-color: #94BBDD; border: 3px none #000000; visibility: hidden">
    <table width=100% height=100% style="border-collapse:collapse" border=2>
    <tr><td>
    <p align="center">
    <span id=showi></span><br>
    <img name="processbar" src="/images/process.gif" width="400" height="20">
    </p>
    </td></tr></table>
    </div>
    <div id="mydiv" class="dis">
    <iframe id="myiframe" class="dis"></iframe>
    </div>
    <table width="100%" border="0" cellpadding="0" cellspacing="0">
    <tr>
    <td><table width="100%" border="0" cellpadding="0" cellspacing="0">
    <tr>
    <td width="14" class="layoutleft"></td>
    <td width="19" class="layoutdot"></td>
    <td class="layoutbg">设备信息加载</td>
    <td width="14" class="layoutright"></td>
    </tr>
    </table></td>
    </tr>
    <tr>
    <td class="layoutborder">
    <form name="form1" method="post" action="/dev_control/load_info.php">
    <table width="100%" border="0" cellpadding="0" cellspacing="0">
    <tr>
    <td width="40" height="25"> </td>
    <td align="right">名称:
      <input type="text" name="dev_name" maxlength="30" value="">  <input type="submit" name="search" value="搜 索" class="button"></td>
    </tr>
    </table>
    <table width="100%" border="0" cellpadding="1" cellspacing="1">
    <tr>
    <td>
    <table width="100%" border="0" cellpadding="4" cellspacing="1" class="tableborder">
    <tr>
    <td width="5%" rowspan="2" align="center" class="titlebg">选择</td>
    <td width="17%" rowspan="2" align="center" class="titlebg">设备名称</td>
    <td width="8%" rowspan="2" align="center" class="titlebg">是否连通</td>
    <td colspan="7" align="center" class="titlebg">设备状态</td>
    </tr>
    <tr>
      <td align="center" width="10%" class="titlebg">基本密钥</td>
      <td align="center" width="10%" class="titlebg">设备密钥</td>
      <td align="center" width="10%" class="titlebg">网络参数</td>
      <td align="center" width="10%" class="titlebg">安全规则</td>
      <td align="center" width="10%" class="titlebg">防护规则</td>
      <td align="center" width="10%" class="titlebg">路由规则</td>
      <!--<td align="center" width="10%" class="titlebg">组播规则</td>-->
      <td align="center" width="10%" class="titlebg">VLAN规则</td>
    </tr>
    </table></td>
    <td width="14"> </td>
    </tr>
    </table>
    <table width="100%" border="0" cellpadding="1" cellspacing="1">
    <tr>
    <td colspan="10">
    <div id="autoscroll" align="center" valign="top" style="overflow-y:scroll; height:265;width:100%;">
    <table width="100%" border="0" cellpadding="4" cellspacing="1" class="tableborder">
    <tr id="tr_0" class="tdbgred">
    <td width="5%" height="25" align="center">
    <input type="checkbox" name="chkid[]" id="td_0" value="25296918" class="inputbox" > </td>
    <td width="17%" align="center">3-1-200</td>
    <td width="8%" align="center"><font color=green>连通</font></td>
    <td width="10%" align="center"><font color=red>加载失败</font></td>
    <td width="10%" align="center">已加载</td>
    <td width="10%" align="center">已加载</td>
    <td width="10%" align="center">已加载</td>
    <td width="10%" align="center">已加载</td>
    <td width="10%" align="center">已加载</td>
    <!--<td width="10%" align="center"><font color=blue>未加载</font></td>-->
    <td align="center">已加载</td>
    </tr>
    <tr id="tr_1" class="tdbgbai">
    <td width="5%" height="25" align="center">
    <input type="checkbox" name="chkid[]" id="td_1" value="25296919" class="inputbox" > </td>
    <td width="17%" align="center">3-1-201</td>
    <td width="8%" align="center"><font color=green>连通</font></td>
    <td width="10%" align="center"><font color=red>加载失败</font></td>
    <td width="10%" align="center">已加载</td>
    <td width="10%" align="center">已加载</td>
    <td width="10%" align="center">已加载</td>
    <td width="10%" align="center">已加载</td>
    <td width="10%" align="center">已加载</td>
    <!--<td width="10%" align="center"><font color=blue>未加载</font></td>-->
    <td align="center">已加载</td>
    </tr>
    <tr class="tdbgbai">
    <td height="25" width="5%" align="center"> </td>
    <td width="17%" align="center"> </td>
    <td width="8%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <!--<td align="center"> </td>-->
    <td align="center"> </td>
    </tr>
    <tr class="tdbgbai">
    <td height="25" width="5%" align="center"> </td>
    <td width="17%" align="center"> </td>
    <td width="8%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <!--<td align="center"> </td>-->
    <td align="center"> </td>
    </tr>
    <tr class="tdbgbai">
    <td height="25" width="5%" align="center"> </td>
    <td width="17%" align="center"> </td>
    <td width="8%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <!--<td align="center"> </td>-->
    <td align="center"> </td>
    </tr>
    <tr class="tdbgbai">
    <td height="25" width="5%" align="center"> </td>
    <td width="17%" align="center"> </td>
    <td width="8%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <!--<td align="center"> </td>-->
    <td align="center"> </td>
    </tr>
    <tr class="tdbgbai">
    <td height="25" width="5%" align="center"> </td>
    <td width="17%" align="center"> </td>
    <td width="8%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <td width="10%" align="center"> </td>
    <!--<td align="center"> </td>-->
    <td align="center"> </td>
    </tr>
    </table>
    </div></td>
    </tr>
    </table>
    <table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
    <td width="50%" align="left"><input type="checkbox" name="chkall_flag" value="1"   class="inputbox">
    全选
      
    共<span class="fontredb">2</span>台设备
    <!-- 共<span class="fontredb"></span>页 每页显示<span class="fontredb"></span>条 当前为第<span class="fontredb"></span>页 </td>
    <td align="right"> <img src="/images/p2.gif" width="9" height="9"><a href="">上一页</a> <a href="">下一页</a><img src="/images/p3.gif" width="11" height="9"> <img src="/images/p1.gif" width="11" height="9"><a href="">首页</a> <a href="">尾页</a><img src="/images/p4.gif" width="11" height="9"> 跳转到第
    <input name="turn_page" type="text" size="3" value="">
    <input type="submit" name="submit" value="Go" class="buttongo">--></td>
    </tr>
    </table>
    <table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
    <td align="center" height="25" valign="bottom">
    <input type="submit" name="load_basekey" value="加载基本密钥"  class="button1">
    <input type="submit" name="load_key" value="加载设备密钥"  class="button1">
    <input type="submit" name="load_info" value="加载网络参数"  class="button1">
    <input type="submit" name="load_rule" value="加载安全规则"  class="button1">
    <input type="submit" name="load_defend" value="加载防护规则"  class="button1">
    <input type="submit" name="load_route" value="加载路由规则"  class="button1">
    <!--<input type="submit" name="load_broadcast" value="加载组播规则"  class="button1">-->
    <input type="submit" name="load_vlan" value="加载VLAN规则"  class="button1">
    <hr>
    <input type="submit" name="load_all" value="加载所有信息"  class="button1"></td>
    </tr>
    </table>
    </form></td>
    </tr>
    </table>
    </body>
    </html>
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
     楼主| 发表于 2009-7-17 18:16:01 | 只看该作者
    回复 2楼

    根据推荐假兄的文章,用Object.GetElementsByTagName获取字段,count提示对象不支持。
    采用length对其他的列子的页面运行结果一切正常。


    我这个页面的每个期望字段都是在td tag内,于是我也用length运行下面的代码:

    Dim desc_td
    Set desc_td=description.Create()
    desc_td("html tag").value="TD"
    msgbox Browser("Browser").Page("Page").ChildObjects(desc_td).count
    '其结果为7
    msgbox Browser("Browser").Page("Page").Object.GetElementsByTagName("td").length
    '其结果为1

    这样的结果太诡异了,我把源码贴出来,其中有几十个<td><\td>!
    希望大家帮我看哈,谢谢
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
    发表于 2009-7-17 12:38:26 | 只看该作者
    简单实用最好
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2009-7-17 11:54:21 | 只看该作者
    嵌套了那么多层table,呵呵,布局够复杂的。
    我就是天天在跟嵌套的table做斗争,其实想获取某一个字段很简单,用getElementById就可以了。一般检查的字段都是很特殊的,都会有id。
    当然通过getElementsByTag用循环遍历也可以,而且不复杂。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
     楼主| 发表于 2009-7-17 11:20:33 | 只看该作者
    也就是说getElementsByTagName可以把嵌套几层table的element取到咯?我还是先去看哈help,那个最直接。呵呵
    随便说下 这个系统用php做的,
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
     楼主| 发表于 2009-7-17 11:15:41 | 只看该作者
    谢谢  我先去尝试下。 有情况再来请教
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2#
    发表于 2009-7-17 10:08:30 | 只看该作者
    呵呵,你这个是用什么工具语言开发的系统?我是碰到用JAVA开发的系统,也有跟你一样的问题,根本无法通过webtable来操作。于是我绕了个弯路,我先把页面上的元素组织到datatable中,然后再操作datatable就行了。组织的方法跟你相似,也是通过childobjects()方法,不过我成功了,嘿嘿。
    还有个方法,跟你推荐下假兄的文章 http://www.51testing.com/?174770 ... e_itemid_95404.html ,你可以通过getElementsByTagName方法来尝试一下。

    下面是我写的函数,看看有没有参考价值

    Function TechnicianListBuild()
    '构建********,返回TechnicianList的Datatable表
    '****************************
        Set TechRowNum=description.Create()
             TechRowNum("class").value="tableRowCount"
             TechRowNum("html tag").value="TD"
        Set TechRowNumCollection=MainPage.Frame("name:=mainIframe").ChildObjects(TechRowNum)
    '    msgbox TechRowNumCollection.count

    '****************************
        Set TechDetail=Description.Create()
            TechDetail("class").value=""
            TechDetail("html id").value=""
            TechDetail("outerhtml").value="\<TD\>.*\<\/TD\>"
            TechDetail("html tag").value="TD"   
            TechDetail("outerhtml").RegularExpression=True
        Set TechDetailCollection=MainPage.Frame("name:=mainIframe").ChildObjects(TechDetail)
    '    MsgBox TechDetailCollection.count
            If TestDataSet.Exists("TechnicianList") Then
                TestDataSet.Remove("TechnicianList")
                Datatable.DeleteSheet("TechnicianList")
            End If
            Datatable.AddSheet("TechnicianList")       
            Datatable.GetSheet("TechnicianList").AddParameter "序号",""
            Datatable.GetSheet("TechnicianList").AddParameter "编号",""
            Datatable.GetSheet("TechnicianList").AddParameter "姓名",""
            Datatable.GetSheet("TechnicianList").AddParameter "身份证号",""
            Datatable.GetSheet("TechnicianList").AddParameter "籍贯",""
            Datatable.GetSheet("TechnicianList").AddParameter "联系电话",""
           
    '****************************
            For i= 0 to TechDetailCollection.count
                    If  TechDetailCollection.item(i).Getroproperty("innertext")<>"" and i>0 Then
                      techDetailStarNo=i
                              Exit for
                    End If
        Next
            For i=1 To TechRowNumCollection.Count
                Datatable.GetSheet("TechnicianList").SetCurrentRow(i)
                Datatable.GetSheet("TechnicianList").GetParameter("序号").Value=TechRowNumCollection.Item(i-1).Getroproperty("innertext")
                
                Datatable.GetSheet("TechnicianList").GetParameter("编号").Value=TechDetailCollection.Item(techDetailStarNo).Getroproperty("innertext")
                Datatable.GetSheet("TechnicianList").GetParameter("姓名").Value=TechDetailCollection.Item(techDetailStarNo+1).Getroproperty("innertext")
                Datatable.GetSheet("TechnicianList").GetParameter("身份证号").Value=TechDetailCollection.Item(techDetailStarNo+2).Getroproperty("innertext")
                Datatable.GetSheet("TechnicianList").GetParameter("籍贯").Value=TechDetailCollection.Item(techDetailStarNo+3).Getroproperty("innertext")
                Datatable.GetSheet("TechnicianList").GetParameter("联系电话").Value=TechDetailCollection.Item(techDetailStarNo+4).Getroproperty("innertext")
                techDetailStarNo=techDetailStarNo+5
            Next
           
            Datatable.ExportSheet "D:\Technicianlist.xls","Technicianlist"
        Call TestDataSet.Add("TechnicianList","")   
            Set TechRowNum=Nothing
            Set TechRowNumCollection=Nothing
            Set TechDetail=Nothing
            Set TechDetailCollection=Nothing
    End Function
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-9-22 01:43 , Processed in 0.089649 second(s), 30 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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