Не удается получить доступ к строковым локализациям в 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")]