Системное оповещение не отображается в дереве элементов в iOS12 - PullRequest
0 голосов
/ 16 января 2019

Для iOS11 я использовал следующее для доступа к системному предупреждению Face Not Recognized в моем тесте пользовательского интерфейса:

XCUIApplication(bundleIdentifier: "com.apple.springboard").alerts.firstMatch

Это не работает для меня в iOS12. Предупреждение больше не отображается в дереве элементов.

Кто-нибудь знает, как я могу получить доступ к этому сейчас в iOS12?

enter image description here

Это из дерева элементов iOS11: enter image description here

Это результат применения po XCUIApplication (bundleIdentifier: "com.apple.springboard") для iOS12:

    Attributes: Application, pid: 30484, label: ' '
Element subtree:
 →Application, 0x60000105c000, pid: 30484, label: ' '
    Window, 0x60000105c0d0, {{0.0, 0.0}, {414.0, 896.0}}
      Other, 0x60000105c1a0, {{0.0, 0.0}, {414.0, 896.0}}
        Other, 0x60000105c270, {{0.0, 0.0}, {414.0, 896.0}}
          Other, 0x60000105c340, {{0.0, 0.0}, {414.0, 896.0}}
      Other, 0x60000105c410, {{0.0, 0.0}, {414.0, 896.0}}
    Window, 0x60000105c4e0, {{0.0, 0.0}, {414.0, 896.0}}
      Other, 0x60000105c5b0, {{0.0, 0.0}, {0.0, 0.0}}
        Icon, 0x60000105c680, {{-2.3, -2.0}, {70.0, 91.3}}
        Icon, 0x60000105c750, {{-2.0, -2.0}, {68.0, 91.3}}
        Icon, 0x60000105c820, {{-2.0, -2.0}, {68.0, 91.3}}
        Icon, 0x60000105c8f0, {{-2.0, -2.0}, {68.0, 91.3}}
        Icon, 0x60000105c9c0, {{-2.0, -2.0}, {68.0, 91.3}}
        Icon, 0x60000105ca90, {{-2.0, -2.0}, {68.0, 91.3}}
        Icon, 0x60000105cb60, {{-2.0, -2.0}, {68.0, 91.3}}
      Other, 0x60000105cc30, {{0.0, 0.0}, {414.0, 896.0}}
        Other, 0x60000105cd00, {{0.0, 0.0}, {414.0, 896.0}}
          Other, 0x60000105cdd0, {{0.0, 0.0}, {414.0, 100.0}}
          Other, 0x60000105cea0, {{0.0, 0.0}, {414.0, 896.0}}
        Other, 0x60000105cf70, {{0.0, 0.0}, {414.0, 896.0}}
    Window, 0x60000105d040, {{0.0, 0.0}, {414.0, 896.0}}
      Other, 0x60000105d110, {{0.0, 0.0}, {414.0, 896.0}}
    Window, 0x60000105d1e0, {{0.0, 0.0}, {414.0, 896.0}}
      Other, 0x60000105d2b0, {{0.0, 0.0}, {414.0, 896.0}}
        Other, 0x60000105d380, {{0.0, 0.0}, {414.0, 896.0}}
          Other, 0x60000105d450, {{0.0, 0.0}, {414.0, 896.0}}
            Other, 0x60000105d520, {{0.0, 0.0}, {414.0, 896.0}}
              Other, 0x60000105d5f0, {{0.0, 0.0}, {414.0, 896.0}}
                Other, 0x60000105d6c0, {{0.0, 0.0}, {414.0, 896.0}}
                  Other, 0x60000105d790, {{0.0, 0.0}, {414.0, 896.0}}
                    Other, 0x60000105d860, {{0.0, 0.0}, {414.0, 896.0}}
                      Other, 0x60000105d930, {{0.0, 0.0}, {414.0, 896.0}}
                        Other, 0x60000105da00, {{0.0, 0.0}, {414.0, 896.0}}
                        Other, 0x60000105dad0, {{0.0, 0.0}, {414.0, 896.0}}
                          Other, 0x60000105dba0, {{0.0, 0.0}, {414.0, 896.0}}
                            Other, 0x60000105dc70, {{0.0, 0.0}, {414.0, 896.0}}
                            Other, 0x60000105dd40, {{0.0, 0.0}, {414.0, 896.0}}
                            Other, 0x60000105de10, {{0.0, 0.0}, {414.0, 896.0}}
                        Other, 0x60000105dee0, {{0.0, 0.0}, {414.0, 896.0}}
                          Other, 0x60000105dfb0, {{0.0, 0.0}, {414.0, 896.0}}
                            Other, 0x60000105e080, {{0.0, 0.0}, {414.0, 896.0}}
    Other, 0x60000105e150, {{0.0, 0.0}, {1242.0, 2688.0}}
      Other, 0x60000105e220, {{0.0, 0.0}, {1242.0, 2688.0}}
        Other, 0x60000105e2f0, {{0.0, 0.0}, {1242.0, 2688.0}}
          Other, 0x60000105e3c0, {{0.0, 0.0}, {1242.0, 2688.0}}
            Other, 0x60000105e490, {{0.0, 0.0}, {1242.0, 2688.0}}
        Other, 0x60000105e560, {{0.0, 0.0}, {1242.0, 2688.0}}
          Other, 0x60000105e630, {{0.0, 0.0}, {1242.0, 2688.0}}
            Other, 0x60000105e700, {{0.0, 0.0}, {1242.0, 2688.0}}
        Other, 0x60000105e7d0, {{0.0, 0.0}, {1242.0, 2688.0}}
          Other, 0x60000105e8a0, {{0.0, 0.0}, {1242.0, 2688.0}}
            Other, 0x60000105e970, {{0.0, 0.0}, {1242.0, 2688.0}}
        Other, 0x60000105ea40, {{0.0, 0.0}, {1242.0, 2688.0}}
        Other, 0x60000105eb10, {{0.0, 0.0}, {1242.0, 2688.0}}
          Other, 0x60000105ebe0, {{0.0, 0.0}, {1242.0, 2688.0}}
        Other, 0x60000105ecb0, {{0.0, 0.0}, {1242.0, 2688.0}}
          Other, 0x60000105ed80, {{0.0, 0.0}, {1242.0, 2688.0}}
        Other, 0x60000105ee50, {{0.0, 0.0}, {1242.0, 2688.0}}
          Other, 0x60000105ef20, {{0.0, 0.0}, {1242.0, 2688.0}}
        Other, 0x60000105eff0, {{0.0, 0.0}, {1242.0, 2688.0}}
          Other, 0x60000105f0c0, {{0.0, 0.0}, {1242.0, 2688.0}}
        Other, 0x60000105f190, {{0.0, 0.0}, {1242.0, 2688.0}}
          Other, 0x60000105f260, {{0.0, 0.0}, {1242.0, 2688.0}}
            Other, 0x60000105f330, {{0.0, 0.0}, {1242.0, 2688.0}}
        Other, 0x60000105f400, {{0.0, 0.0}, {1242.0, 2688.0}}
          Other, 0x60000105f4d0, {{0.0, 0.0}, {1242.0, 2688.0}}
            Other, 0x60000105f5a0, {{0.0, 0.0}, {1242.0, 2688.0}}
        Other, 0x60000105f670, {{0.0, 0.0}, {1242.0, 2688.0}}
          Other, 0x60000105f740, {{0.0, 0.0}, {1242.0, 2688.0}}
            Other, 0x60000105f810, {{0.0, 0.0}, {1242.0, 2688.0}}
        Other, 0x60000105f8e0, {{0.0, 0.0}, {1242.0, 2688.0}}
          Other, 0x60000105f9b0, {{0.0, 0.0}, {1242.0, 2688.0}}
            Other, 0x60000105fa80, {{0.0, 0.0}, {1242.0, 2688.0}}
        Other, 0x60000105fb50, {{0.0, 0.0}, {1242.0, 2688.0}}
          Other, 0x60000105fc20, {{0.0, 0.0}, {1242.0, 2688.0}}
            Other, 0x60000105fcf0, {{0.0, 0.0}, {1242.0, 2688.0}}
        Other, 0x60000105fdc0, {{0.0, 0.0}, {1242.0, 2688.0}}
          Other, 0x60000105fe90, {{0.0, 0.0}, {1242.0, 2688.0}}
            Other, 0x600001063190, {{0.0, 0.0}, {1242.0, 2688.0}}
      Other, 0x600001062d80, {{0.0, 0.0}, {1242.0, 2688.0}}
    Window, 0x600001063260, {{0.0, 0.0}, {414.0, 896.0}}, identifier: 'SBSwitcherWindow'
      Other, 0x600001062f20, {{0.0, 0.0}, {414.0, 896.0}}
        Other, 0x600001062ff0, {{0.0, 0.0}, {414.0, 896.0}}
          Other, 0x600001062e50, {{0.0, 0.0}, {414.0, 896.0}}
            Other, 0x600001063dc0, {{0.0, 0.0}, {414.0, 896.0}}
              ScrollView, 0x600001063e90, {{0.0, 0.0}, {414.0, 896.0}}
              Other, 0x600001062cb0, {{0.0, 0.0}, {414.0, 896.0}}, identifier: 'AppSwitcherContentView'
                Other, 0x600001063330, {{0.0, 0.0}, {414.0, 896.0}}, label: 'App', value: Active
                  ScrollView, 0x600001063c20, {{0.0, -448.0}, {414.0, 1344.0}}
                    Other, 0x600001062150, {{0.0, 0.0}, {414.0, 996.0}}
                      Other, 0x600001062560, {{0.0, 0.0}, {414.0, 896.0}}
                      Other, 0x600001061ba0, {{0.0, 0.0}, {414.0, 896.0}}
                        Other, 0x600001061c70, {{0.0, 0.0}, {414.0, 896.0}}
                          Other, 0x600001062220, {{0.0, 0.0}, {414.0, 896.0}}
                            Other, 0x600001062630, {{0.0, 0.0}, {414.0, 896.0}}
                              Other, 0x600001061fb0, {{0.0, 0.0}, {414.0, 896.0}}
                                Other, 0x600001061e10, {{0.0, 0.0}, {414.0, 896.0}}
                      Other, 0x600001062be0, {{0.0, 0.0}, {414.0, 896.0}}
    Window (Main), 0x600001061ee0, {{0.0, 0.0}, {414.0, 896.0}}
      Other, 0x600001063670, {{0.0, 0.0}, {414.0, 896.0}}
        Other, 0x600001063740, {{0.0, 0.0}, {414.0, 896.0}}
          Other, 0x600001062700, {{0.0, 0.0}, {414.0, 896.0}}
            Other, 0x600001062490, {{0.0, 0.0}, {414.0, 896.0}}
              Other, 0x600001061040, {{0.0, 0.0}, {414.0, 896.0}}
                Other, 0x600001062080, {{0.0, 0.0}, {414.0, 896.0}}
                  Other, 0x6000010639b0, {{0.0, 0.0}, {414.0, 896.0}}
          Other, 0x6000010628a0, {{0.0, 0.0}, {414.0, 896.0}}, identifier: 'Home Grabber'
            Other, 0x600001063a80, {{133.0, 883.0}, {148.0, 5.0}}
    Window, 0x6000010638e0, {{0.0, 0.0}, {414.0, 896.0}}
      Other, 0x600001061d40, {{0.0, 0.0}, {414.0, 896.0}}
        Other, 0x6000010627d0, {{0.0, 896.0}, {414.0, 243.0}}
        Other, 0x600001063400, {{0.0, 0.0}, {414.0, 896.0}}
          Other, 0x6000010635a0, {{0.0, 0.0}, {414.0, 896.0}}
    Window, 0x600001063b50, {{-0.0, -0.0}, {414.0, 896.0}}
      Other, 0x600001063cf0, {{-0.0, -0.0}, {414.0, 896.0}}
        Other, 0x600001063810, {{0.0, 0.0}, {414.0, 896.0}}
          Other, 0x6000010634d0, {{-0.0, -0.0}, {414.0, 896.0}}
    Window, 0x600001062b10, {{0.0, 0.0}, {414.0, 896.0}}
    Window, 0x6000010630c0, {{0.0, 0.0}, {414.0, 896.0}}
      Other, 0x600001062970, {{0.0, 0.0}, {414.0, 896.0}}
    Window, 0x6000010622f0, {{0.0, 0.0}, {414.0, 896.0}}
      Other, 0x6000010623c0, {{0.0, 0.0}, {414.0, 896.0}}
      Other, 0x600001062a40, {{0.0, 0.0}, {0.0, 0.0}}
