I have set up a grab from our Soap service that produces the response (in Part)
<env:Envelope xmlns:env=“http://schemas.xmlsoap.org/soap/envelope/”>
env:Header/
env:Body
<ns0:modemMTAPollResponse xmlns:ns0="pulse.suddenlink.com/ws/house-call">
<modemMTAPollResult>
<modemCmtsMac/>
<modemDhcpServerIp>172.24.120.93
</modemDhcpServerIp>
<modemFoundOnCmts>true
</modemFoundOnCmts>
<modemHasMta>true
</modemHasMta>
<modemIsPollable>true
</modemIsPollable>...
In the test itself I have:
response = WS.sendRequest(findTestObject(‘WHC SOAP/modemMTAPoll’, [(‘MAC’) : ‘083E5DF9E7C0’]))
WS.verifyResponseStatusCode(response, 200, FailureHandling.STOP_ON_FAILURE)
WS.verifyElementPropertyValue(response, ‘ns0:modemMTAPollResponse.modemMTAPollResult.modemIsPollable’, ‘true’)
I get the following Error:
09-13-2018 05:54:13 PM - [FAILED] - Unable to verify element property value (Root cause: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script1.groovy: 1: unexpected token: ns0 @ line 1, column 5.
def ns0:modemMTAPollResponse = new XmlSlurper().parseText(xmlText);return ns0:modemMTAPollResponse.modemMTAPollResult.@modemIsPollable
^
1 error
)
I have tried the locator a number of different ways and why I drop the first element it tells me that element is not found.
I am stumped and am now banging my head against my desk. Can anyone offer some insight? I fear its my own inability to understand something fundamental in the locator.
Andrew,
You seem to have spotted a weak point in Katalon Studio with respect to XML Namespace in XML Response.
In Andrew’s case, the SOAP response body contains nodes with XML Namespace (xmlns:ns0=“pulse.suddenlink.com/ws/house-call”). On the other hand, Katalon Document https://docs.katalon.com/display/KD/Handle+Response+Messages describes a case where SOAP response body contains nodes without XML Namesapece.
With or Without XML-Namespace, this difference is quite significant for application which digests XML documents.
The following line is, I am sure, very problematic:
def ns0:modemMTAPollResponse = new XmlSlurper().parseText(xmlText);
^
This message indicates that Katalon naively assumes that it can use the XML Element name (ns0:modemMTAPollResponse) as a variable name in Groovy. But colon character ( : ) is not valid as a component of variable name in Groovy. Therefore compilation error occurs.
Andrew,
Your SOAP service is responding this way:
<env:Body>
<ns0:modemMTAPollResponse xmlns:ns0="pulse.suddenlink.com/ws/house-call"> <modemMTAPollResult>
To me, this response looks odd. I guess, your SOAP service might be still in development and could have some fault.
Is it possible to change your SOAP service so that it responds in the following way?
<env:Body>
<modemMTAPollResponse> <modemMTAPollResult>
Or
<env:Body>
<modemMTAPollResponse xmlns="pulse.suddenlink.com/ws/house-call"> <modemMTAPollResult>
Or
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header/>
<env:Body>
<ns0:modemMTAPollResponse xmlns:ns0="pulse.suddenlink.com/ws/house-call">
<ns0:modemMTAPollResult>
<ns0:modemCmtsMac/>
<ns0:modemDhcpServerIp>172.24.120.93
</ns0:modemDhcpServerIp>
<ns0:modemFoundOnCmts>true
</ns0:modemFoundOnCmts>
<ns0:modemHasMta>true
</ns0:modemHasMta>
<ns0:modemIsPollable>true
</ns0:modemIsPollable>...
I found that by default XMLSlurper is not XML-Namespace aware. This can be turned on by declaring namespaces with the declareNamespace Method.
It is likely that Katalon is calling XMLSlurper without calling declareNamespace method.
Assuming that the XML-Namespace xmlns=“pulse.suddenlink.com/ws/house-call” is important, then the following format of SOAP response would be best friendly to Katalon:
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Header/> <env:Body> <modemMTAPollResponse xmlns="pulse.suddenlink.com/ws/house-call"> <modemMTAPollResult> <modemCmtsMac/> <modemDhcpServerIp>172.24.120.93 </modemDhcpServerIp> <modemFoundOnCmts>true </modemFoundOnCmts> <modemHasMta>true </modemHasMta> <modemIsPollable>true </modemIsPollable>...
I suppose you can work-around the compilation error caused by a collon ( character in variable name.
Anyway, I mean, you need to change your SOAP service in order to test it with Katalon Studio.
Andrew,
Do you really need XML Namespace “pulse.suddenlink.com/ws/house-call” applied to the SOAP response? Just I doubt it.
I would suggest to you to discuss with your development team if it is necessary or not.