我使用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;
}
我所做的是检查是否在每个案例之前安装了应用程序,如果是,则重新安装。不幸的是,当我卸载应用程序时,会话被破坏,测试用例失败。
编辑: 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
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();
}
}
请帮忙!
答案 0 :(得分:0)
“After”部分问题解决了。
我也使用Cucumber,错误地导入了org.junit.After
而不是cucumber.api.java.After
!那个很难找到。
答案 1 :(得分:0)
在@Aftermethod中,您可以调用driver.resetApp()
@AfterMethod public void resetApp(){ if(null!= driver){ driver.resetApp(); } }
如果这不起作用,请在功能中使用fullReset = true