Отправка приложения в фоновом режиме и повторный запуск его из recents в XCTest
Я искал решение моей проблемы, где мне нужно отправить мое приложение в фоновом режиме и повторно запустить его из последних после определенного интервала времени. deactivateAppForDuration () использовался для достижения этого в инструментах UIAutomation. Кто-нибудь знает, как достичь этого в XCTest?
2 ответов
не уверен, что это сработает, так как я еще не тестировал его, но это стоит попробовать. По крайней мере, это должно дать вам хорошее представление о том, где искать.
класс XCUIApplication предоставляет методы для завершения и запуска приложения программно:https://developer.apple.com/reference/xctest/xcuiapplication
класс XCUIDevice позволяет имитировать нажатие кнопки на устройстве: https://developer.apple.com/reference/xctest/xcuidevicebutton
Вы можете использовать их вместе с элементов графического интерфейса и NSURLSessionTask приостановить ваше приложение.
пример этого процесса с использованием Swift 3 может выглядеть примерно так (синтаксис может немного отличаться для Swift 2 и ниже):
func myXCTest() {
UIControl().sendAction(#selector(NSURLSessionTask.suspend), to: UIApplication.shared(), for: nil)
Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(launchApp), userInfo: nil, repeats: false)
}
func launchApp() {
XCUIApplication().launch()
}
другим способом может быть просто выполнение нажатия кнопки home, а затем перезапуск приложения после таймер проходит:
func myXCTest {
XCUIDevice().press(XCUIDeviceButton.Home)
Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(launchApp), userInfo: nil, repeats: false)
}
ни один из этих способов не может сделать то, что вы просите, или работать отлично, но, надеюсь, это даст вам отправную точку. Вы можете играть с ним и найти решение, которое работает для вас. Удачи!
если вы можете использовать Xcode 8.3 и iOS 10.3 с текущими тестами, то вы можете попробовать следующее:
XCUIDevice.shared().press(XCUIDeviceButton.home)
sleep(60)
XCUIDevice.shared().siriService.activate(voiceRecognitionText: "Open {appName}")
обязательно указывайте @available(iOS 10.3, *)
в верхней части файла набора тестов.
это будет относительно эквивалентно deactivateAppForDuration()
. Просто измените sleep()
до желаемой продолжительности.