在UI测试中无法访问字符串本地化(Xcode 7)

ssr*_*bbi 15 ios xcode7 xcode-ui-testing

所以我有一种情况,我有一些经验证的textFields.我正在尝试运行UI测试,当他们失败时,他们会收到警告,弹出一条错误消息(可能是一个不同的消息,取决于哪些字段无效以及以何种方式).

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

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

编辑作为旁注:我也试过设置一个辅助功能标识符UIAlertView但是当我用该辅助功能标识符查询它不存在时,我只能使用看起来倒退的警报标题来查询它.

Man*_*uel 19

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

NSLocalizedString("LOCALIZATION_KEY", bundle: NSBundle(forClass: AClassInYourUITests.self), comment: "")
Run Code Online (Sandbox Code Playgroud)

您可能希望将其纳入辅助方法.

  • 我已经复制了与Localizable.strings相对应的bundle资源,但无论设备使用哪种语言,我总是得到密钥的英文版本.任何想法@Manuel? (8认同)

Par*_*ise 6

这是我的解决方案:

  1. 在您的 UI 测试目标 -> 构建阶段 -> 复制捆绑资源中,添加所需的本地化文件(例如 Localizes.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 */
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用这样的函数:app.buttons[localizedString("localized.string.key")]