title: Annotations not firing in SharedDriver with cucumber-jvm
body: <p>This is driving me nuts.  I'm running a test framework using cucumber-jvm and trying to get it to take screenshots.
  I have looked at the java-webbit-websockets-selenium example that's provided and have implemented the same method of calling my webdriver using the SharedDriver module.
  For some reason, my @Before and @After methods are not being called (I've put print statements in there).  Can anyone shed any light?</p>
  
  <p>SharedDriver:</p>
  
  <pre><code>package com.connectors;
  
  import cucumber.api.java.After;
  import cucumber.api.java.Before;
  import cucumber.api.Scenario;
  import org.openqa.selenium.Dimension;
  import org.openqa.selenium.OutputType;
  import org.openqa.selenium.WebDriver;
  import org.openqa.selenium.WebDriverException;
  import org.openqa.selenium.chrome.ChromeDriver;
  import org.openqa.selenium.firefox.FirefoxDriver;
  import org.openqa.selenium.firefox.FirefoxProfile;
  import org.openqa.selenium.support.events.EventFiringWebDriver;
  
  import java.util.concurrent.TimeUnit;
  
  
  public class SharedDriver extends EventFiringWebDriver {
  
  
  
  
      private static final WebDriver REAL_DRIVER = new FirefoxDriver();
  
          private static final Thread CLOSE_THREAD = new Thread() {
              @Override
              public void run() {
                  REAL_DRIVER.close();
              }
          };
  
          static {
              Runtime.getRuntime().addShutdownHook(CLOSE_THREAD);
          }
  
          public SharedDriver() {
              super(REAL_DRIVER);
              REAL_DRIVER.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
              REAL_DRIVER.manage().window().setSize(new Dimension(1200,800));
              System.err.println("DRIVER");
          }
  
          @Override
          public void close() {
              if(Thread.currentThread() != CLOSE_THREAD) {
                  throw new UnsupportedOperationException("You shouldn't close this WebDriver. It's shared and will close when the JVM exits.");
              }
              super.close();
          }
  
          @Before()
          public void deleteAllCookies() {
              manage().deleteAllCookies();
              System.err.println("BEFORE");
          }
  
          @After
          public void embedScreenshot(Scenario scenario) {
              System.err.println("AFTER");
              try {
                  byte[] screenshot = getScreenshotAs(OutputType.BYTES);
                  scenario.embed(screenshot, "image/png");
              } catch (WebDriverException somePlatformsDontSupportScreenshots) {
                  System.err.println(somePlatformsDontSupportScreenshots.getMessage());
              }
          }
  
  
      }
  </code></pre>
  
  <p>Step file:</p>
  
  <pre><code>package com.tests;
  
  import com.connectors.BrowserDriverHelper;
  import com.connectors.SharedDriver;
  import com.connectors.FunctionLibrary;
  
  import cucumber.api.Scenario;
  import cucumber.api.java.After;
  import cucumber.api.java.Before;
  import cucumber.api.java.en.And;
  import cucumber.api.java.en.Given;
  import cucumber.api.java.en.Then;
  import cucumber.api.java.en.When;
  import cucumber.runtime.PendingException;
  import org.openqa.selenium.*;
  
  
  import java.io.File;
  import java.util.List;
  import java.util.concurrent.TimeUnit;
  import static org.junit.Assert.*;
  import org.openqa.selenium.OutputType;
  import org.openqa.selenium.support.events.EventFiringWebDriver;
  
  /**
   * Created with IntelliJ IDEA.
   * User: stuartalexander
   * Date: 23/11/12
   * Time: 15:18
   * To change this template use File | Settings | File Templates.
   */
  public class addComponentsST {
      String reportName;
      String baseUrl = BrowserDriverHelper.getBaseUrl();
      private final WebDriver driver;
  
      public addComponentsST(SharedDriver driver){
          this.driver = driver;
          driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
      }
  
      @Given("^I have navigated to the \"([^\"]*)\" of a \"([^\"]*)\"$")
      public void I_have_navigated_to_the_of_a(String arg1, String arg2) throws Throwable {
          // Express the Regexp above with the code you wish you had
          assertEquals(1,2);
          throw new PendingException();
      }
  </code></pre>
  
  <p>CukeRunner:</p>
  
  <pre><code>package com.tests;
  
  import org.junit.runner.RunWith;
  
  import cucumber.api.junit.Cucumber;
  
  @RunWith(Cucumber.class)
  @Cucumber.Options(tags = {"@wip"}, format = { "pretty","html:target/cucumber","json:c:/program files (x86)/jenkins/jobs/cucumber tests/workspace/target/cucumber.json" }, features = "src/resources/com/features")
  public class RunCukesIT {
  }
  </code></pre>