我们知道,像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