HTML 文档中的每个元素、属性、文本等都代表着树中的一个节点
DOM对象识别
IE可以使用【IEDevToolBar】或【IEWebDeveloperV2】
使用DOM的作用
1. 修改控件自身接口
调用了DOM对象接口来修改控件的自身接口属性
2. DOM对象下CurrentStyle对象应用
CurrentStyle 是一个可以与HTML 对象元素的style sheets进行交互的接口,它可以获取对象元素的字体名、字体大小、颜色、是否可见等
3. 性能提升
DOM的执行速度会比QTP的对象库执行速度快上好几倍,这是因为DOM相当于底层的对象接口,而QTP首先需要把对象属性进行封装,然后在脚本运行时调用对象库中的对象,最后与页面上的对象进行比对,如果属性匹配才可控制测试对象。而DOM却是直接找对象进行控制
补充知识点:
(1)在QTP中启动IE:
'在QTP中启动IE systemutil.run "iexplore.exe" |
(2)使用WSH启动IE:
'使用WSH启动IE Set oShell=CreateObject("wscript.shell") |
(3)使用IE COM对象:
'使用IE COM启动IE Set oIE = CreateObject("InternetExplorer.Application") oIE.Visible = True '设置可见 oIE.Navigate "http://www.baidu.com" '跳转URL |
常用DOM属性、方法、集合:
(1) 常用DOM
l ClassName:同一样式规则的元素用相同的类名。可通过className快速过滤出一组类似的元素
l Document:用于指向包含当前元素的文档对象
l Id:当前元素的标识。如果文档中包含多个相同的id的元素,则返回一个数组
l innerTexr:用于指向当前元素的开始标记和结束标记之间的所有文本和HTML标签
l offsetHeight、offsetWidth:元素的高度和宽度
l offsetLeft、offsetTop:当前元素对父元素的左边位置和顶部位置
l outerHTML:当前元素的开始标记和结束标记之间的所有文本和HTML标签
l outerText:当前元素的开始标记和结束标记之间的所有文本,但不包括HTML标签
l paraentElement:当前元素的父元素
l sourceIndex:元素在document.all集合中的索引
l style:元素的样式表单属性
l tagName:当前元素的标签名
l title:在IE中,代表元素的tool tip文本
(2) 常用DOM方法
l Click():模拟用户对当前元素的鼠标点击
l Contains(element):用于判断当前元素是否包含指定的元素
l GetAttribute(attributeName,caseSenstive):返回当前元素所包含的某个属性,
参数attributeName为属性名,caseSensitive表示是否大小写敏感
l SetAttribute(attributeName,value,caseSenstive):设置当前元素的属性
(3) 常用DOM集合
l All[]:当前元素中包含的所有HTML元素的数组
l Children[]:当前元素包含的子元素
注意:利用IE COM 测试时,注意等待IR页面加载完毕:【While oIE.Busy:Wend】
3种方法对比:getElementByID、getElementsByName、getElementsByTagName
结合IE对象模型获取document对象的方法:[object.Document]其中object为IE 对象
Set OTE = CreateObject(“InternetExplorer.Application”)
OIE.visible = true
Set oDoc = OIE.Document
(1) 通过getElementByID方法获取定位对象
With oDoc
'搜索框输入
.getElementByID("kw").value ="zzxxbb112"
'点击百度搜索
.getElementByID("sb").Click
End With
(2) 通过getElementsByName方法获取定位对象
Set oEdits =oDoc.getElementsByName("wd")
'遍历对象并对其进行操作
For Each oEdit In oEdits
oEdit.value = "zzxxbb112"
Next
'点击百度搜索
oDoc.getElementByID("sb").Click
(3) 通过getElementsByTagName方法获取定位对象
'获取TAG名为INPUT的元素集合
Set oEdits =oDoc.getElementsByTagName("INPUT")
'遍历对象并判断文本框对其进行操作
For Each oEdit In oEdits
If oEdit.type="text" Then
oEdit.value = "zzxxbb112"
End If
Next
'点击百度搜索
oDoc.getElementByID("sb").Click
注意:区别【getElementByID】返回的是单个对象,而【getElementByName】和【getElementByTagName】返回的是数组
利用FORM名来获取对象元素
用IE DEV查看百度的搜索框对应的FORM名,在IE DEV中查看得到FORM名为f
SetoIE = createObject("InternetExplorer.Application") '使用IE COM启动IE
oIE.visible= true '设置可见
oIE.Navigate"http://www.baidu.com" '跳转URL
WhileoIE.Busy :Wend '等待IE页面加载完毕
SetoDoc = oIE.Document '获取Document对象
oDoc.f.wd.value= "youmama" '获取FORM名为F下名为WD的元素并输入
oDoc.f.su.Click '获取FORM名为F下名为Su的元素并点击
SetoDoc = nothing
SetoIE = nothing
访问Web页面的Script中的变量格式:object.parrentWindow.varName
如:在百度源文件中的JavaScript脚本中定义了一个变量为W,并且赋值为document.f.wd
SetoDoc = oIE.Document
'获取百度搜索框对象
SetoEdit=oDoc.parentWindow.w
'并对其进行输入
oEdit.value= "zzxxbb112"
'获取FORM名为F下名为SB的元素并点击
oDoc.f.sb.Cclick
使用QTP中的DOM超控各类HTML元素
QTP中访问DOM对象的方法:Set sDom = Browser(" ").Page(" ").Objec
示例:
<INPUTtype ="text" value="QuickTest" id="ID_001"name="NAME_001" >
QTP中代码样例
操控方式1:
‘获取DOM对象 set oDocument = Browser("Browser").Page("Page").Object
‘使用GetElementByID获取对象元素,并更改文本框WebEdit的value属性值 oDocument.getElementById("ID_001").value = "zzxxbb112" |
操控方式2:
'获取DOM对象 set oDocument = Browser("Browser").Page("Page").Object
'使用GetElementsByName获取对象元素,并更改文本框WebEdit的value属性值 oDocument.getElementsByName("NAME_001")(0).value = "zzxxbb112" |
操控方式3:
'获取DOM对象 set oDocument = Browser("Browser").Page("Page").Object
'如果ID和name都是空的,可以使用getElementsByTagName Set allElements = oDocument.getElementsByTagName("INPUT") For each element in allElements If element.value="QuickTest" Then element.value="zzxxbb112" End If Next |
对于其他控件的一些操作说明:
【webButton/link】使用click方法
【webCheckBox】使用checked方法
【WebRatioGroup】
HTML源代码样例:
<input type="radio" name="sex" value="男" checked="checked"> 男 <input type="radio" name="sex" value="女"> 女 |
QTP中代码样例。
操控方式:
'获取DOM对象 set oDocument = Browser("Browser").Page("Page").Object
'通过GetElementsByName获取对象元素后选取Radio单选按钮 oDocument.getElementsByName("sex").item(1).checked=true |
【WebList/webComboBox】
HTML源代码样例:
<SELECT name = "NAME_001"> <option value = "child_001">child_001</option> <option value = "child_002">child_002</option> <option value = "child_003">child_003</option> </SELECT> |
QTP操作方式:
'获取DOM对象 set oDocument = Browser("Browser").Page("Page").Object
'使用GetElementByName方法获取List对象, set ListObjElements = oDocument.getElementsByName("NAME_001").item(0) '遍历List列表,根据关键字选取List项 For i=0 to ListObjElements.Options.length-1 If ListObjElements.Options(i).value = "child_002" Then ListObjElements.Options(i).selected = true End If Next |
【WebTable】
HTML源代码样例:
<table id="id_001" border=1>
<tr> <td>A1</td> <td>B1</td> </tr>
<tr> <td>A2</td> <td>B2</td> </tr> </table> |
QTP中代码样例。
操控方式:
'获取DOM对象 '获取WebTable对象元素 '打印WebTable的行数 '打印WebTable的单元格数量 '打印WebTable第二行第一个单元格中的内容 |
注意:此处表格对象含有两个对象集合:Rows (所有行)和Cells(所有单元格)。
innerHTML、innerText和outerHTML、outerText的区别
- innerHTML 设置或获取位于对象起始和结束标签内的 HTML
- outerHTML 设置或获取对象及其内容的 HTML 形式
- innerText 设置或获取位于对象起始和结束标签内的文本
- outerText 设置(包括标签)或获取(不包括标签)对象的文本
注意:innerText和outerText在获取时是相同效果,但在设置时,innerText仅设置标签内的文本,而outerText设置包括标签在内的文本
1)、innerHTML与outerHTML在设置对象的内容时包含的HTML会被解析,而innerText与outerText则不会。
2)、在设置时,innerHTML与innerText仅设置标签内的文本,而outerHTML与outerText设置包括标签在内的文本。
使用CurrentStyle验证对象
HTML源代码样例:
<style> |
QTP检验的方法:
'获取DOM对象 isVisible = oElementDocument.currentstyle.visibility If isVisible="hidden" Then |
currentStyle还可以验证许多QTP本身无法验证的属性,如字体名、字体大小、字体颜色等
计算事务时间方法【Services.StartTransaction】【Services.EndTransaction】:
Services.StartTransaction "inputBefore" |