#ios #ios-ui-automation #appium
#iOS #ios-ui-automation #appium
Вопрос:
Я выполняю следующие шаги
-
Установите возможности и запустите приложение ABC. Указав путь к приложению
возможности.setCapability («приложение», «/Users/changdeojadhav/Library/Developer/Xcode/DerivedData/ABC/Build/Products/Debug-iphonesimulator/ABC.app») ; capabilities.setCapability(«BundleID», «com.abc.ABC-Demo»);
-
Выполните некоторые действия
- завершите работу драйвера с помощью
driver.quit()
- Установите возможности для приложения Xyz. И запустите приложение XYZ
- Выполните несколько шагов
- завершите работу драйвера с помощью
driver.quit()
- перезапустите приложение 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)
Я предполагаю, что именно поэтому у вас возникла эта проблема, и, скорее всего, это проблема с инструментами / 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 и повторное открытие приложения.