51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 7388|回复: 21
打印 上一主题 下一主题

[原创] qtp如何读取到div中的内容

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-6-8 15:46:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在作一个金融系统,在右侧有个树形节点,用IEWebDeveloper查看该树形节点,都时div,也就是div下面还是div,现在在取得div显示的文本内容
类似的html代码如下
<DIV class=clip id=dd0 style="DISPLAY: block"><DIV class=dTreeNode><A href="javascript: d.o(1);"><IMG id=jd1 alt="" src="/spdbank/struts/resource/style/image/minusbottom.gif"></A><IMG id=id1 alt="" src="/spdbank/struts/resource/style/image/folderopen.gif"><A class=node href="javascript: d.o(1);">现金管理</A></DIV>
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2009-6-8 15:51:43 | 只看该作者
那个div有一个id=dd0的属性,你可以用描述性编程来获取到那个对象,然后就可以通过getRoproperties()方法来获取到text属性,也就是文本内容了。
这是一般的方法,但是具体写代码的时候,被测程序不一样,写出来的代码也会不一样,这个你多试几次吧。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2009-6-8 17:07:08 | 只看该作者
取不到哦,我试了好多次。
Set formrighttree=browser("creationtime:=2").page("index:=0")'.frame("index:=1")

Set dnodedesc = description.Create()
dnodedesc("id").value ="dd0"

set dnode=formrighttree.childobjects(dnodedesc)
If dnode.count>0 Then
msgbox dnode.count
dnode(3).click
End If
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2009-6-8 17:08:40 | 只看该作者
可能是div的层数比较多,好像就找不到。或者说qtp不识别div
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2009-6-8 20:27:02 | 只看该作者
qtp可以根据dom来访问页面,如
set doc=Browser().page().object
for each element in doc.all
  innerText=element.InnerText
  className=element.ClassName
   if className="div的class值" then
     innerText就是要的数据
   end
next

可以试一下
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2009-6-9 15:42:48 | 只看该作者
问下,div的classname是什么啊?
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2009-6-9 16:48:56 | 只看该作者
set obj = browser("creationtime:=2").page("index:=0")'.frame("index:=1").Object.getElementsByTagName("body")
print obj(0).getattribute("innerHTML")  
然后再提取你想要的 ;
我没有试过,看看可不可以
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2009-6-9 16:52:50 | 只看该作者
学习了
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2009-6-9 17:22:23 | 只看该作者

回复 7# 的帖子

想问下b47617,怎么判断obj 的个数,比如判断obj(100)中的100越界了,用count不行。
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2009-6-9 17:54:34 | 只看该作者
用length试试
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2009-6-9 20:39:43 | 只看该作者
用 ie developer 查看一下页面的对象,看什么是唯一来识别的,classname,或者id都行的.
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2009-6-10 11:47:16 | 只看该作者

回复 11# 的帖子

用IE developer看了下,只有外一层div的id是唯一的。
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2009-6-10 12:52:12 | 只看该作者
可以用 length
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2009-6-10 14:10:36 | 只看该作者

回复 12# 的帖子

有一个就好啊!
Msgbox getMessageByDivId("dd0")

Function getMessageByDivId(strDivId)
        'If the div not found
        On error resume next
                Set nodea = Browser("Creationtime:=0").Page("index:=0").Object.getElementById(strDivId)
        If Err.number <> 0 Then getMessageByDivId = "" : Exit Function

        Dim strReuslt
        IterateNode nodea, strReuslt
        getMessageByDivId = strReuslt
End Function

Function IterateNode(strNodeName, byref strReturn)
        'If is a text node, get value.
        If strNodeName.nodeType = 3 Then'3是文本节点,可根据需要调整为其它类型节点
                atext = strNodeName.nodeValue
                strReturn = strReturn & atext
                Exit Function
        End If

        'For iteration.
        Set childNod = strNodeName.childNodes
        If Not IsEmpty(childNod) and childNod.length <> 0 Then
                For i = 0 to childNod.length - 1
                        IterateNode childNod(i), strReturn
                Next
        End If
End Function
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2009-6-10 15:21:15 | 只看该作者
好贴
回复 支持 反对

使用道具 举报

该用户从未签到

16#
 楼主| 发表于 2009-6-10 16:39:37 | 只看该作者

回复 13# 的帖子

如何往下再取div,在没有id等区分的情况下
回复 支持 反对

使用道具 举报

该用户从未签到

17#
 楼主| 发表于 2009-6-10 16:43:03 | 只看该作者

回复 14# 的帖子

试验了下,在IterateNode函数的“ If strNodeName.nodeType = 3 Then'3是文本节点,可根据需要调整为其它类型节点”处出错,说strNodeName缺少对象。如果可以的话能说明下整个函数嘛。
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2009-6-10 17:12:13 | 只看该作者
Studying
回复 支持 反对

使用道具 举报

该用户从未签到

19#
发表于 2009-6-11 18:08:30 | 只看该作者

回复 17# 的帖子

getMessageByDivId:
从父节点入手,通过遍历其子节点的方式找到目标对象。
IterateNode:
递归遍历其子节点,查找文本节点,找到第一个后退出递归并返回其文本内容。

在出错处断点调试吧,看看是哪个分支出了问题。

[ 本帖最后由 RayTM 于 2009-6-11 18:15 编辑 ]
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2014-10-15 22:18
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    20#
    发表于 2009-6-14 15:58:12 | 只看该作者
    好帖子 学习了哈哈
    看到这个让我想起了之前做MKEY手机开发的时候 是通过XPAH来提取HTML里的内容的。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-9 09:55 , Processed in 0.080500 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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