私は、Appium、Cucumber-JVMを使用して構築されたフレームワークに取り組んでいます。Cucumber-JVM - Appiumテストで@Afterを実行する際の問題
以下は、私がappiumドライバをインスタンス化方法についての抜粋です。
今 private WebDriverFactory() {
}
/**
* Gets the factory instance.
*
* @return
*/
public static WebDriverFactory getInstance() {
if (factory == null)
factory = new WebDriverFactory();
return factory;
}
public AppiumDriver getAppiumDriver() throws IOException, NoSuchFieldException {
if (appiumDriver == null || !isSessionActive(appiumDriver)) {
......instantiate driver......
}return appiumDriver;
}
*/
private boolean isSessionActive(AppiumDriver driver) {
return !driver.toString().contains("(null)");
// return driver.getCapabilities()!=null?true:false;
}
public void closeAppiumDriver() {
if ((appiumDriver != null || isSessionActive(appiumDriver))) {
appiumDriver.closeApp();
appiumDriver.quit();
if (appiumService != null)
if (appiumService.isRunning())
appiumService.stop();
}
factory = null;
appiumDriver = null;
}
、私のstepDefsでは、私は以下のようにキュウリ@Afterフックを配置しているが、そのが散発的に私にNullpointerexecption
エラーを与えます:java.lang.NullPointerException at appiumdriver.WebDriverFactory.isSessionActive(WebDriverFactory.java:146) at appiumdriver.WebDriverFactory.closeAppiumDriver(WebDriverFactory.java:159) at stepDefs.An droidTestsCommonStepDefs_usingFactory.teardown(AndroidTestsCommonStepDefs_usingFactory.java:140)
@After
public void embedScreenshot(Scenario scenario) throws IOException, NoSuchFieldException {
try {
byte[] screenshot = WebDriverFactory.getInstance().getAppiumDriver().getScreenshotAs(OutputType.BYTES);
scenario.embed(screenshot, "image/png");
} catch (WebDriverException somePlatformDontsupportSnapshot) {
System.err.println(somePlatformDontsupportSnapshot.getMessage());
}
}
@After
public void teardown() throws IOException, NoSuchFieldException {
System.out.println("Ran the tearDown.");
WebDriverFactory.getInstance().closeAppiumDriver();
}
私はキュウリランナーの内側ティアダウンの上@AfterClassタグ内の()のコードを入れて試してみましたが、それは毎回トリガされていませんでした。また、Cucumber Runnerクラスで@Afterを使用することはできません。
このようなシナリオをどのように扱うか? また、将来、私はテストスイートの一部として、ドライバーに異なるデバイスをインスタンス化して、driver.closeApp()をトリガーしたいかもしれません。 &設定ドライバ= null;私のために重要になるだろう。
親切現在、両方のフックが任意の順序で実行することができた後
おかげ
確実にすることができます。私はそれを試みます。最終的にこの場所を指しているので、以下のコードでは問題はありませんか?private boolean isSessionActive(AppiumDriver driver){ return!driver.toString()。contains( "(null)"); – user2451016