QTP中的DOM操作

注:在QTP层面操作对象时,对象必须是可见的,在DOM层面的时没有要求但有时在DOM层面对元素执行操作时无效又需要在QTP层面才能操作

通过vbs获取网页源码:

Set XmlHttp1=CreateObject("MSxml2.XMLHTTP")
XmlHttp1.Open "GET","http://www.baidu.com",false
XmlHttp1.Send
source=XmlHttp1.ResponseText
msgbox source

通过QTP的document对象获取网页源码:
For each tlink in Browser("微博桌面").Object.document.getElementsByTagName("html")
    print tlink.outerhtml
Next

通过QTP的page对象获取网页源码:
For each tlink in Window("微博桌面").Page("评论").Object.getElementsByTagName("html")
    print tlink.outerhtml
Next

获取并操作DOM对象:
Set DomObj = Browser("微博桌面").Object.document
DomObj.Method(args...)
eg: DomObj.GetElementById(ID), DomObj.GetElementByName(Name), DomObj.GetElementByTagName(TagName)
DomObj.Property
eg: DomObj.body, DomObj.cookie, DomObj.url
DomObj.Set          '''返回对象集合
eg: DomObj.all, DomObj.links, DomObj.forms

更多DOM支持的操作可以参考 http://www.w3school.com.cn/example/hdom_examples.asp

QTP 帮助文档官方指定的地址:http://msdn.microsoft.com/library/default.asp?url=/workshop/author/om/doc_object.asp

转自: http://five3.blog.163.com/blog/static/4787186020117186106737/


Page对象是页面的主体对象,用于包含各种Web控件,通过Page对象,可以访问下一层次的对象,例如页面的链接、图片等。
下面的例子就是获取页面中还包含的链接和图片的个数

Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").Link("REGISTER").Click

'等待浏览器完成当前导航动作,用于模拟用户等到页面加载完成的过程
browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").Sync
linksCount = browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").Object.links.length

print "链接总共有:" & linksCount

ImagesCount = browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").Object.images.length

print "图片总共有:" & ImagesCount


主要属性:
1 alinkColor
设置或获取元素中所有激活链接的颜色
2 linkColor设置或获取对象文档链接的颜色。
3 vlinkColor设置或获取用户已访问过的链接颜色。
4 URL设置或获取当前文档的URL
5 location:获取当前URL的信息。
6 title设置或获取当前文档的标题。
7 protocol设置或获取URL的协议部分。
8 readyState获取表明对象当前状态的值。
9 alinkColor设置或获取元素中所有激活链接的颜色。
10 bgColor设置或获取表明对象后面的背景颜色的值。
11 fgColor设置或获取文档的前景(文本)颜色。
12 all返回对象所包含的元素集合的引用。
13 anchors获取所有带有name/id属性的 a 对象的集合。此集合中的对象以 HTML 源顺序排列。
14 applets获取文档中所有applet对象的集合。
15 childNodes获取作为指定对象直接后代的HTML元素和 TextNode对象的集合。
16 embeds获取文档中所有embed对象的集合。
17 forms获取以源顺序排列的文档中所有form对象的集合。
18 frames获取给定文档定义或与给定窗口关联的文档定义的所有window对象的集合。
19 images获取以源顺序排列的文档中所有img对象的集合。
20 links获取文档中所有指定了HREF属性的 a 对象和所有 area对象的集合。
21 namespaces获取namespace对象的集合。
22 scripts获取文档中所有script对象的集合。

23 styleSheets获取代表与文档中每个link style 对象的实例相对应的样式表的 styleSheet 对象的集合

1,childNodes 属性,标准的,它返回指定元素的子元素集合,包括HTML节点,所有属性,文本。可以通过nodeType来判断是哪种类型的节点,只有当nodeType==1时才是元素节点,2是属性节点,3是文本节点。

有些人错误的使用()去取该集合元素,下表列出各浏览器对childNodes(i)的支持情况:

  IE6/7/8/Safari/Chrome/Opera IE9/Firefox
childNodes(i) 支持 不支持

 

有时候需要获取指定元素的第一个HTML子节点(非属性/文本节点),最容易想到的就是firstChild 属性。代码中第一个HTML节点前如果有换行,空格,那么firstChild返回的就不是你想要的了。可以使用nodeType来判断下。

1
2
3
4
5
6
functiongetFirst(elem){
    for(vari=0,e;e=elem.childNodes[i++];){
        if(e.nodeType==1)
            returne;
    }      
}

 

2,children 属性,非标准的,它返回指定元素的子元素集合。经测试,它只返回HTML节点,甚至不返回文本节点。且在所有浏览器下表现惊人的一致。和childNodes 一样,在Firefox下不支持()取集合元素。因此如果想获取指定元素的第一个HTML节点,可以使用children[0]来替代上面的getFirst函数。需注意children在IE中包含注释节点。

posted on 2012-08-17 12:24  张飞_  阅读(2555)  评论(0编辑  收藏  举报

导航