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

Ios Can';无法在UI测试(Xcode 7)中访问字符串本地化,ios,xcode7,xcode-ui-testing,Ios,Xcode7,Xcode Ui Testing,所以我有一种情况,我有几个文本字段是经过验证的。我正在尝试运行一个UI测试,当它们失败时,它们将得到一个警报,弹出一条错误消息(可能是不同的消息,具体取决于哪些字段无效以及以何种方式) 我想测试的是,不仅出现了警报,而且显示了正确的消息。我遇到的问题是,我需要获取本地化文本以进行比较(如果我使用英语以外的其他语言运行测试),但当我在UITest中调用NSLocalizedString时,它无法收集正确的本地化字符串(只返回键[default]) 我已尝试将本地化.strings文件添加到UITe

所以我有一种情况,我有几个文本字段是经过验证的。我正在尝试运行一个UI测试,当它们失败时,它们将得到一个警报,弹出一条错误消息(可能是不同的消息,具体取决于哪些字段无效以及以何种方式)

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

我已尝试将
本地化.strings
文件添加到UITest目标,但没有效果。有人知道这是否可能吗


作为旁注编辑:我还尝试在
UIAlertView
上设置辅助功能标识符,但当我使用该辅助功能标识符进行查询时,它不存在,我只能使用警报的标题进行查询,该标题看起来是向后的。

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

NSLocalizedString("LOCALIZATION_KEY", bundle: NSBundle(forClass: AClassInYourUITests.self), comment: "")
您可能希望将其拉入助手方法。

以下是我的解决方案:

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

  • 添加类似于以下内容的函数:

    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 */
    
  • 使用如下函数:
    app.buttons[localizedString(“localized.string.key”)]


  • 我发现的一个解决方法是强制应用程序以英语启动(启动参数),然后根据英语字符串进行测试。工作正常,但不是最佳解决方案。我复制了与Localizable.strings对应的捆绑资源,但无论设备使用哪种语言,我都会获得密钥的英文版本。有什么想法吗@Manuel?不可能动态获取deviceLanguage吗?我不喜欢必须指定设备语言的想法。。UITest类是否与正在测试的设备没有任何连接感以从中获取本地化信息?