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
相关产品推荐
相关产品推荐

