iOS app会在创建新的appium会话时重置

时间:2014-07-02 12:11:11

标签: ios ios-ui-automation appium

我正在执行以下步骤

  1. 设置功能并启动ABC应用。通过提供应用路径

    capabilities.setCapability(“app”,“/ Users / Changdeojadhav / Library /Developer / Xcode / DelivedData / ABC / Build / Products / Debug-iphonesimulator / ABC.app”);  capabilities.setCapability( “bundleId”, “com.abc.ABC-演示”);

  2. 执行一些操作

  3. driver.quit()
  4. 退出驱动程序
  5. 设置Xyz应用的功能。并启动XYZ app
  6. 执行一些步骤
  7. driver.quit()
  8. 退出驱动程序
  9. 重新启动步骤#1中提到的ABC应用。 预计“App ABC应该保留它的状态”,但ABC会被重置。 我用--no-reset参数启动了appium。 关于我在这里失踪的任何想法 感谢

4 个答案:

答案 0 :(得分:0)

据我所知,目前还没有办法在转到主屏幕后重新打开应用程序而不从缓存中清除应用程序。

在过去的iOS / Appium版本中,解决方案是:

from appium import webdriver
driver = webdriver.Remote('http://0.0.0.0:4723/wd/hub', desired_caps)
driver.close_app()
app = driver.find_element_by_xpath('//UIAApplication/UIAWindow/UIAScrollView/UIAButton[@name="sampleApp"]')
app.click()

然而,这目前崩溃了Appium

当我记录github问题时,我会更新这个问题。

答案 1 :(得分:0)

Appium帮助页面说它只支持在没有Selendroid的Android的单个测试会话中进行多个应用测试:

  

iOS :支持在一个会话中自动化多个应用:否

     

Android :支持在一个会话中自动执行多个应用:是(但不是在使用Selendroid后端时)

     

http://appium.io/slate/en/master/?ruby#toc_27

我猜这就是你遇到这个问题的原因,而且它很可能是一个仪器/ XCode问题。

答案 2 :(得分:0)

我能够重新启动相同的应用程序而不会在运行Mavericks的Mac Mini上运行Xcode 6.1的Appium 1.3.1重置其状态。我没有尝试在发布之间启动另一个应用程序。我从C#开始实现自动化。

    protected AppiumDriver GetAppiumDriver(bool forRestart = false)
    {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.SetCapability("appium-version", "1.0");
        capabilities.SetCapability("platformName", "iOS");
        capabilities.SetCapability("platformVersion", "7.1");
        capabilities.SetCapability("deviceName", "iPhone Simulator");
        capabilities.SetCapability("app", _appPath);
        capabilities.SetCapability("locationServicesEnabled", true);
        if (forRestart)
        {
            capabilities.SetCapability("noReset", true);
        }
        AppiumDriver driver = new AppiumDriver(_serverUrl), capabilities, new TimeSpan(0, 5, 0));
        return driver;
    }

    public void iOSMobileAppBasicUITest()
    {
        // Initially Launch the app with the noReset capability at its default value of false to ensure a clean starting point.
        _driver = GetAppiumDriver(false);

        //Shut down the app.
        _driver.Quit();

        // Launch the app again, this time with the noReset capability set to true.
        _driver = GetAppiumDriver(true);

        // Use _driver to do whatever UI automation is desired.

        // Optional: Send the app to the background so that iOS does state preservation.
        _driver.BackgroundApp(3);

        // Close the app.
        _driver.CloseApp();
        // Alternative: _driver.Quit();

        // Launch the app.
        _driver.LaunchApp();
        // Alternative: _driver = GetAppiumDriver(true);
        ...

答案 3 :(得分:-1)

据我所知,Appium默认运行在快速重置模式,它会在会话结束时尝试清除应用程序的数据(由于{{1}的调用} 在这种情况下)。如果您想要保留应用的数据,选项quit()应该适合您。