实现不存在空手道的xpath的条件

时间:2018-11-20 20:36:02

标签: karate

我正在使用xml响应主体,即使我的xpath不存在,也试图保持测试运行。这是我的功能文件

When request read("propertyAvail.xml")
And header CWT_DEBUG_LABELS = true
And header CWT_DEBUG_RATES_RANK_LABELS = true
And header Content-Type = "text/xml"
And header CWT_TRAVELER_ID = "A:65887F3"
And header CWT_TRAVELER_ID_TYPE = "portrait"
And method post
Then match response //BookingChannel[2]/RatePlan[1]/TPA_Extensions/InPolicy == "#notnull"
And def inPol = //BookingChannel[2]/RatePlan[1]/TPA_Extensions/InPolicy
And def inPolVal = //BookingChannel[2]/RatePlan[1]/TPA_Extensions/Labels/Label[@Type="CWT_INPOLICY_VALUE"]
And def rateIsInPolicy = Java.type("com.cwt.karate_scripts.CalculationHelper").isInPolicy(inPol, inPolVal)
And match rateIsInPolicy == true

在这里我要实现逻辑

if (//BookingChannel[2]/RatePlan[1]/TPA_Extensions/InPolicy -> does not exist){
  And def inPolVal = 0.0  
  And def rateIsInPolicy = Java.type("com.cwt.karate_scripts.CalculationHelper").isInPolicy(inPol, inPolVal)
  And match rateIsInPolicy == true

else{ 

  And def inPolVal = //BookingChannel[2]/RatePlan[1]/TPA_Extensions/Labels/Label[@Type="CWT_INPOLICY_VALUE"]
  And def rateIsInPolicy = Java.type("com.cwt.karate_scripts.CalculationHelper").isInPolicy(inPol, inPolVal)
  And match rateIsInPolicy == true

所以我想保持相同的功能,相同的场景,并且即使xpath不存在,也要保持测试运行,然后再执行一些操作。我该怎么办?也许空手道中也存在try-catch逻辑?请帮忙。

1 个答案:

答案 0 :(得分:1)

如果XPath不存在,则karate.get() API将正常返回null。如此有效:

* def xml1 = <root><one>1</one></root>
* def temp = karate.get('$xml1/root/one')
* def result = temp ? 'yes' : 'no'
* match result == 'yes'

* def xml2 = <root><two>2</two></root>
* def temp = karate.get('$xml2/root/one')
* def result = temp ? 'yes' : 'no'
* match result == 'no'

现在,只需使用conditional logic上的文档中的技术即可,您应该可以做自己想做的事情。还有一件事,调用第二个(可重复使用的)功能文件没有任何问题,在某些情况下,它可以使事情变得更简单。