Implement if condition for xpath that does not exist Karate












1















I'm working with xml response body and trying to keep my test running even when my xpath does not exist. Here is my feature file



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


Here I want to implement the logic



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


So I want stay in same feature, same scenario, and keep my test running even if xpath does not exist and do some actions after that. How can I do so? Maybe there is try-catch logic present within karate as well? Please help.










share|improve this question























  • I just left a comment on previous one, can we consider it as closed?

    – mirchik
    Nov 22 '18 at 16:33











  • I accepted the answer

    – mirchik
    Nov 23 '18 at 19:00
















1















I'm working with xml response body and trying to keep my test running even when my xpath does not exist. Here is my feature file



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


Here I want to implement the logic



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


So I want stay in same feature, same scenario, and keep my test running even if xpath does not exist and do some actions after that. How can I do so? Maybe there is try-catch logic present within karate as well? Please help.










share|improve this question























  • I just left a comment on previous one, can we consider it as closed?

    – mirchik
    Nov 22 '18 at 16:33











  • I accepted the answer

    – mirchik
    Nov 23 '18 at 19:00














1












1








1








I'm working with xml response body and trying to keep my test running even when my xpath does not exist. Here is my feature file



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


Here I want to implement the logic



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


So I want stay in same feature, same scenario, and keep my test running even if xpath does not exist and do some actions after that. How can I do so? Maybe there is try-catch logic present within karate as well? Please help.










share|improve this question














I'm working with xml response body and trying to keep my test running even when my xpath does not exist. Here is my feature file



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


Here I want to implement the logic



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


So I want stay in same feature, same scenario, and keep my test running even if xpath does not exist and do some actions after that. How can I do so? Maybe there is try-catch logic present within karate as well? Please help.







karate






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 20 '18 at 20:36









mirchikmirchik

154




154













  • I just left a comment on previous one, can we consider it as closed?

    – mirchik
    Nov 22 '18 at 16:33











  • I accepted the answer

    – mirchik
    Nov 23 '18 at 19:00



















  • I just left a comment on previous one, can we consider it as closed?

    – mirchik
    Nov 22 '18 at 16:33











  • I accepted the answer

    – mirchik
    Nov 23 '18 at 19:00

















I just left a comment on previous one, can we consider it as closed?

– mirchik
Nov 22 '18 at 16:33





I just left a comment on previous one, can we consider it as closed?

– mirchik
Nov 22 '18 at 16:33













I accepted the answer

– mirchik
Nov 23 '18 at 19:00





I accepted the answer

– mirchik
Nov 23 '18 at 19:00












1 Answer
1






active

oldest

votes


















1














The karate.get() API will gracefully return null if an XPath does not exist. So this works:



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


Now just use the techniques in the docs on conditional logic and you should be able to do what you want. One more thing, there is nothing wrong with calling a second (re-usable) feature file, it can make things simpler in some cases.






share|improve this answer



















  • 1





    Works perfectly. Thanks for your help and quick response!

    – mirchik
    Nov 26 '18 at 17:02











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53401115%2fimplement-if-condition-for-xpath-that-does-not-exist-karate%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









1














The karate.get() API will gracefully return null if an XPath does not exist. So this works:



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


Now just use the techniques in the docs on conditional logic and you should be able to do what you want. One more thing, there is nothing wrong with calling a second (re-usable) feature file, it can make things simpler in some cases.






share|improve this answer



















  • 1





    Works perfectly. Thanks for your help and quick response!

    – mirchik
    Nov 26 '18 at 17:02
















1














The karate.get() API will gracefully return null if an XPath does not exist. So this works:



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


Now just use the techniques in the docs on conditional logic and you should be able to do what you want. One more thing, there is nothing wrong with calling a second (re-usable) feature file, it can make things simpler in some cases.






share|improve this answer



















  • 1





    Works perfectly. Thanks for your help and quick response!

    – mirchik
    Nov 26 '18 at 17:02














1












1








1







The karate.get() API will gracefully return null if an XPath does not exist. So this works:



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


Now just use the techniques in the docs on conditional logic and you should be able to do what you want. One more thing, there is nothing wrong with calling a second (re-usable) feature file, it can make things simpler in some cases.






share|improve this answer













The karate.get() API will gracefully return null if an XPath does not exist. So this works:



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


Now just use the techniques in the docs on conditional logic and you should be able to do what you want. One more thing, there is nothing wrong with calling a second (re-usable) feature file, it can make things simpler in some cases.







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 24 '18 at 4:31









Peter ThomasPeter Thomas

14.8k31847




14.8k31847








  • 1





    Works perfectly. Thanks for your help and quick response!

    – mirchik
    Nov 26 '18 at 17:02














  • 1





    Works perfectly. Thanks for your help and quick response!

    – mirchik
    Nov 26 '18 at 17:02








1




1





Works perfectly. Thanks for your help and quick response!

– mirchik
Nov 26 '18 at 17:02





Works perfectly. Thanks for your help and quick response!

– mirchik
Nov 26 '18 at 17:02




















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53401115%2fimplement-if-condition-for-xpath-that-does-not-exist-karate%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Costa Masnaga

Fotorealismo

Create new schema in PostgreSQL using DBeaver