2012-11-23 7 views
5

Questo mi sta facendo impazzire. Sto eseguendo un framework di test usando cetriolo-jvm e cercando di fargli fare screenshot. Ho esaminato l'esempio di java-webbit-websockets-selenium fornito e ho implementato lo stesso metodo di chiamata al mio webdriver utilizzando il modulo SharedDriver. Per qualche motivo, i miei metodi @Before e @After non vengono chiamati (ho inserito istruzioni di stampa). Qualcuno può chiarire?Annotazioni non attivate in SharedDriver con cetriolo-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()); 
      } 
     } 


    } 

file STEP:

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

risposta

5

Mettere SharedDriver nello stesso pacchetto come RunCukesIT, vale a dire com.tests.

Quando si utilizza il canale JUnit, la colla diventa il pacchetto di test dell'unità (qui com.tests), ed è qui che cucumber-jvm "scansiona" le classi per le annotazioni.

+1

Grazie mille! Mi sono scontrato per anni con questo problema :) – theawesome

+0

Sono stato sfortunato abbastanza da doverlo capire nel modo più duro e incappare in una risposta successiva. +1 Anche se. – Corey

+0

Ciao ragazzi. Permettimi di fare una domanda su questo. Dove è necessario creare un'istanza del webdriver se ho più file di passaggi e più oggetti di pagina per ogni pagina del sito. In questo momento, ogni classe di oggetto di pagina estende BasePage.class che contiene tutta l'istanza per il framework. Ma sono confuso in caso di driver condiviso come posso gestirlo! Grazie! – brobee