如何在场景之前制作Appium clean应用程序

时间:2015-07-24 10:02:40

标签: java junit cucumber appium

我使用Appium和JUnit。也是黄瓜,但他的人不应该在这里干涉。

我需要在每个案例中安装明确的应用程序,以使它们真正独立。我使用以下IOSDriver设置:

    public static void initDriver(boolean noReset) throws MalformedURLException {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName", "iPhone 4s");
        capabilities.setCapability("noReset", noReset);
        capabilities.setCapability("autoAcceptAlerts",true);
        driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
    }

   public void quitDriver() {
        driver.executeScript("au.backgroundApp(0)");
        driver.quit();
        driver = null;
    }

@Before problem

我所做的是检查是否在每个案例之前安装了应用程序,如果是,则重新安装。不幸的是,当我卸载应用程序时,会话被破坏,测试用例失败。

编辑: initDriver()方法会导致驱动程序自动启动并安装应用程序,因此即使先前未在设备上安装该应用程序,也会执行此if(isAppInstalled)部分。

     @Before
        public void beforeScenario() throws MalformedURLException {
            initDriver(false);
            if(IosConfig.getDriver().isAppInstalled(StringConfiguration.getiOSappBundleId())) {
                System.out.println("THE APP IS INSTALLED. UNINSTALLING...");
                IosConfig.getDriver().removeApp(StringConfiguration.getiOSappBundleId());
            }
       }

@After问题[已解决]

此外,我的@After部分未执行,因此在案例结束后应用程序未被卸载...

@After
    public void tearDown(Scenario scenario) {
        try {
            if(scenario.isFailed()) {
                final byte[] screenshot = IosConfig.getDriver().getScreenshotAs(OutputType.BYTES);
                scenario.embed(screenshot, "image/png");
                IosConfig.getDriver().closeApp();
          IosConfig.getDriver().removeApp(StringConfiguration.getiOSappBundleId());
            }
        } finally {
            IosConfig.getDriver().closeApp();
         IosConfig.getDriver().removeApp(StringConfiguration.getiOSappBundleId());
            quitDriver();

        }
    }

请帮忙!

2 个答案:

答案 0 :(得分:0)

“After”部分问题解决了。

我也使用Cucumber,错误地导入了org.junit.After而不是cucumber.api.java.After!那个很难找到。

答案 1 :(得分:0)

  1. 在@Aftermethod中,您可以调用driver.resetApp()

    @AfterMethod   public void resetApp(){       if(null!= driver){           driver.resetApp();       }   }

  2. 如果这不起作用,请在功能中使用fullReset = true