Основано на joern замечательной статье, I took a step forward и нашел способ программно взаимодействовать с полученным уведомлением, поскольку он идентифицируется каркасом XCTest как XCUIElement.
Как мы можем получить ссылку на Sprinboard
let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard")
Например, при вводе приложение на заднем плане мы могли бы получить ссылку на полученное уведомление (в то время как оно отображается в верхней части экран), как это:
let notification = springboard.otherElements["NotificationShortLookView"]
Позволяющие нажмите на уведомление:
notification.tap()
Потяните его вниз, чтобы увидеть его действия (если таковые имеются.Кроме того, делая это может позволить нам увидеть содержание Rich оповещения):
notification.swipeDown()
Взаимодействовать с его действиями:
let action = springboard.buttons["ACTION BUTTON TITLE"]
action.tap()
И даже взаимодействовать с действием уведомления ввода текста (в примере, получив ссылку на уведомление текстовое поле по его заполнителем, который вы можете определить в коде):
let notificationTextfield = springboard.textFields["Placeholder"]
notificationTextfield.typeText("this is a test message")
наконец, вы можете также получить ссылку на уведомление, в непосредственной б utton для того, чтобы отклонить его:
let closeButton = springboard.buttons["Dismiss"]
closeButton.tap()
По возможности автоматизировать это взаимодействие мы могли бы проверить, например, аналитику, как описано в этом article.
Можете ли вы добавить код, который обрабатывает полезную нагрузку push-уведомления, когда пользователь открывает приложение через push-уведомление? – joern
Ну, конечно, я мог бы, но это очень специфично для проекта. Приложение, над которым я работаю, принимает push-уведомления из 6 разных типов, поэтому сначала он пытается определить, какой тип push-уведомления он получил. Затем, в зависимости от того, какой тип уведомления он получил, он переходит к правильному виду. Иногда это означает одно, а иногда это означает делать несколько вещей. – vrutberg