【问题标题】:Xcode UITest for different localizations stringsXcode UITest 用于不同的本地化字符串
【发布时间】:2020-05-21 04:02:04
【问题描述】:

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

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

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

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

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

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

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

当我运行我的 UITest(如 this GIF 所示)时,如果缺少语言环境的文本,我该如何使测试失败?

感谢任何帮助。

【问题讨论】:

  • 可能有帮助:stackoverflow.com/q/32781556.
  • @MartinR 谢谢会去看看
  • @MartinR 嗨,经过一番挖掘,我找到了答案。谢谢

标签: swift xcode xctest xcode-ui-testing xctestcase


【解决方案1】:

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

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

【讨论】:

  • UI 测试根本不应该包括翻译检查。使用 Martin 提到的 bash 脚本,您可以更快地进行此类检查。
猜你喜欢
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 2015-06-20
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
  • 2017-01-07
相关资源
最近更新 更多