我正在使用Appium,Cucumber-JVM構建的框架上工作。問題在Cucumber-JVM中執行@After - Appium測試
下面是我如何實例化一個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