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

Swift XCUITest如何点击UIImagePickerController默认的“Choose”按钮?

问题根因

你当前使用的app对象仅指代你正在测试的自有应用,选中图片后弹出的「Choose」按钮属于系统相册进程提供的界面,不在你的应用视图层级内,所以通过app.buttons无法查询到对应元素,自然点击不生效。

修复方案

你需要先通过Bundle ID获取系统相册的应用实例,再通过该实例查询「Choose」按钮执行点击操作,建议额外添加等待逻辑避免界面加载时序问题,修改后代码如下:

import XCTest

// 原有逻辑
app.sheets["Profile Picture"].buttons["Open Photos"].tap()
let selectedImage = app.images["Photo, March 31, 2018, 12:44 AM"]
selectedImage.tap()

// 新增系统相册实例查询逻辑
let photosApp = XCUIApplication(bundleIdentifier: "com.apple.mobileslideshow")
let chooseButton = photosApp.buttons["Choose"]
// 最长等待3秒确保按钮加载完成,可根据需要调整时长
guard chooseButton.waitForExistence(timeout: 3) else {
    XCTFail("Choose按钮未正常加载")
    return
}
chooseButton.tap()
注意事项
  • 如果你的测试设备运行的是中文系统,「Choose」按钮的展示文本会自动替换为「选择」,需要将查询参数修改为"选择"才能匹配到元素。
  • 如果测试时首次打开相册会弹出权限请求弹窗,可以补充以下代码处理权限:
let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard")
let authAllowButton = springboard.buttons["允许访问所有照片"]
if authAllowButton.waitForExistence(timeout: 2) {
    authAllowButton.tap()
}

内容的提问来源于stack exchange,提问作者sarthak taneja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:45:03