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
}
所以我正在为不同的本地化做 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
}