【发布时间】:2017-10-09 18:29:06
【问题描述】:
以下场景:
我有一个 iOS 项目,它会在 CI 服务器 (CircleCI) 上的每次 git push 上自动获取单元和 UI 测试。测试使用 fastlane 执行,也用于自动为 App Store 创建屏幕截图。
现在,我的项目被翻译成多种语言。我希望 fastlane 能够处理所有语言(以便能够截取屏幕截图),因此我将 UI 测试从以下内容更改:
app.navigationBars.buttons["Confirm"].tap()
到
let buttonTitle = NSLocalizedString("navbar.confirm", comment: "")
app.navigationBars.buttons[buttonTitle].tap()
我认为这可以解决问题,但事实并非如此。我不知道 CircleCI 中的模拟器是如何配置的,但是 UI 测试现在失败了
[00:46:34]:▸ testDashboard,找不到匹配项:从输入 {(
因此,由于某种原因,使用 CFBundleDevelopmentRegion 设置的后备语言不受尊重,可能是因为该语言不在捆绑包的 preferredLanguages 列表中。这本身就是一个问题,因为无论如何我都不希望为最终用户显示密钥。我想确保这永远不会发生。
因此我尝试通过为NSLocalizedString 编写一个包装器来解决此问题,该包装器检查NSLocalizedString(..) 是否返回密钥,如果返回则加载默认 (en) 包并以这种方式本地化字符串。
但是您似乎无法在 UI 测试中加载另一个包。测试将崩溃并失败。所以我不能使用这个解决方法。
我只是忽略了一些明显的解决方案吗?我不可能是唯一一个有这个问题的人,对吧?有什么提示吗?
【问题讨论】:
标签: ios xcode xcode-ui-testing fastlane fastlane-snapshot