iOS XCUITest:如何通过XCUITest从应用切换器彻底关闭应用?
在XCUITest中彻底关闭无Home键iPhone上的应用
确实app.terminate()只会将应用退至后台,不会从应用切换器中彻底移除。要实现彻底关闭应用的效果,你可以模拟iOS原生的手势操作来完成,具体步骤如下:
方法一:模拟完整手势流程(贴近真实用户操作)
通过模拟从屏幕底部上滑停留进入应用切换器,再上滑应用卡片的操作,代码示例(Swift):
let app = XCUIApplication() // 确保应用处于前台 app.activate() // 获取屏幕相对坐标,适配不同尺寸设备 let screen = app.windows.firstMatch.frame let startPoint = CGPoint(x: screen.midX, y: screen.maxY - 10) let holdPoint = CGPoint(x: screen.midX, y: screen.midY) // 执行上滑停留手势,进入应用切换器 app.windows.firstMatch.press(forDuration: 0.2, thenDragTo: holdPoint) // 定位当前应用的卡片(通过Bundle ID精准匹配) guard let appBundleID = app.bundleIdentifier else { return } let appCard = app.otherElements.containing(.application, identifier: appBundleID).firstMatch // 快速上滑卡片,彻底关闭应用 appCard.swipeUp(velocity: .fast)
方法二:利用系统API简化操作(更稳定)
在无Home键设备上,XCUIDevice.shared.press(.home)会触发进入应用切换器的操作,后续再关闭应用卡片:
let app = XCUIApplication() app.activate() // 触发进入应用切换器 XCUIDevice.shared.press(.home) // 等待应用切换器加载完成 Thread.sleep(forTimeInterval: 1) // 定位并关闭应用卡片 if let appBundleID = app.bundleIdentifier { let appCard = app.otherElements[appBundleID] appCard.swipeUp() }
注意事项
- 尽量使用相对坐标而非固定数值,避免因设备尺寸差异导致手势失效。
- 部分iOS版本可能调整应用切换器的UI结构,若卡片定位失败,可尝试通过
app.children(matching: .other).element(boundBy: 0)这类方式定位最近打开的应用卡片。 - 测试时需确保应用已完全加载至前台,避免手势操作时机过早导致失败。
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

