如何通过 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填坑记