Xcode UITest для разных строк локализаций - PullRequest
0 голосов
/ 05 февраля 2020

Так что я делаю UITesting для разных локализаций.

Это мой Localizable.strings (English) файл

/* Hello */
"Hello" = "Hello";

/* Bye */
"Bye" = "Bye";

Это мой Localizable.strings (French) файл

/* Hello */
"Hello" = "bonjour";

Обратите внимание, что в файле французских строк нет текста для "Пока".

Когда я запускаю свой UITest, показанный в this GIF , как мне сделать тест неудачным, если отсутствует текст для локали?

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 06 февраля 2020

Я нашел способ провалить тест, если текст не локализован для языка.

Я добавил это в своем UITest:

XCTAssertEqual(lblSecond.label, returnLocalizedText(textKey: "Bye"))

Что это значит, что вы передаете ключ для вашего локализованного текста, и проверьте, совпадает ли он с текстом метки. Вы можете получить текст метки так:

//you can set this identifier in storyboard or in your VC like   
lblTitle.accessibilityIdentifier = "lblSecondIdentifier"

//Then in XCTest
let lblSecond = app.staticTexts["lblSecondIdentifier"]  
XCTAssert(lblSecond.isHittable) //check whether it exist first

Тогда это функция. Он проверит, существует ли путь и найдет ли текст, и, наконец, вернет локализованную строку, если она существует:

func returnLocalizedText(textKey: String) -> String{
    guard let languageCode = Locale(identifier: Locale.preferredLanguages.first!).languageCode else {
        XCTFail("languageCode not found")
        fatalError()
    }

    guard let path = Bundle(for: type(of: self)).path(forResource: "Localizable", ofType: "strings", inDirectory: nil, forLocalization: languageCode) else{
        XCTFail("path not found")
        fatalError()
    }

    guard let dict = NSDictionary(contentsOf: URL(fileURLWithPath: path)) else {
        XCTFail("dict not found")
        fatalError()
    }

    guard let text = dict.value(forKey: textKey) as? String else {
        XCTFail("text not found")
        fatalError()
    }
    return text
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...