我们可以在 xcuitest 中使用 Notification Center 来监听内部事件吗?

Posted

技术标签:

【中文标题】我们可以在 xcuitest 中使用 Notification Center 来监听内部事件吗?【英文标题】:Can we use Notification Center in xcuitest to listen to internal events? 【发布时间】:2020-01-18 01:13:36 【问题描述】:

在我的测试代码中,我正在注册一种方法来监听特定事件。我的意图是当调用此方法时,我可以在屏幕转换之间继续执行测试。我试图用几种方法来解决这个问题。

方法一:(监听事件的通知中心)

App code:
     NotificationCenter.default.post(name: Notification.Name.PageLoadCompleteTestReady, object: nil)

Test Code:
// Click to load a new screen
     NotificationCenter.default.addObserver(self, selector: #selector(self.printState), name: NSNotification.Name.PageLoadCompleteTestReady, object: nil)
// Continue execution on new screen.

方法2:(在App模块下实现delegate,在UI测试代码中导入Module)

但上述方法似乎都不起作用。使用方法 1:未调用测试端的通知观察者。使用方法2:在测试代码库下实现委托的类没有被调用,而是在模块上被调用。

【问题讨论】:

【参考方案1】:

UI 测试在您的应用之外运行,并像普通用户一样与 at 进行交互。因此,他们无权访问应用程序代码流,包括通知中心发送的通知。

您可以做的是在触发发送通知的条件后断言应用程序状态。毕竟,该通知应该会导致一些 UI 更改,否则测试它应该是单元测试的一部分。

例如,如果在收到通知后您提出警报,则表明警报存在。或者,如果您更改视觉指示器,请对此进行断言。或者,也许您呈现一个新屏幕,断言新屏幕。基本上,这取决于您的应用程序对断言的视觉反应,因为毕竟 UI 测试会验证 UI

【讨论】:

你能分享一个如何“断言应用程序状态”的例子吗? @avirao 例如,如果在收到通知时您呈现警报,则您断言警报存在。基本上,这取决于您的应用程序对断言的视觉反应,因为 UI 测试毕竟验证了 UI。 感谢您的回答。这对证实我的观察非常有帮助。将保持此线程打开一段时间,如果没有响应,则将您的答案标记为已接受。

以上是关于我们可以在 xcuitest 中使用 Notification Center 来监听内部事件吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Cucumberish 在 XCUITest 设置中重置应用程序

在 XCUITests 中,如何等待多个 ui 元素的存在?

如何使用 Swift XCUITest 添加摇晃手势? [关闭]

XCUITest - 选定的单元格未显示在 iOS 15 的层次结构树中

XCUITest - 如何在应用程序运行时禁用 Wi Fi?

是否可以直接在XCUITest中打开屏幕?