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

Xcode 14下XCUITests无法点击WebView默认Done按钮问题求助

解决Xcode 14中WebView默认Done按钮无法点击的替代方案

问题背景

升级到Xcode 14后,UI测试中含WebView的场景出现大量失败,核心问题是WebView默认的Done按钮可被检测到,但无法完成点击操作,该问题在Xcode 13.4.1中不存在,已确认是Xcode 14的Bug。

替代方案

方案1:坐标模拟点击

若能确定Done按钮的大致位置,直接通过坐标模拟点击,绕过元素交互Bug:

// Swift示例:点击屏幕右下角(Done按钮常见位置)
let bottomRight = XCUIApplication().coordinate(withNormalizedOffset: CGVector(dx: 0.9, dy: 0.95))
bottomRight.tap()

注意:该方案依赖按钮固定位置,布局变动时需调整坐标参数。

方案2:调用元素底层点击方法

找到Done按钮后,直接调用底层点击方法,替代常规tap():

// Swift示例:触发按钮的底层点击动作
let doneButton = XCUIApplication().buttons["Done"]
if doneButton.exists {
    doneButton.perform(NSSelectorFromString("tap"))
}

方案3:WKWebView注入JS关闭

针对WKWebView,可注入JavaScript代码模拟关闭操作,替代点击Done按钮:

// Swift示例:向WebView注入JS触发关闭逻辑
webView.evaluateJavaScript("window.close();") { result, error in
    if let error = error {
        print("JS注入失败: \(error.localizedDescription)")
    }
}

方案4:使用自定义Done按钮

替换系统默认按钮为自定义导航栏按钮,测试时直接定位自定义元素:

// Swift示例:添加自定义Done按钮
let doneBtn = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(dismissWebView))
navigationItem.rightBarButtonItem = doneBtn

@objc func dismissWebView() {
    dismiss(animated: true)
}

测试时直接点击自定义按钮:

XCUIApplication().buttons["Done"].tap()

临时规避方案

若以上方案均不适用,可暂时回退到Xcode 13.4.1执行UI测试,等待Apple修复该Bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:40:33