我使用Microsoft XML DOM和HTTP在UFT中测试Web服务
当我触发请求XML时,我会以两种方式获得响应
方式1 成功时
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<SearchResourceResponse xmlns="http://www.ICLNBI.com/ICLNBI.xsd">
<MessageElements xmlns="">
<MessageStatus>SUCCESS</MessageStatus>
<MessageAddressing>
<from>ICL</from>
<to>QPortal</to>
<messageId>1234</messageId>
<action>SearchResource</action>
<timestamp>2013-07-29T17:05:17.860Z</timestamp>
<ServiceName>SearchResource</ServiceName>
<ServiceVersion>2.0</ServiceVersion>
</MessageAddressing>
</SearchResourceResponse>
</soap:Body>
</soap:Envelope>
方式2 失败时
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body/>
</soap:Envelope>
我使用xpath
捕获<MessageStatus>SUCCESS</MessageStatus>
set ObjXml = Createobject("Microsoft.XMLDOM")
Set ObjNode= ObjXml.SelectSingleNode("/soap:Envelope/soap:Body/*/MessageElements/MessageStatus")
ResultText=ObjNode.text
当它成功时它的效果非常好,当它失败并且响应如第2种所示出现时,我会收到类似 Object Required 的错误,并且不会再继续。
有没有办法,如果没有找到对象,它不应该退出功能,它应该返回状态为失败并继续进一步
VB scipt iam using is
Set ObjNode= ObjXml.SelectSingleNode("/soap:Envelope/soap:Body/*/MessageElements/messageStatus")
ResultText=ObjNode.text
If ResultText="SUCCESS" or ResultText="Success" Then
TcStatus = "Passed"
Else if
ResultText="FAIL" or ResultText= "FAILURE" Then
TcStatus = "Passed"
但它在第1步失败了:(我们可以处理这个吗?
答案 0 :(得分:2)
我怀疑你是否在SelectSingleNode上收到错误,或许这只是你问题中的错字?
我怀疑您在尝试访问ObjNode.Text
时确实遇到了失败。这是因为如果SelectSingleNode无法找到所请求的节点,它将返回Nothing
。所以你只需要在决定是否访问.Text之前检查返回值。
Set ObjXml = Createobject("Microsoft.XMLDOM")
'Presumably you have a step to load the XML here.
Set ObjNode = ObjXml.SelectSingleNode("/soap:Envelope/soap:Body/*/MessageElements/MessageStatus")
If ObjNode Is Nothing Then
MsgBox "Oh no! Failure!"
Else
ResultText = ObjNode.text
End If
哦,如果该元素永远不会出现在文档的其他地方,您可以将XPath缩短为//MessageStatus
。