XCTests не запускает приложение в симуляторе с перерывами

Кто-нибудь испытал и зафиксировал:

XCtests прерывается с перерывами для запуска приложения в симуляторе для тестирования пользовательского интерфейса (XCUI). Я бегу через fastlane, по-разному возникают тесты, которые проваливают каждый тестовый прогон.

OSX: 10.12.3 iOS симулятор: 10.0 XCode 8.2.1 Fastlane 2.11.0

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

Ошибка тестирования пользовательского интерфейса - отказ от попытки запуска: Ошибка домена = FBSOpenApplicationServiceErrorDomain Code = 1 "Запрос чтобы открыть" no.something.bb.debug "не удалось". UserInfo = {NSLocalizedDescription = запрос на открытие "no.something.bb.debug" не удалось., NSLocalizedFailureReason = Запрос был отклонен делегатом службы (SBMainWorkspace) по причине: Занят ( "Приложение" no.something.bb.debug "устанавливает или удаляет, и не может быть запущен" )., BSErrorCodeDescription = RequestDenied, NSUnderlyingError = 0x6080002598f0 {Ошибка Домен = FBSOpenApplicationErrorDomain Code = 6 "Приложение "no.something.bb.debug" устанавливается или деинсталлируется и не может быть запущен ". UserInfo = {BSErrorCodeDescription = Занято, NSLocalizedFailureReason = Приложение "no.something.bb.debug" является установка или удаление и не может быть запущена.}}}

Ответы

Ответ 1

У меня возникла одна и та же проблема. Я узнал, что для этого есть более открытый. В комментариях я нашел отзыв, который я реализовал в функции, которая выполняет повторную попытку.

Аргумент arguments - это массив значений перечисления, где базовый тип - String. Я использую это для аргументов приложения.

К сожалению, это еще не полное доказательство. В моем случае количество неудач значительно снизилось, но не исчезло.

var app: XCUIApplication = XCUIApplication()
public func tryLaunch<T>(_ arguments: [T], _ counter: Int = 10) where T: RawRepresentable {
    sleep(3)
    XCUIApplication().terminate()
    sleep(3)

    app = XCUIApplication()
    app.launchArguments = arguments.map { $0.rawValue as! String }
    app.launch()
    sleep(3)
    if !app.exists && counter > 0 {
        tryLaunch(arguments, counter - 1)
    }
}

Функция выше включена в https://github.com/evermeer/UITestHelper

Ответ 2

После игры мы заметили, что, если мы запускаем ограниченные тестовые примеры, эта ошибка значительно снизилась. Вы можете найти более подробную информацию на https://blog.talentica.com/2017/04/04/use-xcode-8-with-jenkins/