UI测试中如何无需重启应用,实现应用切换器的切出与切回?
在XCTest中实现不重启应用的应用切换器往返操作
iOS 15及以上版本(原生API支持)
Apple在iOS 15后为XCTest新增了直接调用应用切换器的API,完全无需重启应用:
// 打开应用切换器 XCUIDevice.shared.openAppSwitcher() // 等待切换器加载完成后,切回当前应用 XCUIApplication().activate()
如果是全面屏设备,也可以用手势模拟更贴近真实操作:
// 从屏幕底部向上滑动并停留,唤起应用切换器 let mainWindow = XCUIApplication().windows.firstMatch mainWindow.swipeUp(velocity: .slow) // 切回当前应用 XCUIApplication().activate()
iOS 14及以下版本(模拟操作)
针对旧系统,只能通过模拟物理按键或手势来实现:
- 非全面屏设备:双击Home键唤起切换器
XCUIDevice.shared.press(.home) XCUIDevice.shared.press(.home) // 切回应用 XCUIApplication().activate()
- 全面屏设备:模拟向上滑动停留的手势
// 定位屏幕底部中间位置,长按后向上拖动唤起切换器 let bottomCenter = XCUIApplication().coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.9)) bottomCenter.press(forDuration: 0.5, thenDragTo: bottomCenter.withOffset(CGVector(dx: 0, dy: -200))) // 切回当前应用 XCUIApplication().activate()
注意事项
为了保证操作稳定性,建议在唤起切换器后添加等待断言,确认切换器已加载:
let appSwitcherExists = NSPredicate(format: "exists == true") expectation(for: appSwitcherExists, evaluatedWith: XCUIApplication().otherElements["AppSwitcher"], handler: nil) waitForExpectations(timeout: 5, handler: nil)
内容的提问来源于stack exchange,提问作者Vinoth N
相关产品推荐
相关产品推荐

