You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 15:24:16