51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

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

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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>!
希望大家帮我看哈,谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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
这个方法我也没有用过,假兄应该多有研究,可以直接找他帮你解决下问题。
回复 支持 反对

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

    连续签到: 1 天

    [LV.1]测试小兵

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

    本帖子中包含更多资源

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

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-27 11:46 , Processed in 0.079225 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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