2017-07-18 15 views
9

私はステップにwebdriverを注入しようとしています。私はthis instructionsを使用しており、うまく動作します。キュウリの依存性注入はどのように機能しますか?

アイデアはWebDriverをステップクラスにサービスとして挿入することです。最初のステップで、次の依存関係を追加する必要があります。

<dependency> 
    <groupId>info.cukes</groupId> 
    <artifactId>cucumber-spring</artifactId> 
    <version>1.2.5</version> 
    <scope>test</scope> 
</dependency> 

依存性注入には3つの主なクラスがあります。ここではそれらを1つずつ紹介します。

enter image description here

BaseUtil

BaseUtilはWebDriverofセレンの属性を持つクラスです。クラスは非常に簡単です:

public class BaseUtil { 

private WebDriver driver; 

public WebDriver getDriver() {return driver;} 

public void setDriver(WebDriver driver) { this.driver = driver;} 
} 

フック

フッククラスは@Before, @Afterが含まれています。 testInitialier()メソッドは、webDriver ファイルをロードしてインスタンスを作成する一方、メソッドtestTearDown()はブラウザを終了させます。

public class Hook extends BaseUtil{ 

    BaseUtil base; 


    @Before 
    public void testInitializer(){ 
     File file = new 
      File(IgniteTaskApplication.class.getClassLoader().getResource("driver/chromedriver.exe").getFile()); 
     String driverPath=file.getAbsolutePath(); 
     System.out.println("Webdriver is in path: "+driverPath); 
     System.setProperty("webdriver.chrome.driver",driverPath); 
     base.setDriver(new ChromeDriver()); 
    } 

    public Hook(BaseUtil base) { 
     this.base = base; 
    } 

    @After 
    public void tearDownTest(){ 
     base.getDriver().close(); 
    } 
} 

ステップ

そして、ステップクラスがコンパイル機能ファイルから来た手順が含まれています。 Eclipseでフィーチャー・ファイルをコンパイルするには、EclipseにCucumberプラグインをインストールする必要があります。

public class ClickButton_Steps extends BaseUtil{ 
    BaseUtil base; 

    public ClickButton_Steps(BaseUtil base){ 
     super(); 
     this.base=base; 
    } 

    @When("^I clcik on the button$") 
    public void i_clcik_on_the_button() throws Throwable { 
     cb=new ClickButtonPage(base.getDriver()); 
     cb.navigator(); 
    } 

     // The other steps ... 
} 

私はどのように実行しますか?

オープン機能ファイル - >として実行 - >私はそれがにつながる方法で実行されているメソッドの順序が何であるかを疑問に思って

JUnitの

質問を実行します依存注射?

私は次のように順序があると思います:

  1. JUnitは、それがHookクラスのインスタンスを作成する必要があるので、testInitializer()はフッククラスであるtestInitializer()
  2. ある@Beforeメソッドを呼び出します。
  3. これは、Hookクラスのコンストラクタを呼び出します。

しかし、私は残りのステップを理解することはできません。多分それは全く真実ではない。私は、私は機能的なコードを持っているが、私はそれがどのように動作するのか説明できないのですか?

答えて

1

私はあなたがキュウリ、春とテストフレームワークとしてのJUnitを使用正しくあなたを理解しています。JUnitは次のライフサイクルを提供します。

@Beforeアノテーションを付けてメソッドに注釈を付けると、各テストの前にこのメソッドが呼び出されます。 @Afterはリソースのクリーニングに使用でき、各テストの後に呼び出すことができます。

あなたの試験フローを使用して、テストを実行します。

  • testInitializer
  • tearDownTest

i_clcik_on_the_buttonまた、あなたの代わりにはSystem.outのログ(SLF4J)を使用することができます。テストフローを追跡する方が簡単になります。

関連する問題