ステップにwebdriver
を挿入しようとしています。私は この手順 を使用しましたが、うまく機能します。
アイデアは、WebDriverをサービスとしてステップクラスに挿入することです。最初のステップで、次の依存関係を追加する必要があります。
_<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-spring</artifactId>
<version>1.2.5</version>
<scope>test</scope>
</dependency>
_
依存関係の注入に関係する3つの主要なクラスがあります。ここでは、それらを1つずつ紹介します。
BaseUtil
BaseUtilは、WebDriverofSeleniumの属性を持つクラスです。クラスは非常に単純です。
_public class BaseUtil {
private WebDriver driver;
public WebDriver getDriver() {return driver;}
public void setDriver(WebDriver driver) { this.driver = driver;}
}
_
フック
Hookクラスには_@Before, @After
_が含まれています。 testInitialier()メソッドはwebDriverfileをロードしてインスタンスを作成し、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();
}
}
_
ステップ
また、stepsクラスには、コンパイルされた機能ファイルから取得されたステップが含まれています。 Eclipseで機能ファイルをコンパイルするには、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で実行
質問
依存性注入につながる方法でメソッドを実行する順序は何ですか?
順序は次のとおりだと思います。
testInitializer()
である_@Before
_メソッドを呼び出しますtestInitializer()
はHookクラスにあるため、Hook
クラスのインスタンスを作成する必要があります。しかし、私は残りのステップを理解することはできません。多分それでさえ全く真実ではありません。つまり、関数型コードはありますが、それがどのように機能するか説明できませんか?
私が正しく理解しているように、あなたはJUnitをcucumber-springのテストフレームワークとして使用しています。 JUnitは次のライフサイクルを提供します。
メソッドにアノテーション@Beforeでアノテーションを付けると、各テストの前にこのメソッドが呼び出されます。 @Afterについては、リソースのクリーニングに使用でき、各テストの後に呼び出すことができます。
テストを実行するときのテストフロー:
さらに、System.out.printlnの代わりにロギング(slf4j)を使用すると、テストフローの追跡が容易になります。