在 Xcode UI 测试中验证 iOS 是不是已从正在运行的应用程序导航到另一个应用程序

Posted

技术标签:

【中文标题】在 Xcode UI 测试中验证 iOS 是不是已从正在运行的应用程序导航到另一个应用程序【英文标题】:Verify that iOS has navigated from the running app to another application in Xcode UI testing在 Xcode UI 测试中验证 iOS 是否已从正在运行的应用程序导航到另一个应用程序 【发布时间】:2016-08-22 19:01:54 【问题描述】:

我的应用程序中有一个按钮,可将用户导航到邮件应用程序和电子邮件对话框。我正在尝试使用 Xcode UI 测试来验证是否发生了这种情况。问题是,一旦我进入邮件应用程序,我就无法获得当前运行的应用程序的上下文,因为它已经被后台处理,所以我无法验证屏幕上是否有任何元素。最重要的是,Xcode UI 测试在点击按钮并导航到邮件页面后实际上会引发错误:

<unknown>:0: error: -[MyTests testButton] : UI Testing Failure - Failure getting snapshot Error Domain=XCTestManagerErrorDomain Code=12 "Failed to get main window after 30 retries: kAXErrorServerNotFound (see <rdar://problem/15530121>)" UserInfo=NSLocalizedDescription=Failed to get main window after 30 retries: kAXErrorServerNotFound (see <rdar://problem/15530121>)

我是否可以使用任何类型的断言来验证用户是否已从应用程序导航到邮件应用程序?

【问题讨论】:

【参考方案1】:

UI 测试不能与应用程序之外的任何东西进行交互。一旦您的应用打开 Mail.app,框架就无法再与设备交互。

要验证这一点,请尝试在“邮件”打开后打印出应用的层次结构。您会注意到 Mail 和导航栏中都不会显示任何内容 - 您只会看到应用的信息。

print(XCUIApplication().debugDescription)

【讨论】:

有没有办法验证被测应用不再出现在屏幕上? 你可以使用类似:XCTAssertFalse(XCUIApplication().navigationBars["My App TItle"].exists) 更新:恐怕这不起作用,XCUIApplication().exists 也不存在,因为找不到 XCUIApplication()。对不起。

以上是关于在 Xcode UI 测试中验证 iOS 是不是已从正在运行的应用程序导航到另一个应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何编写使用推送通知有效负载启动应用程序的UI测试,并验证您是否已路由到正确的视图?

如何检查是不是在 Xcode UI 测试中创建了新场景?

在 xcode 8 中登录的 UI 测试

如何在现有的 ios 测试项目中启用 xcode 7 UI 测试

如何通过 Xcode 7 中的 UI 测试在 iOS 应用程序中运行代码?

在 Xcode 7.0.1 中进行 UI 测试时,是不是可以使用 Swift 滚动到 Element()?