如何通过 UI 测试(Xcode 12、iOS14)访问推送通知?

Posted

技术标签:

【中文标题】如何通过 UI 测试(Xcode 12、iOS14)访问推送通知?【英文标题】:How to get access into push notification with UI tests (Xcode 12, iOS14)? 【发布时间】:2020-09-17 08:38:42 【问题描述】:

我正在迁移以使用新的 Xcode 12,但我遇到了 UI 测试问题。 代码

let springBoard = XCUIApplication(bundleIdentifier: appleBundleIdentifier) let notification = springBoard.otherElements["NotificationShortLookView"]

不再工作,我找不到如何指示通知视图。怎么改的?

【问题讨论】:

请添加更多详细信息,以便向其他用户清楚地解释您的问题。 我只想点击这个通知 - notification.tap() 【参考方案1】:

似乎通知元素在 ios 14 中的可访问性层次结构略有不同。这应该可以:

let springBoard = XCUIApplication(bundleIdentifier: "com.apple.springboard")
let notification = springBoard.otherElements["Notification"].descendants(matching: .any)["NotificationShortLookView"]

有趣的是,表示推送通知的实际 XCUIElement 具有类型“BannerNotification”(XCUIElementType,原始值表示为 83),我在公共标头中找不到它。目前可能是私有类型。因此,decendants(matching: .any) 的解决方法。

【讨论】:

【参考方案2】:

也可以在通知中访问/断言:

let notification = springBoard.otherElements["Notification"].descendants(matching: .any)["APPNAME, now, TITLE, BODY"]
    if notification.waitForExistence(timeout: 10) 
        notification.tap()
    

【讨论】:

对于任何尝试此操作的人,请务必注意 APPNAME 是显示在通知“标题标题”中的内容,并且全部大写。此外,它是标题和正文的完全匹配,因此即使是空格也会对您的断言产生影响。【参考方案3】:

如果有人要测试通知是否有附件,请在通知正文后添加“附件”

let notification = springBoard.otherElements["Notification"].descendants(matching: .any)["APPNAME, now, TITLE, BODY, Attachment"]

【讨论】:

以上是关于如何通过 UI 测试(Xcode 12、iOS14)访问推送通知?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何使用 XCTest UI 测试区分 iOS 13 中的标题和静态文本

最新macOS 11.4+Xcode 12.5+iOS 14.6 编译安装WebDriverAgent填坑记

Xcode12 CoreNFC 模拟器库未加载

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

React Native 应用程序中的所有图像/快速图像不适用于 iOS 14 测试版和 Xcode 12 测试版