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)
}
}
}
我正在尝试创建一个 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)
}
}
}