日期:2014-05-16  浏览次数:20789 次

QTP11使用DOM XPath以及CSS识别元素对象

我们知道,像DOM,Html,CSS,XPath等对对象的识别策略广泛运用于一些开源的工具,例如:Selenium,Watir,Watir-Webdriver,以前qtp版本是不支持这些东西的,现在qtp11对这些已经支持了,下面我们就看看这些特性:

???????? Document Object Model(DOM):这东西干嘛的 ,百度之。

像下面的这些方法能应用在qtp中:

方法

描述

getElementById

使用已知的元素id,返回第一个页面元素

getElementsByName

返回具有指定名称的一个JavaScript数组中的所有元素

getElementsByTagName

返回与指定的标记名的JavaScript数组的所有元素

?

在qtp里调用JavaScript 方法:

Object.RunScript(script)

例如:

Browser("title:=百度一下,你就知道").Page("title:=百度一下,你就知道").RunScript ("alert('hello');")

?

Using HTML DOM Methods & Properties in QTP:

要访问HTML DOM方法,我们需要使用的文档对象,我们可以使用getElementById这个方法,用他的id来获取页面元素。例如:

Set? kws=Browser("title:=百度一下,你就知道").Page("title:=百度一下,你就知道").RunScript ("document.getElementById('kw');")

?????????????????? ? kws.value ="百度一下"

Set? us=Browser("title:=百度一下,你就知道").Page("title:=百度一下,你就知道").RunScript ("document.getElementById('su');")

?????????????????? ? us.click

?

???????? 但是我们对于一些页面没有定义id的但是定义了名称,我们就可以使用getElementsByName这个方法来解决,例如:

Set? kws=Browser("title:=百度一下,你就知道").Page("title:=百度一下,你就知道").RunScript ("document.getElementsByName('wd')(0);")

?????????????????? ? kws.value ="百度一下"

而这里使用getElementsByName注意需要索引值,因为他是返回一个JavaScript数组。

?

???????? 如果使用getElementsByTagName,我们就不需要name或者id了。例如:

?

Set? kws=Browser("title:=百度一下,你就知道").Page("title:=百度一下,你就知道").RunScript ("document.getElementsByTagName('input')(0);")

????????????? ? kws.value ="百度一下"

?

这里不好的地方就是,当有多个的时候,它的index属性无法直接写出并且当index改变了,脚本也要改变。

??????

通常情况下,我们都是使用组合键来识别相应的元素对象,例如:

?

set wd=Browser("name:=.* - 六间房秀场.*").Page("title:=.* - 六间房秀场.*").RunScript ("document.getElementById('chatForm').getElementsByTagName('input')(2) ;")

????????????? wd.value ="testing"

?

与此同时,我们也可以使用元素之间的关系来识别一些元素,例如:

document.getElementById(‘XXX’).firstChild

通过使用getElementById返回第一个子元素

document.getElementById(‘XXX’).lastChild

通过使用getElementById返回最后一个子元素

document.getElementById(‘XXX’).parentNode

通过使用getElementById返回父节点

document.getElementById(‘XXX’). nextSibling

通过使用getElementById返回下一个兄弟元素

document.getElementById(‘XXX’). previousSibling

通过使用getElementById返回前一个兄弟元素

?

?

使用XPath:

在QTP11中,XPath是另一种重要的识别元素的方式,当然它也像其它工具一样被广泛的应用于开源工具中,下面就介绍下载qtp11中改方式的特性。

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。

XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初 XPath 的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。但是 XPath 很快的被开发者采用来当作小型查询语言。(详细的介绍看这里:http://zh.wikipedia.org/wiki/XPath

QTP提供了两种使用XPath的方式,一种是在tools-àoptions—>Webàadvanced中;另一种就是你自己通过编程使用XPath的方法和属性。

?

?

这里主要介绍第二种:

下面就看一个采用描述性编程来使用XPath的方法的例子:

Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").WebEdit("xpath:=//input").Set "te