【问题标题】:Can't get access to string localizations in UI Test (Xcode 7)无法访问 UI 测试中的字符串本地化(Xcode 7)
【发布时间】:2015-10-12 16:47:23
【问题描述】:

所以我遇到了一些经过验证的文本字段的情况。我正在尝试运行 UI 测试,当它们失败时,他们会收到一条弹出错误消息的警报(可能会根据哪些字段无效以及以何种方式显示不同的消息)。

我想测试不仅出现了警报,而且显示了正确的消息。我遇到的问题是我需要获取本地化文本进行比较(如果我用英语以外的其他语言运行测试),但是当我在 UITest 中调用 NSLocalizedString 时,它无法收集正确的本地化字符串(只是返回键[默认])

我尝试将localizeable.strings 文件添加到 UITest 目标,但无济于事。有谁知道这是否可能?

附注编辑:我还尝试在 UIAlertView 上设置可访问性标识符,但是当我使用该可访问性标识符进行查询时,它不存在,我只能使用标题进行查询似乎倒退的警报。

【问题讨论】:

  • 我发现的解决方法是强制应用程序以英语启动(启动参数),然后针对英语字符串进行测试。有效,但不是最佳解决方案。

标签: ios xcode7 xcode-ui-testing


【解决方案1】:

在 UI 测试中,主包似乎是一个随机启动器应用。这就是 .strings 文件没有出现的原因:即使您将它添加到测试包中,NSLocalizedString 仍在检查错误的包。为了解决这个问题,您需要这样的调用:

NSLocalizedString("LOCALIZATION_KEY", bundle: NSBundle(forClass: AClassInYourUITests.self), comment: "")

您可能希望将其引入辅助方法。

【讨论】:

  • 我已经复制了Localizable.strings对应的bundle资源,但是无论设备是哪种语言,我总是得到英文版的key。任何想法@Manuel?
【解决方案2】:

这是我的解决方案:

  1. 在您的 UI 测试目标 -> 构建阶段 -> 复制捆绑资源中,添加所需的本地化文件(例如 Localizable.strings)。

  2. 添加类似如下的函数:

    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/questions/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 */
    
  3. 像这样使用函数:app.buttons[localizedString("localized.string.key")]

【讨论】:

  • 不能动态获取deviceLanguage吗?我不喜欢必须指定设备语言的想法。UITest 类是否与它正在测试的设备没有任何联系以从中获取本地化?
猜你喜欢
  • 1970-01-01
  • 2015-12-24
  • 2016-02-20
  • 1970-01-01
  • 2016-01-28
  • 2016-02-10
  • 2019-05-01
  • 2022-08-11
  • 1970-01-01
相关资源
最近更新 更多