ios - 如何在 XCode7 上对系统按钮进行自动化 UI 测试?

标签 ios objective-c uibutton uibarbuttonitem xcode-ui-testing

我的 Storyboard 只有一个 UI,它有一个带有 UIBarButtonItem 的导航栏和系统项:Add。它还具有另一个信息 UIButton。 用英语进行 UI 测试时,一切正常,没有任何问题。但是,如果您将语言切换到另一种语言,则总是失败。这是测试代码片段:

app.navigationBars["My Product"].buttons["Add"].tap()
app.buttons["More Info"].tap()

根据错误日志,Xcode 发现它是另一种语言。在这里:

Assertion Failure: UI Testing Failure - No matches found for "More Info" Button

Query input was

Button 0x7fa4ca65a1d0: traits: 8724152321, {{8.0, 31.5}, {21.0, 21.0}}, label: '戻る',
Button 0x7fa4ca657700: traits: 8589934593, {{330.5, 26.0}, {40.0, 30.0}}, label: '追加',
Button 0x7fa4ca4658d0: traits: 8589934593, {{312.0, 605.0}, {22.0, 22.0}}, label: '詳細情報'

但是,我还没有为它创建任何本地化字符串,因为它只是一个由 iOS 系统创建的图像。有谁知道如何修理它? 非常感谢。

最佳答案

选项 1:设置默认语言

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

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

Xcode - Set the Default Application Language

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

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

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

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

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

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

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

关于ios - 如何在 XCode7 上对系统按钮进行自动化 UI 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32947401/

相关文章:

ios - 添加自定义字体 (Lexia)

iphone - 在 iOS 中模拟应用程序升级

ios - 如何在位字段上执行插入操作?

objective-c - @synchronized() 作为 Objective-C 中的单例方法有什么作用?

ios - 当颜色来自 NSArray 时,如何在 tableViewCell 中设置多个 UIView 的边框颜色

iphone - App Store 中未显示应用程序屏幕截图

objective-c - 用于解析化学式的 RegEx

iphone - 自定义 UIButton 的不透明度

iphone - UIScrollview 上的“静态”UIButton?

ios - 按钮中 UIImage 后的随机三个点