首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Cucumber-JVM - Appium测试中执行@After中的问题

在Cucumber-JVM - Appium测试中执行@After中的问题
EN

Stack Overflow用户
提问于 2017-08-03 09:15:29
回答 1查看 192关注 0票数 0

我正在开发一个使用Appium,Cucumber-JVM构建的框架。

下面是我如何实例化appium驱动程序的一个片段:

代码语言:javascript
运行
复制
     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中,我把Cucumber @跟在下面的钩子下面,但它偶尔给我带来了Nullpointerexecption。

错误: appiumdriver.WebDriverFactory.isSessionActive(WebDriverFactory.java:146) at appiumdriver.WebDriverFactory.closeAppiumDriver(WebDriverFactory.java:159) at stepDefs.AndroidTestsCommonStepDefs_usingFactory.teardown(AndroidTestsCommonStepDefs_usingFactory.java:140)的java.lang.NullPointerException

代码语言:javascript
运行
复制
    @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();
}

我尝试过将上面的teardown()代码放在Cucumber runner中的@AfterClass标记中,但并不是每次都会触发它。另外,我无法在Cucumber Runner类中使用“After”。

如何处理这种情况?而且,将来我可能希望在驱动程序中实例化不同的设备,作为测试套件的一部分,因此触发driver.closeApp();&设置driver =null对我来说至关重要。

请告知

谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-08-03 12:57:21

目前,这两个后置钩子可以以任何顺序运行。因此,您正在断断续续地获得异常。您需要在后置注释中使用order属性,以确保最后执行驱动程序闭包。

在订单属性值较高的情况下,先执行具有较低值的属性值。注释前的相反行为。

对于嵌入方法,可以使用@After(order=20)和驱动程序闭包@After(order=10)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45479866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档