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

在这个例子中,我们使用的是//input,”//”在xpath中表示贪婪查询,他会变量html中所有的元素,直到找到为止。

同时如果我们知道元素的确定位置,我们也可以利用绝对路径来定位,如:

Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").WebEdit("xpath:=/html/body/div[2]/div/form/input").Set "testing"

这里比较麻烦的是,这个绝对路径,我们可以通过火狐来查看同时采用这个定位是非常快的,不过元素如果改变了,就悲催了~~~,未完待续~~~

下面来介绍,在xpath中使用元素属性来定位元素:

常用的元素属性有,ID,name,index,value,type 等,在xpath中,我们可以这样使用:

Xpath:=//element[@attribute=’ attribute  value’]

例如:

Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").WebEdit("xpath:=//input[@id='kw']").set "testing"

当然,我们也可以使用多个属性来定位元素,如:

Xpath:=//element[@attribute=’ attribute  value’   and @attribute=’ attribute  value’ ]

Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").WebEdit("xpath:=//input[@id='kw'    and  @type='text' ] ").set "testing"

在一些使用AJAX构建的网站,通常他们的元素属性是动态的,例如ids,name,他们随着网页动态加载变化而变化,此时我们可以使用部分匹配的原则来定位这些元素。

在xpath中,提供了一些常见的函数,例如:cotains(),start-with(),end-with(),语法如下:

//element[start-with(@attribute,’attribute partial value’)]

// element[end-with(@attribute,’attribute partial value’)]

//element[cotains(@attribute,’attribute partial value’)]

例如下面的例子:

<div id='login_area'>

<input type='text' id='text_1'>

</div>

我们可以这样定位元素:

Browser("name:=XXX").Page("title:=XXX").WebEdit("xpath:=//div[@id=' login_area '/input[start-with(@id,’text_’)]' ] ").set "testing"

同理,其它方法也是这样用。

在这里有一种方法,直接使用text()来定位元素,这个是很方便的。语法如下:

//element[text()='inner text']

例如:

Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").link("xpath:=//a[text()='注册']").Click

当然我们也可以结合contains(),start-with()来使用。

语法如下:

//element[contains(text(),’inner text’)]

例如:

ss=Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").link("xpath:=//a[contains(text(),'注')]").GetROProperty("name")

msgbox ss  ‘ss=注册

在qtp11中还介绍了关于xpath轴的知识,这部分没找到相关例子,就不介绍了,感兴趣的去看下w3school上关于xpath轴的介绍。

CSS在QTP11中使用:

QTP11中也增加了CSS来识别页面对象属性,关于css的介绍以及使用可以看w3school。

在qtp11中使用css的语法如下:

Css:=Element.class_attribute

例如:

Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").WebEdit("css:=input.s_ipt ").set "testing"

在dom,xpath中均能使用id,在css中也可以使用id。在css中使用id的语法如下:

Css:=element#id

例如:

Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").WebEdit("css:=input#kw ").set "testing"

当然,在css中我们也可以使用元素的属性来识别页面对象,其语法如下:

Css:=element[attribute=value]

例如:

Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").WebEdit("css:=input[name=wd] ").set "testing"

另外,css中也提供了类似xpath中的部分识别属性的方法,具体方法如下:

 

Operator

Description

^=attribute_value

找到以给定的属性值的开始的元素,这个和xpath中的 starts-with()函数相似。

*= attribute_value

找到包含给定属性值的元素. 这个和xpath中的 contains()函数相似。

$= attribute_value

找到以给定的属性值的结束的元素. 这个和xpath中的 ends-with()函数相似。

例如:

<div id='login_area'>

<input type='text' name='text_1'>

</div>

