Реализуем, если условие для xpath не существует Каратэ - PullRequest
0 голосов
/ 20 ноября 2018

Я работаю с телом ответа 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 делаетне существует и делать некоторые действия после этого.Как я могу это сделать?Может быть, в каратэ также присутствует логика трик-трик?Пожалуйста, помогите.

1 Ответ

0 голосов
/ 24 ноября 2018

API karate.get() будет корректно возвращать ноль, если XPath не существует.Так что это работает:

* 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'

Теперь просто используйте приемы из документации по условной логике , и вы сможете делать то, что хотите.Еще одна вещь, в вызове второго (многократно используемого) файла функций нет ничего плохого, в некоторых случаях это может упростить задачу.

...