1

I have a scenario which is a series of rest api calls but in the middle is a section that executes a few steps within a chrome browser. The browser steps are common to another scenario so I tried to extract the browser steps into a separate feature that could then be called from multiple scenarios.

When the main scenario executes it executes the browser feature but fails to auto-close the browser after execution. I read in the documentation "Karate will close the browser automatically after a Scenario unless the driver instance was created before entering the Scenario" . The configure driver code is in the callable scenario.

I also tried caling quit() but this resulted in the error: "The forked VM terminated without properly saying goodbye. VM crash or System.exit called?"

Does anyone know how I can ensure the browser closes in this circumstance?

UPDATE: As suggested by @PeterThomas I started to craft a full example to replicate this when I discovered that to replicate is actually quite simple.

If the UI feature is called like this then the browser is closed after execution:

* call read('classpath:/ui/callable/GoogleSearch.feature')

If called like this then the browser remains open:

* def result = call read('classpath:/ui/callable/GoogleSearch.feature')

My UI scenario scrapes a value from a web page which I then stored within a '* def ticket' within the called feature. I was hoping to access it via result.ticket. As I am unable to do this I am successfully using the following:

* def extractedTicket = { value: '' }
* call read('classpath:/ui/callable/GoogleSearch.feature')
* def ticket = extractedTicket.value

And within the called feature:

* set extractedTicket.value = karate.extract(val, '.ticket=(.*?)&', 1)
Derek S
  • 11
  • 2

1 Answers1

0

First, I think you should provide a way to replicate this, so that we can investigate and fix this for everyone. Please follow this process: https://github.com/karatelabs/karate/wiki/How-to-Submit-an-Issue

That said, maybe for just getting Chrome to do a few steps you should just use the Java API - and you can call it from wherever you want, even within a feature file using Java interop: https://github.com/karatelabs/karate#java-api

Also see if this answer gives you any pointers: https://stackoverflow.com/a/60387907/143475

Peter Thomas
  • 54,465
  • 21
  • 84
  • 248