Path to element:
 →Application, pid: 30484, label: ' '
Query chain:
 →Find: Application 'com.apple.springboard'
  Output: {
    Application, pid: 30484, label: ' '
  }

1 Ответ

0 голосов
/ 06 февраля 2019

Попробуйте XCUIApplication(privateWithPath: nil, bundleID: "com.apple.springboard").coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.5)).tap().Возможно, вам придется поиграть со значениями смещения.

Если это приводит к отмене оповещения, вы по крайней мере можете отменить это оповещение.Это может быть так, если предупреждение обрабатывается UIInterruptionMonitor.

В этом случае используйте addUIInterruptionMonitor: https://developer.apple.com/documentation/xctest/xctestcase/1496273-adduiinterruptionmonitor


Существует способ не запускать UIInterruptionMonitor и не нажимать на координаты, но длячто вы должны найти XCUIElement для предупреждения и нажать на его координату, нажав на любой другой элемент, вызывающий UIInterruptionMonitor.


Если UIInterruptionMonitor не работает, вы можете нажать на координату.С жестко закодированной координатой все в порядке, но вы не можете определить, отображается предупреждение или нет.

Чтобы получить точную координату и проверить, отображается ли что-либо на экране, вы можете найти изображение на изображении: изображение вашей кнопки включеноснимок экрана: https://gist.github.com/artyom-razinov/f5b190e2a5f3282eb0b5c1191a1bc674

Алгоритм в коде требует 100% совпадения пикселей изображения и может потребовать создания снимков кнопки для каждого устройства (однако, если кто-то напишет алгоритм SIFT дляUIImage и CGRect в Swift, он может использовать 1 изображение для каждого устройства, потому что SIFT - это масштабируемое преобразование инвариантных объектов).


Возможно, это предупреждение не существует в иерархии приложений трамплина, но каким-то образом существует в другихиерархия приложения.


Совет: не беспокойтесь об автоматизации этого теста.Можно провести несколько ручных тестов.

...