如何在QTP / UFT中处理对象所需的故障

时间:2014-05-09 05:25:27

标签: xml soap xpath qtp

我使用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步失败了:(我们可以处理这个吗?

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