Приложение iOS сбрасывается при создании нового сеанса appium

#ios #ios-ui-automation #appium

#iOS #ios-ui-automation #appium

Вопрос:

Я выполняю следующие шаги

  1. Установите возможности и запустите приложение ABC. Указав путь к приложению

    возможности.setCapability («приложение», «/Users/changdeojadhav/Library/Developer/Xcode/DerivedData/ABC/Build/Products/Debug-iphonesimulator/ABC.app») ; capabilities.setCapability(«BundleID», «com.abc.ABC-Demo»);

  2. Выполните некоторые действия

  3. завершите работу драйвера с помощью driver.quit()
  4. Установите возможности для приложения Xyz. И запустите приложение XYZ
  5. Выполните несколько шагов
  6. завершите работу драйвера с помощью driver.quit()
  7. перезапустите приложение ABC, как указано в шаге # 1. Ожидается, что «Приложение ABC должно сохранить свое состояние», но ABC сбрасывается. Я запустил appium с параметром —no-reset. Любая идея о том, чего мне здесь не хватает, Спасибо

Ответ №1:

Насколько я могу судить, в настоящее время нет решения для повторного открытия приложения после перехода на главный экран без очистки приложения от кэша.

В прошлых версиях 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.

Ответ №2:

На странице справки Appium указано, что он поддерживает только тестирование нескольких приложений в одном сеансе тестирования для Android без Selendroid:

iOS: Поддержка автоматизации нескольких приложений за один сеанс: Нет

Android: Поддержка автоматизации нескольких приложений за один сеанс: да (но не при использовании серверной части Selendroid)

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

Я предполагаю, что именно поэтому у вас возникла эта проблема, и, скорее всего, это проблема с инструментами / XCode.

Ответ №3:

Я смог перезапустить то же приложение без сброса его состояния с помощью Appium 1.3.1, работающего с Xcode 6.1 на Mac Mini под управлением Mavericks. Я не пробовал запускать другое приложение между запусками. Я управляю автоматизацией с 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);
        ...
  

Ответ №4:

Как я знал, Appium по умолчанию работает в режиме быстрого сброса и пытается очистить данные приложения по окончании сеанса (в результате вызова quit() в данном случае). Если вы хотите сохранить данные приложения, эта опция --no-reset должна работать для вас.

Комментарии:

1. -данные приложения, сохраненные после очистки приложения из кэша, не будут сброшены. Это не имитирует нажатие кнопки home и повторное открытие приложения.