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

