搜索1:
目前,企业中对XML的应用越来越广泛,作为自动化测试的测试工程师,也应该掌握XML的读写操作。
以下我使用XML DOM技术演示一个例子,用以读取XML指定节点的节点内容值。
读取函数原型 GetXml strXmlPath,nodeName
这个函数的第一个参数表示xml文件所在路径,第二个参数表示希望获取到的xml节点名,请结合下列例子看
首先,新建一个vbs文件(取个名字叫readXml.vbs),输入代码:
Dim strXML
GetXml "c:search.xml","TestResult" '这个函数的第一个参数表示xml文件所在路径,第二个参数表示希望获取到的xml节点名,请结合下列例子看
MsgBox strXML
Function GetXml (ByVal strXmlFilePath,ByVal xmlNodeName)
Dim xmlDoc,xmlRoot
Set xmlDoc = CreateObject("Microsoft.XMLDOM") '创建XML DOM对象
xmlDoc.async = False '控制加载模式为同步模式(xml树加载完毕后再执行后续代码)
xmlDoc.load strXmlFilePath '载入xml文件
If xmlDoc.parseError.errorCode <> 0 Then
MsgBox "XML文件格式不对,原因是:" & Chr(13) & xmlDoc.parseError.reason
Exit Function
End If
Set xmlRoot = xmlDoc.documentElement
xmlRecursion xmlRoot,xmlNodeName '调用xml递归函数传入指定的根和节点名
GetXml = True 'xmlRecursion (xmlRoot)
End Function
Function xmlRecursion(byval xmlNode,byval strNodeName)
If xmlNode.nodeName = strNodeName And xmlNode.hasChildNodes Then
If xmlNode.childNodes.item(0).nodeName = "#text" Then
strXML = strXML & xmlNode.nodeName & ":" & xmlNode.childNodes.item(0).nodeValue & Chr(13)
End If
End If
If xmlNode.hasChildNodes Then
For Each childNodeItem In xmlNode.ChildNodes
If childNodeItem.hasChildNodes Then
xmlRecursion childNodeItem,strNodeName
End If
Next
End If
End Function
问题:
haschildnodes()这个方法好奇怪,明明已经没有子节点了,却仍然返回true,
比如<TestResult>1</TestResult>这个节点,它的childNodes.item(0).nodeName竟然是“#text”,但是根据例子来看TestResult已经没有子节点了阿
回答:
因为在xml有一个特殊的“子节点”——文本节点。比如 <TestResult>100</TestResult>
这个节点TestResult下并不是没有子节点,而是有一个文本节点,这个节点的nodeName就是“#text”,而nodeValue是100.如果是 <TestResult/> 这种节点的话,那么用hasChildNodes则返回False
遍历xml的代码:
Option Explicit
Dim xmlDoc,myErr,strXML
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.async = False
xmlDoc.load "c:calc1.xml"
If xmlDoc.parseError.errorCode <> 0 Then
Set myErr = xmlDoc.parseError
MsgBox("XML Loads Failed. " & myErr.reason)
Else
Set rootNode = xmlDoc.documentElement
Call rTravel(rootNode)
MsgBox strXML
End If
Sub rTravel (rNode)
Dim blnTwo,intTestCase,
blnTwo = False
iLen = rNode.childNodes.length
If iLen > 0 Then
For i = 0 To rNode.childNodes.length -1
Set child = rNode.childNodes.item(i)
Call rTravel(child)
childtext = child.nodeValue
strXML = strXML & childtext & chr(13)
Next
Else
Exit Sub
End If
End Sub
方法二:
Option Explicit
Dim xmlDoc,myErr,strXML
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.async = False
xmlDoc.load "c:calc1.xml"
If xmlDoc.parseError.errorCode <> 0 Then
Set myErr = xmlDoc.parseError
MsgBox("XML Loads Failed. " & myErr.reason)
Else
Set rootNode = xmlDoc.documentElement
Call rTravel(rootNode)
MsgBox strXML
End If
Sub rTravel (rNode)
Dim blnTwo,intTestCase,
blnTwo = False
iLen = rNode.childNodes.length
If iLen > 0 Then
For i = 0 To rNode.childNodes.length -1
Set child = rNode.childNodes.item(i)
Call rTravel(child)
childtext = child.nodeValue
strXML = strXML & childtext & chr(13)
Next
Else
Exit Sub
End If
End Sub
搜索2:
Dim filepath,xmlDoc,myErr,strXML,rootNode
filepath="c:\12.xml"
Set xmlDoc=CreateObject("Microsoft.XMLDOM")'创建一个xml对象
xmlDoc.async=False
xmlDoc.load filepath '加载xml文件
If xmlDoc.parseError.errorCode<>0 Then'返回错误信息
Set myErr=xmlDoc.parseError
MsgBox("XML Loads Faild."&myErr.reason)
Else
Set rootNode=xmlDoc.documentElement'设置根节点
Call rTravel(rootNode)'遍历节点
msgBox strXML
End If
Sub rTravel(rNode)
Dim blnTwo,intTestCase,iLen,i,child
blnTwo=False
iLen=rNode.childNodes.length'返回节点的子节点数目
If iLen>0 Then
For i=0 to rNode.childNodes.length-1
Set child=rNode.childNodes.item(i)'获取当前节点对象
Call rTravel(child)
childtext=child.nodeValue'获取节点的值
strXML=strXML & childtext & chr(13)'chr(13)回车符
Next
else
Exit Sub
End If
End Sub
另附搜索到的qtp_xml学习总结
分享到:
相关推荐
DOM 是一种解析 XML 的方法,允许程序或脚本动态访问和更新 XML 文档的结构。`xmlDoc.documentElement.SelectSingleNode(xmlNodeName)` 用于找到 XML 文件中的特定节点,并返回其文本内容。 代码中,XML 文件的路径...
qtpxml软件测试工具中QTP操作xml文件的方法及扩展QTP的.NET插件的问题目前,企业中对XML的应用越来越广泛,作为自动化测试的测试工程师,也应该掌握XML的读写操作。以下我使用XMLDOM技术演示一个例子,用以读取XML...
3. **DP的配置**:在QTP测试脚本中设置DP,指定XML文件路径和数据读取方式。 4. **关键词的使用**:如何在脚本中调用关键词,并将从XML文件中获取的数据作为参数传递。 5. **脚本的执行与结果验证**:运行脚本,观察...
将XML文件路径添加到注册表中,QTP会读取其中的定义。 7. **录制和回放**:现在,你可以开始录制对Flex应用的操作。QTP应该能够识别Flex组件并生成相应的脚本。在回放时,QTP会调用之前编写的自定义库函数来执行...
4. **msxml6.dll**:Microsoft XML Core Services(MSXML)的版本6,用于解析和操作XML文档。QTP在处理XML数据时会依赖这个组件,特别是在与Web服务或XML结构化的数据交互时。缺少msxml6.dll可能会导致QTP在处理XML...
2. **对象库**:可能包含`.obj`或`.mlf`文件,用于存储计算器应用的对象及其属性,方便QTP识别和操作。 3. **测试套件/测试用例**:`.tst`或`.qt`文件,这些是QTP的测试组织结构,定义了测试的执行顺序和关联的脚本...
XML格式允许用户自定义报告样式,通过解析XML文件,可以获取详细的测试数据,进行定制化的数据分析和报表生成。这部分内容有助于提升测试报告的可视化和可分析性。 学习这些文档,不仅能够帮助你掌握QTP的基本操作...
【QTP操作基本教程】是面向初学者的指导材料,主要涵盖了如何使用QTP(QuickTest Professional)进行自动化测试的基本步骤。QTP是一款由HP(现已被Micro Focus收购)开发的功能自动化测试工具,广泛应用于软件测试...
1.2 帮助文档(HELP)-QTP的说明书 1.3 录制与回放—QTP的开关 1.4 认清并请远离QTP的脚本录制模式 1.5 QTP精华—对象库(上)之基础攻略篇 1.6 对象库(下)之进阶编程篇 1.7 描述性编程(Descriptive ...
13. **XML参数化**:XML文件可以作为数据源,为测试提供灵活的数据结构。 14. **Oracle QTP**:QTP支持Oracle数据库,允许测试人员进行数据库层面的验证。 15. **对象库管理与合并**:有效管理对象库,包括对象的...
QTP以VBS(Visual Basic Script)作为内嵌语言,它是WinRunner的升级版,提供了一种更为直观和高效的自动化测试方法。QTP不仅仅是一款测试工具,还可以与HP的质量中心(QC)产品配合,实现业务过程测试(BPT)。 ##...
- **方法**: 如何使用 QTP 进行文件系统的操作。 - **示例**: 提供具体的使用示例。 #### 53. 对象同步 - **概念**: 对象同步在 QTP 中的作用。 - **实现**: 如何实现对象同步。 #### 54. 正则表达式应用模板 - **...
在执行某些特定行的操作后,可能需要将当前数据表中的所有数据导出到文件中。例如,在数据表的第五行执行特定操作后,导出整个数据表。 ```vbscript Dim row row = dataTable.getCurrentRow If row = "5" Then ...
综上,QTP测试标准Web对象时,涉及了DOM操作、Web控件的属性访问、Browser对象方法的使用、页面元素计数、Frame对象以及Image对象的验证等,这些都是QTP自动化测试的重要组成部分,能够有效地实现Web应用的自动化...
此外,QTP 还支持环境变量,这些变量在整个测试中可被所有 Action 共享,其中用户定义的环境变量甚至可以关联 XML 文件,实现跨测试的变量共享。QTP 还允许引用外部的 VBS 代码库,增强了脚本的复用性和扩展性。 总...