Отправка приложения в фоновом режиме и повторный запуск его из 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() до желаемой продолжительности.