如何对 XCode7 上的系统按钮进行自动化 UI 测试?
How to do automated UI testing for system button on XCode7?
我的 Storyboard 只有一个 UI,它的导航栏有一个 UIBarButtonItem 和系统项:添加。它还有另一个信息 UI 按钮。
在用英语进行 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 测试创建一个新方案并设置默认的应用程序语言。这会将应用程序锁定到一个本地化文件中,以便您可以为该语言编写所有测试。
从产品 -> 方案 -> 管理方案或 ⌘⇧, 设置选项。然后 select 选项选项卡并设置语言。
优点:简单,一次性更改。
缺点:不能用于使用 snapshot 创建本地化的屏幕截图(一种通过 UI 测试运行您的应用程序并生成 App Store 屏幕截图的工具方式)。
选项 2:对本地化字符串使用 -accessibilityIdentifier
不要通过显示的文本或值访问项目,而是使用 accessibilityIdentifier
。这由 UI 测试框架读取,但从未向用户显示或读取(即使打开了辅助功能)。在旧的 UIAutomation 文档中,Apple 提到将此用于开发人员功能,这看起来像是一个很好的用例。
然后您可以像往常一样使用本地化版本继续设置 accessibilityLabel
和 accessibilityValue
。
优点:可用于更通用的解决方案,例如自动截屏。
缺点:可能需要更多工作来更改您需要 "unlocalized" 进行测试的每个标签。
您是否考虑过使用
[[app.buttons elementBoundByIndex: 0] tap]; //0-2
而不是尝试通过标签来识别按钮?对于您的问题,这是一个不够完善的解决方案,但它可能会完成工作。
使用 swift 三个,您可以通过以下代码使用 BarButtons
app.navigationBars.buttons.element(boundBy: 0).tap()
您可以根据需要更改索引
我的 Storyboard 只有一个 UI,它的导航栏有一个 UIBarButtonItem 和系统项:添加。它还有另一个信息 UI 按钮。 在用英语进行 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 测试创建一个新方案并设置默认的应用程序语言。这会将应用程序锁定到一个本地化文件中,以便您可以为该语言编写所有测试。
从产品 -> 方案 -> 管理方案或 ⌘⇧, 设置选项。然后 select 选项选项卡并设置语言。
优点:简单,一次性更改。
缺点:不能用于使用 snapshot 创建本地化的屏幕截图(一种通过 UI 测试运行您的应用程序并生成 App Store 屏幕截图的工具方式)。
选项 2:对本地化字符串使用 -accessibilityIdentifier
不要通过显示的文本或值访问项目,而是使用 accessibilityIdentifier
。这由 UI 测试框架读取,但从未向用户显示或读取(即使打开了辅助功能)。在旧的 UIAutomation 文档中,Apple 提到将此用于开发人员功能,这看起来像是一个很好的用例。
然后您可以像往常一样使用本地化版本继续设置 accessibilityLabel
和 accessibilityValue
。
优点:可用于更通用的解决方案,例如自动截屏。
缺点:可能需要更多工作来更改您需要 "unlocalized" 进行测试的每个标签。
您是否考虑过使用
[[app.buttons elementBoundByIndex: 0] tap]; //0-2
而不是尝试通过标签来识别按钮?对于您的问题,这是一个不够完善的解决方案,但它可能会完成工作。
使用 swift 三个,您可以通过以下代码使用 BarButtons
app.navigationBars.buttons.element(boundBy: 0).tap()
您可以根据需要更改索引