Не удается получить доступ к строковым локализациям в UI Test (Xcode 7)
Итак, у меня есть ситуация, в которой у меня есть несколько текстовых полей, которые проверяются. Я пытаюсь запустить тест пользовательского интерфейса, и когда они сбой, они получат предупреждение о появлении сообщения об ошибке (возможно, другое сообщение зависит от того, какие поля недействительны и каким образом).
Я хотел бы проверить, что не только появилось предупреждение, но и отображается правильное сообщение. Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно получить локализованный текст для сравнения (если я запускаю тесты на другом языке, отличном от английского), но когда я вызываю NSLocalizedString в UITest, он не может собрать правильную локализованную строку (просто возвращает ключ [по умолчанию])
Я попытался добавить файлы localizeable.strings
в UITest-цель, но безрезультатно. Кто-нибудь знает, возможно ли это?
редактировать как примечание: Я также попытался установить идентификатор доступности в UIAlertView
, но когда я запрашиваю с этим идентификатором доступности, он не существует, я могу запросить его только с помощью заголовка предупреждения, которое кажется обратным.
Ответы
Ответ 1
В тестах пользовательского интерфейса основной пучок кажется случайным приложением запуска. Вот почему файл .strings не появляется: даже если вы добавили его в свой тестовый пакет, NSLocalizedString проверяет неправильный пакет. Чтобы обойти это, вам нужно вызвать такой способ:
NSLocalizedString("LOCALIZATION_KEY", bundle: NSBundle(forClass: AClassInYourUITests.self), comment: "")
Что вы можете использовать в вспомогательном методе.
Ответ 2
Вот мое решение:
-
В целевом меню "Тестирование пользовательских интерфейсов" → "Сборка фаз" → "Копировать ресурсы пакета", добавьте необходимые файлы локализации (например, Localizable.strings).
-
Добавьте функцию, аналогичную следующей:
func localizedString(key:String) -> String {
/*1*/ let localizationBundle = NSBundle(path: NSBundle(forClass: /*2 UITestsClass*/.self).pathForResource(deviceLanguage, ofType: "lproj")!)
/*3*/ let result = NSLocalizedString(key, bundle:localizationBundle!, comment: "") //
return result
}
/*1 Gets correct bundle for the localization file, see here: http://stackoverflow.com/info/33086266/cant-get-access-to-string-localizations-in-ui-test-xcode-7 */
/*2 Replace this with a class from your UI Tests*/
/*3 Gets the localized string from the bundle */
-
Используйте следующую функцию: app.buttons[localizedString("localized.string.key")]