Тест пользовательского интерфейса XCode Как обработать разрешения уведомления, сгенерированные UNUserNotificationCenter - PullRequest
0 голосов
/ 04 сентября 2018

В моем приложении я запрашиваю разрешения на уведомления, как это:

  UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in

        if granted {
            DispatchQueue.main.async {
                UIApplication.shared.registerForRemoteNotifications()
            }
        }
    }

Теперь во время тестирования мне нужно обработать это всплывающее окно с разрешениями, но оно не работает, я попробовал следующий код:

XCUIApplication().alerts["“AppName” Would Like to Send You Notifications"].buttons["Allow"].tap() //didn't work.

addUIInterruptionMonitorWithDescription("Notification Dialog") { (alert) -> Bool in  
    alert.buttons["Allow"].tap()
    return true
}


addUIInterruptionMonitorWithDescription("“AppName” Would Like to Send You Notifications") { (alert) -> Bool in  
    alert.buttons["Allow"].tap()
    return true
}


addUIInterruptionMonitorWithDescription("Notifications may include alerts, sounds, and icon badges. These can be configured in Settings.") { (alert) -> Bool in  
    alert.buttons["Allow"].tap()
    return true
}

Но ничего не работает.

1 Ответ

0 голосов
/ 01 ноября 2018

1 / Попробуйте записать путь с помощью тестового регистратора XCode для кнопки оповещения и убедитесь, что у вас есть правильный путь.

XCUIApplication().alerts["“AppName” Would Like to Send You Notifications"].buttons["Allow"].tap() //didn't work.

может быть не правильно.

(примечание: использование тестового регистратора для таких вещей, как поиск пути к элементу, в порядке и очень удобно для новичков.)

2 / Вам не нужно использовать addUIInterruptionMonitorWithDescription в том случае, если у вас есть системное оповещение, которое будет появляться каждый раз, или если вы знаете, что это произойдет. Просто используйте waitForExistance и нажмите на него, если он существует.

(примечание: я обнаружил, что ожидание и нажатие на системное уведомление лучше, чем addUIInterruptionMonitorWithDescription, который иногда нестабилен / сложен)

3 / alert.buttons["Allow"].tap() мне не кажется правильным, не так ли XCUIApplication().alerts.buttons["Allow"]? Кроме того, вы можете использовать XCUIApplication().alerts.buttons.element(boundBy: 0, чтобы нажать на первую кнопку.

...