Xcode 不同本地化字符串的 UITest

Xcode UITest for different localizations strings

所以我正在为不同的本地化做 UITesting。

这是我的 Localizable.strings (English) 文件

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

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

这是我的 Localizable.strings (French) 文件

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

请注意法语字符串文件没有 "Bye" 的文本。

当我 运行 我的 UITest 时,如 this GIF 所示,如果缺少区域设置的文本,我该如何使测试失败?

感谢任何帮助。

如果文本未针对某种语言进行本地化,我找到了一种无法通过测试的方法。

我在我的 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

那么就是这个功能了。它将检查路径是否存在并查找文本,最后 return 本地化字符串(如果存在):

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
}