ios - 具有本地化 UI 的 Xcode 7 UITests

标签 ios swift xcode7 xcode-ui-testing

在我的应用程序中,我使用 NSLocalizedString 来本地化我的应用程序。现在我想切换到 UITests 并拥有这样的测试代码:

[tabBarsQuery.buttons["particiants"] tap];

这对英语有效,但对其他语言无效。

[tabBarsQuery.buttons[NSLocalizedString("PARTICIPANTS",comment:nil)] tap];

失败 - 可能是因为 Localizable.strings 在另一个包中。如何测试本地化应用?

最佳答案

选项 1:设置默认语言

为 UI 测试创建一个新方案并设置默认应用程序语言。这会将应用程序锁定到一个本地化文件中,以便您可以为该语言编写所有测试。

从 Product -> Scheme -> Manage Schemes 或 ⌘⇧, 设置选项。然后选择“选项”选项卡并设置语言。

Xcode - Set the Default Application Language

优点:简单、一次性更改。

缺点:不能用于使用 snapshot 创建本地化屏幕截图(一种通过 UI 测试运行您的应用程序并在此过程中生成 App Store 屏幕截图的工具)。

选项 2:对本地化字符串使用 -accessibilityIdentifier

使用 accessibilityIdentifier 代替通过显示的文本或值访问项目。这由 UI 测试框架读取,但从未向用户显示或读取(即使打开了辅助功能)。在旧的 UIAutomation 文档中,Apple 提到将其用于开发人员功能,这看起来像是一个很好的用例。

然后您可以像正常情况一样使用本地化版本继续设置 accessibilityLabelaccessibilityValue

优点:可用于更通用的解决方案,例如自动截屏。

缺点:可能需要更多工作来更改您需要“未本地化”以进行测试的每个标签。

关于ios - 具有本地化 UI 的 Xcode 7 UITests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33609325/

相关文章:

ios - 如何访问年龄限制家长控制 - iOS

ios - Google App Indexing 没有解决 Swift 问题?

ios - 错误 “Thread 1:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)” 是什么意思?

ios - Xcode-5 验证错误。代码签名权利无效

ios - gcloud 崩溃 (AttributeError) : 'NoneType' object has no attribute 'androidModelId' running XCTests on Firebase Test Lab

objective-c - 未接收到远程控制事件

xcode - OS X 在 swift 中从 xib 添加 subview

ios - 无法使用 xcode 8 beta 6 构建项目

ios - 在 iOS 通用应用程序中启动屏幕 Storyboard约束

xml - 更新到 Xcode 7.0.1 和 El Capitan 后找不到“libxml/xmlwriter.h”