sunf1980 发表于 2009-6-8 15:46:57

qtp如何读取到div中的内容

在作一个金融系统,在右侧有个树形节点,用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>

dreamever 发表于 2009-6-8 15:51:43

那个div有一个id=dd0的属性,你可以用描述性编程来获取到那个对象,然后就可以通过getRoproperties()方法来获取到text属性,也就是文本内容了。
这是一般的方法,但是具体写代码的时候,被测程序不一样,写出来的代码也会不一样,这个你多试几次吧。

sunf1980 发表于 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

sunf1980 发表于 2009-6-8 17:08:40

可能是div的层数比较多,好像就找不到。或者说qtp不识别div

zhou840401 发表于 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

可以试一下

sunf1980 发表于 2009-6-9 15:42:48

问下,div的classname是什么啊?

b47617 发表于 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")
然后再提取你想要的 ;
我没有试过,看看可不可以

kuangquanshui 发表于 2009-6-9 16:52:50

学习了

sunf1980 发表于 2009-6-9 17:22:23

回复 7# 的帖子

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

RayTM 发表于 2009-6-9 17:54:34

用length试试

zhou840401 发表于 2009-6-9 20:39:43

用 ie developer 查看一下页面的对象,看什么是唯一来识别的,classname,或者id都行的.

sunf1980 发表于 2009-6-10 11:47:16

回复 11# 的帖子

用IE developer看了下,只有外一层div的id是唯一的。

b47617 发表于 2009-6-10 12:52:12

可以用 length

RayTM 发表于 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

b47617 发表于 2009-6-10 15:21:15

好贴

sunf1980 发表于 2009-6-10 16:39:37

回复 13# 的帖子

如何往下再取div,在没有id等区分的情况下

sunf1980 发表于 2009-6-10 16:43:03

回复 14# 的帖子

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

haiquan180 发表于 2009-6-10 17:12:13

Studying

RayTM 发表于 2009-6-11 18:08:30

回复 17# 的帖子

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

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

[ 本帖最后由 RayTM 于 2009-6-11 18:15 编辑 ]

hihotb 发表于 2009-6-14 15:58:12

好帖子 学习了哈哈
看到这个让我想起了之前做MKEY手机开发的时候 是通过XPAH来提取HTML里的内容的。
页: [1] 2
查看完整版本: qtp如何读取到div中的内容