title: How do I close() and quit() Selenium driver without affecting other steps in Cucumber and Selenium?
body: <p>I have two feature files in <code>Cucumber</code> that are linked to corresponding step files. The problem is that when one of the step file finishes execution then it closes all the browser windows (because of <code>driver.quit()</code>) whereby killing the execution of other step file which hasn't done processing yet. </p>
  
  <p>Here each step file opens a new browser window, executes the tests within it and then closes and quits the browser. Currently I have just two step files but in the future there are going to be many more. </p>
  
  <p>Is there anything in <code>Cucumber</code> that would always get executed after all the steps are executed?</p>
  
  <p>How do I solve this problem?</p>
  
  <p><strong>HelpStep.java</strong></p>
  
  <pre><code>@Ignore
  public class HelpStep {
  
      private WebDriver driver;
  
      @Before
      public void setup() {
          System.out.println("Into the setup method of HelpStep...");
          this.driver = BrowserConfig.getIEWebDriver();
      }
  
      @Given("^The user is on the Help page$")
      public void onPage() {
          System.out.println("The user is on the Help page");
      }
  
      @When("^The user clicks on the links within the Help page$")
      public void clickLinks() {
          System.out.println("The user clicks on the links within the Help page");
      }
  
      @Then("^The user is navigated to that section$")
      public void validate() {
          System.out.println("The user is navigated to that section");
      }
  
      @After
      public void cleanUp() {
          System.out.println("Into the cleanUp method of HelpStep...");
          //FOLLOWING METHOD CALL KILLS ALL THE OPEN BROWSERS ALSO :(
          BrowserConfig.releaseResources(this.driver);
      }
  
  }
  </code></pre>
  
  <p><strong>LinkStatsStep.java</strong></p>
  
  <pre><code>@Ignore
  public class LinkStatsStep {
  
      private WebDriver driver;
  
      @Before
      public void setup() {
          System.out.println("Into the setup method of LinkStatsStep...");
          this.driver = BrowserConfig.getIEWebDriver();
      }
  
      @Given("^The user is on the Link Statistics page$")
      public void onPage() {
          System.out.println("The user is on the Link Statistics page");
      }
  
      @When("^The user does a search$")
      public void clickLinks() {
          System.out.println("The user does a search");
      }
  
      @Then("^The user is displayed search result$")
      public void validate() {
          System.out.println("The user is displayed search result");
      }
  
      @After
      public void cleanUp() {
          System.out.println("Into the cleanUp method of LinkStatsStep...");
          BrowserConfig.releaseResources(this.driver);
      }
  
  }
  </code></pre>
  
  <p><strong>TestRunner.java</strong></p>
  
  <pre><code>@RunWith(Cucumber.class)
  @CucumberOptions(
          plugin = {"pretty", "json:target/cucumber-reports/cucumber.json"},
          features = {"src/test/resources/features"})
  public class TestRunner extends ApplicationTests {
  
  }
  </code></pre>
  
  <p><strong>BrowserConfig.java</strong></p>
  
  <pre><code>public class BrowserConfig {
  
      private static final String IE_DRIVER_EXE = "drivers/IEDriverServer.exe";
      private static final String WEBDRIVER_IE_DRIVER = "webdriver.ie.driver";
      private static final String BASE_URL = "https://www.google.com";
  
      public static WebDriver getIEWebDriver() {
          String filePath = ClassLoader.getSystemClassLoader().getResource(IE_DRIVER_EXE).getFile();
          System.setProperty(WEBDRIVER_IE_DRIVER, filePath);
          InternetExplorerOptions options = new InternetExplorerOptions().requireWindowFocus();
          options.setCapability(INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
          options.setCapability(ENABLE_ELEMENT_CACHE_CLEANUP, true);
          options.setCapability(IE_ENSURE_CLEAN_SESSION, true);
          options.setCapability(ACCEPT_SSL_CERTS, true);
          options.setCapability("nativeEvents", false);
          options.setCapability(INITIAL_BROWSER_URL, BASE_URL);
          System.out.println("Initializing IE Driver now...........");
          WebDriver driver = new InternetExplorerDriver(options);
          driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
          return driver;
      }
  
      public static void releaseResources(WebDriver driver) {
          System.out.println("Releasing resources now.....");
          if (null != driver) {
              driver.close();
              driver.quit(); //CLOSES ALL THE OPEN BROWSER SESSIONS LEAVING OTHER STEP EXECUTIONS INCOMPLETE
          }
      }
  
  }
  </code></pre>
  
  <p><strong>help.feature</strong></p>
  
  <pre><code>Feature: Check that the user is able to navigate to Help page
  
    Scenario:
      Given The user is on the Help page
      When The user clicks on the links within the Help page
      Then The user is navigated to that section
  </code></pre>
  
  <p><strong>link-stats.feature</strong></p>
  
  <pre><code>Feature: Check that the user is able to navigate to Link Statistics page
  
    Scenario:
      Given The user is on the Link Statistics page
      When The user does a search
      Then The user is displayed search result
  </code></pre>
  
  <p><strong>System.outs</strong></p>
  
  <pre><code>Initializing IE Driver now...........
  Listening on port 47613
  Into the setup method of LinkStatsStep...
  Initializing IE Driver now...........
  Listening on port 5009
  The user is on the Help page
  The user clicks on the links within the Help page
  The user is navigated to that section
  Into the cleanUp method of HelpStep...
  Releasing resources now.....
  Into the cleanUp method of LinkStatsStep...
  Releasing resources now.....
  
  
  Into the setup method of HelpStep...
  Initializing IE Driver now...........
  Listening on port 17291
  Into the setup method of LinkStatsStep...
  Initializing IE Driver now...........
  Listening on port 23793
  The user is on the Link Statistics page
  The user does a search
  The user is displayed search result
  Into the cleanUp method of HelpStep...
  Releasing resources now.....
  Into the cleanUp method of LinkStatsStep...
  Releasing resources now.....
  </code></pre>