2012-11-23 11 views
5

これは私をナットにしています。私はcucumber-jvmを使ってテストフレームワークを実行しており、スクリーンショットを取得しようとしています。 私は、提供されているjava-webbit-websockets-seleniumの例を見てきましたが、SharedDriverモジュールを使ってWebdriverを呼び出すのと同じ方法を実装しました。 何らかの理由で、私の@Beforeと@Afterメソッドが呼び出されていません(私はそこにprintステートメントを入れました)。誰でも光を当てることはできますか?cucumber-jvmのSharedDriverでアノテーションが実行されない

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


    } 

ステップファイル:

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

答えて

5

RunCukesIT、即ちcom.testsと同じパッケージにSharedDriverを置きます。

JUnitランナーを使用する場合、グルーはユニットテストパッケージ(ここではcom.tests)になります。ここで、cucumber-jvmは注釈のクラスを「スキャン」します。

+1

ありがとうございました!私は年齢のためにこの問題に対して私の頭部を打ち倒してきました:) – theawesome

+0

私はこのことを難しい方法で見つけ出し、後で答えを見つけなければならないほど不幸でした。 +1ですが。 – Corey

+0

こんにちは。これについての質問をしてみましょう。サイトの各ページに複数のステップファイルと複数のページオブジェクトがある場合は、どこでWebDriverをインスタンス化する必要がありますか。現在、すべてのページオブジェクトクラスは、フレームワークのすべてのインスタンス化を含むBasePage.classを拡張します。しかし、私はそれを処理する方法を共有ドライバの場合に混乱している!ありがとうございました! – brobee

関連する問題