По причинам дизайна мне приходится запускать разные цели для разных локалей. Недавно я начал путь тестирования пользовательского интерфейса с помощью Xcode и сразу же столкнулся с проблемой.
Я следил за сеансом WWDC и добавил тестовую цель пользовательского интерфейса, которая запускается на одной из целей.
Запись пользовательского интерфейса работает нормально.
Дело в том, что мое приложение зависит от AppLocale в AppDelegate для загрузки некоторых внутренних материалов. Поэтому, когда я запускаю тесты пользовательского интерфейса, мой AppLocale возвращает значение по умолчанию «нас», а не ожидаемое «оно».
Я, конечно, попытался вручную отредактировать это:
В реальном тесте
let app = XCUIApplication()
app.launchArguments.append("-AppleLanguages")
app.launchArguments.append("(it)")
app.launchArguments.append("-AppleLocale")
app.launchArguments.append("it_IT")
но кажется, что эти аргументы не доходят до моего приложения, так как массив аргументов пуст:
В AppDelegate -applicationDidLaunchWithOptions
var arguments = NSProcessInfo.processInfo().arguments
print("arguments: \(arguments)")
print(appID)
Вывод в консоль во время тестирования пользовательского интерфейса
arguments: []
iphone1.us.prod
Мои цели настроены на работу с правильной локалью и языком, и при отладке они именно такие. Когда я запускаю их таким образом, вывод в консоли выглядит так, как я и ожидал:
Вывод в консоль во время отладки
arguments: ["-AppleLocale", "it_IT", "-AppleLanguages", "(it)", "-NSTreatUnknownArgumentsAsOpen", "NO", "-ApplePersistenceIgnoreState", "YES"]
iphone1.it.prod
Я попытался убедиться, что цель теста пользовательского интерфейса попадает в реальное приложение. Что я сделал, так это отредактировал Настройки сборки для тестовой цели и убедился, что разделы Связывание и Тестирование указывают на правильную цель.
Таким образом, я загрузил правильную цель и могу подтвердить, что все аргументы настроены правильно. Но что происходит сейчас, так это то, что среда запускает тест и никогда не заканчивает его.
Вывод консоли во время тестирования пользовательского интерфейса с измененными параметрами Linking и Testing для тестовой цели
Test Case MyTestCase started.
t = 0.00s Start Test
t = 0.00s Set Up
Это то, что я получаю в консоли, и все. На этом он останавливается, и после этого больше ничего не происходит.
Итак, мой вопрос: что мне не хватает? Есть ли способ быть очень конкретным в отношении того, для какой цели выполняются тесты пользовательского интерфейса?
Я буду рад предоставить любую дополнительную информацию, которая вам потребуется, чтобы помочь мне разобраться с этим!