Как проверить состояние приложения в Swift UI Test
Некоторый фон
В настоящее время я пишу UI Test для панели настроек и нажимаю на кнопки, чтобы включить определенные разрешения, такие как push-уведомления и службы определения местоположения.
Однако, если предупреждение о разрешении было отображено ранее (независимо от того, разрешил ли пользователь доступ к разрешению или запретил его), предупреждение больше не будет отображаться и просто приведет пользователя к приложению настроек. К сожалению, эти настройки не сбрасываются, то есть при первом запуске тестов пользовательского интерфейса отображаются предупреждения; и во всех последующих тестовых запусках пользовательского интерфейса кнопки приведут меня к приложению настроек, если я не выполню сброс устройства до начала испытаний.
Моя проблема
Таким образом, мой тест должен знать, ушло ли приложение в фоновый режим, и попытаться вывести его на передний план, чтобы продолжить тестирование:
if app.state == background {
foregroundApp()
}
// continue with other tests
Есть ли способ определить, находится ли приложение в фоновом режиме?
Что я пробовал
Я исследовал методы, чтобы определить состояние приложения (работает / фон / и т. Д.) Из теста пользовательского интерфейса, и не смог найти много. Я попытался проверить, существуют ли определенные элементы:
if (app.navigationBars.element.exists) ...
но это дает мне ошибки времени выполнения [1], если пользователь перенаправлен на страницу настроек, потому что тестируемое приложение находится в фоновом режиме, и тест не может найти навигационные панели (или другие элементы).
Я пытался использовать некоторые методы из частных заголовков Facebook для XCUIApplication()
а также XCUIElement()
,
XCUIApplication().state
всегда возвращается 3
независимо от того, в каком состоянии находится приложение, и любые попытки вызова XCUIApplication().resolve()
на переднем плане приложение выдает мне те же ошибки, что и раньше [1]
Я пытался переписать логику для приоритетного приложения, прежде чем возобновить тесты, но такие методы, как XCUIApplication().launch()
убить приложение перед перезапуском, что я не могу сделать. Мне кажется, работает только служба siri, но я не могу получить доступ к службе siri через корпоративный прокси, и изменение разрешений прокси невозможно.
Есть ли другой способ проверить состояние приложения?
ошибки
[1] Эта ошибка печатается каждый раз, когда я пытаюсь сделать что-то, связанное с состоянием. Я не звоню snapshotView
в любом месте, и, следовательно, предложение использовать afterScreenUpdates
бесполезно.
Failure to get snapshot within 15.0s
Cannot snapshot view (<UIKeyboardImpl: 0x7febcc75d000; frame = (0 0;
414 226); layer = <CALayer: 0x608000625720>>) with
afterScreenUpdates:NO, because the view is not in a window. Use
afterScreenUpdates:YES.`
ТЛ; др
Мне нужно проверить, вошло ли приложение, которое я тестирую, в фоновый режим (т. Е. Пользователь нажал кнопку "Домой"). Проверка на наличие определенных элементов, таких как панели навигации, не работает, как и большинство методов из частных заголовков Facebook для XCUIApplication/XCUIElement. Приоритизация приложения также вызывает проблемы, и перезапуск приложения не вариант; ни Сири службы.
1 ответ
Вы можете сделать это в Swift 4, используя XCUIApplication.state
, которая даст вам информацию о состоянии приложения - будь то на переднем плане или на заднем плане и т. д., однако, невозможно найти эту информацию в Swift 3 и ниже. По сути, тестирование пользовательского интерфейса в Swift 3 не поддерживает выход из приложения.