В настоящее время я работаю над автоматизированными тестовыми случаями в студии Catalon Я отправляю XML запросы в конечную точку и получаю ответ XML. Всякий раз, когда я хочу проверить текстовый узел элемента ответа xml, он выдает RuntimeException, что пространство имен для префикса не объявлено. Хотя пространство имен xsi объявлено в ответе xml.
Ответ XML выглядит как
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envel"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
...
...
</SOAP-ENV:Envelope>
Очевидно, пространство имен для префикса xsi имеет вид уже определено в конверте SOAP.
Проверка в Katalon Studio
import static org.assertj.core.api.Assertions.*
import com.kms.katalon.core.testobject.RequestObject
import com.kms.katalon.core.testobject.ResponseObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import com.kms.katalon.core.webservice.verification.WSResponseManager
import groovy.json.JsonSlurper
import internal.GlobalVariable as GlobalVariable
RequestObject request = WSResponseManager.getInstance().getCurrentRequest()
ResponseObject response = WSResponseManager.getInstance().getCurrentResponse()
WS.verifyResponseStatusCode(response, 200)
assertThat(response.getStatusCode()).isEqualTo(200)
WS.verifyElementText(response, 'getQuoteResponse.Response.Tarifierung.Verkaufsprodukt.Produkt.Beitrag[0].Betrag.Betrag', '630.68')
Это подтверждает, что код ответа равен 200. Это работает, как задумано. После этого я хочу убедиться, что текстовое значение данного узла getQuoteResponse.Response.Tarifierung.Verkaufsprodukt.Produkt.Beitrag[0].Betrag.Betrag
является ожидаемым значением. Путь для этого узла напрямую берется из ответа с CTRL + K
. Это должно работать в моих глазах. Но это не так.
Исключение
ERROR: 'Namespace für Präfix "xsi" wurde nicht deklariert.'
2020-01-17 16:57:56.439 ERROR c.k.k.core.keyword.internal.KeywordMain - ❌ Unable to verify element text (Root cause: javax.xml.transform.TransformerException: java.lang.RuntimeException: Namespace für Präfix "xsi" wurde nicht deklariert.
Сообщение об ошибке написано на немецком языке и означает, что пространство имен для префикса "xsi" не было объявлено. Как уже показано выше, объявление определенно присутствует в ответе.
Я пробовал другой подход с XmlSlurper, так как XmlSlurper поддерживает пространство имен. Тот же результат.
String getQuoteResponse = response.getResponseBodyContent()
def data = new XmlSlurper().parseText(getQuoteResponse)
def betrag = data.getQuoteResponse.Response.Tarifierung.Verkaufsprodukt.Produkt.Beitrag[0].Betrag.Betrag.text()
println("Betrag: " + betrag)
При вызове response.getResponseBodyContent()
.
выдается ошибка. Кто-нибудь сталкивался с такой же проблемой и, возможно, уже нашел решение этой проблемы?