2

对于 iOS11,我使用以下内容在我的 UI 测试中访问 Face Not Recognized 系统警报:

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

这在 iOS12 中对我不起作用。警报不再显示在元素树中。

有谁知道我现在如何在 iOS12 中访问它?

在此处输入图像描述

这是来自 iOS11 元素树: 在此处输入图像描述

这是 iOS12 的 po XCUIApplication(bundleIdentifier: "com.apple.springboard") 的结果:

    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: ' '
  }
4

2 回答 2

0

可能是时间问题,可以通过以下方式解决:

let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard")


let firstButton  = springboard.buttons.firstMatch
//let secondButton = springboard.buttons.element(boundBy: 1)   // index: 0, 1, …
//let namedButton  = springboard.alerts.buttons["Some String"] // another example

if firstButton.waitForExistence(timeout: 6) {
    firstButton.tap() // do something after button exists
}
于 2021-09-11T00:55:37.987 回答
0

试试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% 匹配,并且可能需要为每个设备提供按钮的快照(但是,如果有人在 Swift 中为 UIImage 和 CGRect 编写 SIFT 算法,它可以为每个设备使用 1 个图像,因为SIFT是尺度不变特征变换)。


也许这个警报不存在于跳板的应用层次结构中,但不知何故存在于其他应用层次结构中。


建议:不要介意自动化这个测试。可以进行一些手动测试。

于 2019-02-06T15:44:45.173 回答