Swift UI Test — Системное оповещение пользовательских уведомлений

Я пытаюсь обойти системное предупреждение пользователя, следуя потоку, представленному в следующем посте, который является тем же потоком, который упоминается в шпаргалке по тестированию пользовательского интерфейса и нескольких других сообщениях на SO.

Xcode7 | Тесты пользовательского интерфейса Xcode | Как обрабатывать оповещения службы определения местоположения?

У меня странная проблема, я не могу нажать кнопку ОК. Вот мой код

    addUIInterruptionMonitorWithDescription("User Notifications") { (alert) -> Bool in
        let okButton = alert.buttons["OK"]
        let dontAllowButton = alert.buttons["Don\u{2019}t Allow"]

        print(okButton.frame)
        print(dontAllowButton.frame)

        okButton.tap() // Taps the dontAllowButton ??

        return true
    }

    launchFinished() // wait for app to load and notification to show
    app.tap()

Тест успешно проходит в обработчике после того, как я использую app.tap(), и кнопки найдены и существуют, однако на самом деле он не может нажать кнопку «ОК»! Когда я пытаюсь нажать кнопку «ОК», он нажимает кнопку «Не разрешать», а когда я пытаюсь нажать кнопку «Не разрешать», ничего не нажимается.

Рамки кнопок тоже не соответствуют тому, что на экране.

Кнопки уведомлений пользователя

Когда я отлаживаю и смотрю на кадры, они:

okButton = (431,5, 377,0, 44,0, 135,0)

dontAllowBtn = (431,5, 512,0, 44,0, 135,0)

Кажется, это указывает на то, что у них одинаковое значение X, и одно находится поверх другого, что на самом деле не имеет никакого смысла.

Кроме того, я пытался использовать XCUICoordinate, чтобы создать некоторые координаты рядом с кнопками и нажимать координаты вместо кнопок, что отлично работает для меня в других местах в приложении, но никакие нажатия координат, похоже, вообще не регистрируются.

Как обойти это предупреждение?

ИЗМЕНИТЬ

Я использую Xcode 7.1.1, и та же проблема возникает со службами определения местоположения. Кажется, это как-то связано с ландшафтным режимом, из-за которого он не работает. Когда я создаю новое тестовое приложение и запускаю приведенный выше код, оно отлично работает в портретном режиме. Когда я переключаю его в ландшафтный режим, он имеет вышеуказанное поведение и не работает.

ИЗМЕНИТЬ 2

Я отправил отчет об ошибке в Apple.


person Alex    schedule 10.12.2015    source источник
comment
Что произойдет, если вы представите диалоговое окно авторизации служб определения местоположения, но запустите тот же код? Можете ли вы нажать кнопку «Разрешить»?   -  person Joe Masilotti    schedule 10.12.2015
comment
@JoeMasilotti Я попробовал службы определения местоположения, и это точно такая же история, я на Xcode 7.1.1.   -  person Alex    schedule 10.12.2015
comment
@JoeMasilotti Я попытался создать новое тестовое приложение и запустить приведенный выше код, и он отлично работает в портретном режиме, но в ландшафтном режиме я получаю те же рамки кнопок и не могу нажать «ОК».   -  person Alex    schedule 10.12.2015
comment
Интересный. Похоже на ошибку с тестированием пользовательского интерфейса? Я предлагаю подать радар (если вы еще этого не сделали) с этим примером кода, показывающим, что он работает в портретной, а не в альбомной ориентации.   -  person Joe Masilotti    schedule 10.12.2015
comment
Я также не рекомендовал бы использовать app.tap() для запуска обработчика, так как он коснется существующего элемента на экране (который может быть кнопкой). Раньше у меня были проблемы с этим, которые я решил, просто используя app.swipeUp()   -  person Andriko13    schedule 07.06.2017