2012-11-23 12 views
5

To doprowadza mnie do szału. Używam szkieletu testowego przy użyciu cucumber-jvm i próbuję zrobić to, aby wykonać zrzuty ekranu. Przyjrzałem się przykładowi java-webbit-websockets-selenium, który został dostarczony i zaimplementowałem tę samą metodę wywoływania mojego webdrivera przy użyciu modułu SharedDriver. Z jakiegoś powodu moje metody @Before i @After nie są wywoływane (dodałem tam instrukcje drukowania). Czy ktoś może rzucić jakiekolwiek światło?Adnotacje nie uruchamiane w usłudze SharedDriver z ogórkiem-jvm

SharedDriver:

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()); 
      } 
     } 


    } 

Etap plików

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(); 
    } 

CukeRunner:

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 { 
} 

Odpowiedz

5

SharedDriver umieścić w tym samym opakowaniu, jak RunCukesIT tj com.tests.

Podczas używania prowadnicy JUnit klej staje się pakietem testów jednostkowych (tutaj com.tests), a tutaj ogórek-jvm "skanuje" klasy pod kątem adnotacji.

+1

Dziękuję bardzo! Przez wieki walczyłem z tym problemem o głowę :) – theawesome

+0

Byłem nieszczęśliwy, że muszę wymyślić to na własnej skórze i natknąć się na twoją odpowiedź później. +1 Chociaż. – Corey

+0

Cześć chłopaki. Pozwól, że zadam pytanie w tej sprawie. Gdzie muszę utworzyć instancję WWW, jeśli mam wiele plików kroków i wiele obiektów strony dla każdej strony w witrynie. W tej chwili każda klasa obiektu strony rozszerza BasePage.class, która zawiera całą instancję dla frameworka. Ale jestem zdezorientowany w przypadku współdzielonego sterownika, jak mogę sobie z tym poradzić! Dziękuję Ci! – brobee