Browser(title:=XXX).Page(title:=xxx).WebEdit(“css:=div#login_area  input[name^=’text_’]”).set “testing”

或者

Browser(title:=XXX).Page(title:=xxx).WebEdit(“css:=div#login_area  input[name*=’text_’]”).set “testing”

在css中,也可以使用text()来定位,具体语法如下:

Css:=element:contains(‘text’)

Browser("name:=百度一下,你就知道").Page("title:=百度一下,你就知道").link("css:=a:contains('注册')").Click

QTP11使用DOM XPath以及CSS识别元素对象的更多相关文章

  1. Selenium自动化中DOM,XPATH,CSS定位Web页面对象的优劣性分析

    加速IE浏览器自动化执行效率:Selenium自动化中DOM,XPATH,CSS定位Web页面对象的优劣性分析 1.技术背景       在Web应用中,用户通过键盘在输入框中输入值和鼠标点击按钮,链 ...

  2. 【WEB自动化】【第一节】【Xpath和CSS元素定位】

    目前自动化测试开始投入WEB测试,使用RF及其selenium库,模拟对WEB页面进行操作,此过程中首先面对的问题就是对WEB页面元素的定位,几乎所有的关键字都需要传入特定的WEB页面元素,因此掌握常 ...

  3. UI自动化之元素定位(xpath、css)

    很早之前就已经写过自动化了,不过点着功能久了就会容易忘记元素定位,尤其是xpath和css定位,所以就花点时间做下总结收集. xpath有两种定位: 一.绝对路径(不推荐使用,除非已经使用了所有方式仍 ...

  4. css选择器用法,使用css定位元素,css和xpath元素定位的区别

    css定位元素 1.什么是css? CSS(Cascading Style Sheets)层叠样式表,是一种语言,用来描述html或者xml的显示样式.在css语言中有css选择器,在selenium ...

  5. 黄聪:HtmlAgilityPack中SelectSingleNode的XPath和CSS选择器

    XPath和CSS选择器 原文:http://ejohn.org/blog/xpath-css-selectors 最近,我做了很多工作来实现一个同时支持XPath和CSS 3的解析器,令我惊讶的是: ...

  6. HTML DOM 元素对象

    HTML DOM 元素对象 HTML DOM 节点 在 HTML DOM (Document Object Model) 中, 每个东西都是 节点 : 文档本身就是一个文档对象 所有 HTML 元素都 ...

  7. CSS隐藏元素的几种方法

    使用CSS隐藏元素的方法很多,在这里简单总结一下: 1.display:none display:none 应该是最常用的一种隐藏元素的方法,使用该方法隐藏的元素脱离文档流不占据空间,不会被浏览器解析 ...

  8. JavaScript DOM编程基础精华01(DOM入门,DOM模型和获取页面元素,事件,window对象的方法)

    DOM入门 DOM就是Html页面的模型,将每个标签都做为一个对象,JavaScript通过调用DOM中的属性.方法就可以对网页中的文本框.层等元素进行编程控制.比如通过操作文本框的DOM对象,就可以 ...

  9. DOM元素对象的属性和方法(1)

    一.accessKey() 作用:获取元素焦点快捷键:设置快捷键后,使用Alt+快捷键,让元素快速获得焦点, <!DOCTYPE html> <html> <head&g ...

随机推荐

  1. HDFS数据完整性

    数据完整性 Hadoop用户肯定都希望系统在存储和处理数据时不会丢失或损坏任何数据.尽管磁盘或网络上的每个I/O操作不太可能将错误引入自己正在读/写的数据中,但是如果系统中需要处理的数据量大到Hado ...

  2. 斯特林公式求N!

        n!的长度为 ll ans = log10(2*pi*n)/2 + n*(log10(n/exp(1.0)))+1;  

  3. boot小知识

    lg 大, md 中等, sm 小, xs 极小. 可以单独用,也可以混合用,不同的屏幕用不同的比例. push ,pull 推拉.这个不实用. row里面可以嵌套实用row. 挤不下的时候,就会自动 ...

  4. ActiveMQ 消息存储

    本章重点 ActiveMQ 中,队列和主题里的消息是怎么存储的 ActiveMQ 提供的四种消息存储形式 ActiveMQ 是怎么为消费者缓存消息的 使用订阅恢复模式,怎么控制消息缓存 简介 JMS ...

  5. 报表研究之PPT篇

    PPT是一种说服力,是展示,也是营销. PPT写的好,会有事半功倍的效果. 写好PPT,重要的有以下几点. 1.1页1主题,1行1观点 2.善用图形,图成逻辑 3.微软雅黑最佳,其余字体配搭 4.色同 ...

  6. java: InputStreamReader将字节的输入流变成字符的输入流,OutputStreamWriter将字符的输出流变成字节的输出流

    InputStreamReader:将字节的输入流变成字符的输入流, OutputStreamWriter:将字符的输出流变成字节的输出流 //将缓冲区的内容读取,可以一次读取 //可以接收键盘的输入 ...

  7. sgu176 有源汇上下界最小流

    题意:有一堆点和边,1起点,n终点,某些边有可能必须满流,要求满足条件的最小流 解法:按原图建边,满流的即上下界都是容量,但是这样按有源汇上下界可行流求出来的可能不是最小流,那么我们需要开始建边的时候 ...

  8. Incorrect string value: '\xE7\x8E\x8B\xE4\xBD\xB3' for column 'contact' at row 1

    1 queries executed, 0 success, 1 errors, 0 warnings 查询:INSERT INTO beijing(contact,tel_phone,qq,comp ...

  9. Linux 获取随机密码

    /****************************************************************************** * Linux 获取随机密码 * 说明: ...

  10. Too Rich(贪心加搜索)

    个人心得:10月份月赛题目,很low,就过了一道水题而且是把所有猜测都提交才过的.这段时间不知道忙什么去了, 也没怎么刷题感觉自己越来越差,还不如新来的大一学弟呢,别人起码天天刷代码到半夜,比起刚在区 ...