XCUI测试;如何找到状态栏

XCUITest; how to find StatusBar

我正在尝试创建一个 XCUITest,我想在其中验证 iOS' 状态栏是:

但是我不能'find'...例如:

func testExample() throws {

    let app = XCUIApplication()
    app.launch()

    let statusBar1 = app.descendants(matching: .statusBar)
    let statusBar2 = app.statusBars.element(boundBy: 0)
}

在控制台中执行 po statusBar1 时,我得到一个空结果:

Find: Target Application 'com.domain.TestStatusBar'
  ↪︎Find: Descendants matching type StatusBar

有什么线索可以找到吗?

谢谢!

自 iOS 12 起,状态栏不再可通过 XCTest 访问,因为它是系统应用程序的一部分。
如果您签入 iOS 11 及以下,app.descendants(matching: .statusBar).element 应该有预期的结果。

换句话说,您只能访问那些存在于您自己的应用程序 window 中的 XCUIElement


Credits*适用于XCTest

它现在可以作为跳板后代访问:

class Springboard {

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

    static var statusBar: XCUIElement {
        // There are always two statusBars, 
        // but only one of them is accessible when we need to tap it
        if XCUIDevice.shared.orientation.isPortrait {
            return Springboard.shared.statusBars.firstMatch
        }
        else {
            return Springboard.shared.statusBars.element(boundBy: 1)
        }
    }
}