如何在场景之前让 Appium 干净的应用程序
How to make Appium clean app before scenario
我将 Appium 与 JUnit 一起使用。还有Cucumber,不过他家的不应该干涉这里。
我需要在每个案例中安装清晰的应用程序,使它们真正独立。我使用以下 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部分没有执行,所以case之后app没有卸载...
@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();
}
}
请帮忙!
"After" 部分的问题已解决。
我也使用 Cucumber,我错误地导入了 org.junit.After
而不是 cucumber.api.java.After
!那个好难找。
在@Aftermethod 中你可以调用driver.resetApp()
@AfterMethod
public void resetApp(){
如果(空!= driver){
driver.resetApp();
}
}
如果这对您不起作用,请在功能中使用 fullReset = true
我将 Appium 与 JUnit 一起使用。还有Cucumber,不过他家的不应该干涉这里。
我需要在每个案例中安装清晰的应用程序,使它们真正独立。我使用以下 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部分没有执行,所以case之后app没有卸载...
@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();
}
}
请帮忙!
"After" 部分的问题已解决。
我也使用 Cucumber,我错误地导入了 org.junit.After
而不是 cucumber.api.java.After
!那个好难找。
在@Aftermethod 中你可以调用driver.resetApp()
@AfterMethod public void resetApp(){ 如果(空!= driver){ driver.resetApp(); } }
如果这对您不起作用,请在功能中使用 fullReset = true