Xcode录制Safari登录界面崩溃,XCUITest微软SSO测试仍遇崩溃问题
解决XCUITest跳转Microsoft SSO/Safari页面时Xcode崩溃的问题
我太懂这种挫败感了——明明Apple在Xcode 10的发布说明里说修复了跳转网页时Xcode崩溃的Bug,但升级到10.3甚至11.1还是遇到相同问题,连录制Safari登录测试都直接崩,这绝对是个棘手的小坑。结合我自己和社区里的经验,给你几个可以尝试的解决方案:
关掉UI测试录制的自动截图
很多时候,录制过程中Xcode自动截取Safari界面的操作会触发崩溃。你可以打开Xcode偏好设置(Xcode > Preferences > Behaviors),找到UI测试录制相关的行为选项,把自动截图的功能关掉,再试试录制操作。彻底清理Xcode的Derived Data缓存
缓存损坏是这类莫名其妙崩溃的常见诱因,按以下步骤操作:- 完全关闭Xcode
- 打开终端,执行命令:
rm -rf ~/Library/Developer/Xcode/DerivedData - 重新打开Xcode,先清理项目(快捷键
Cmd+Shift+K),再重新构建并运行测试
手动编写Safari交互代码,绕过录制功能
既然录制会崩,不如直接手动写测试代码来处理SSO跳转逻辑,示例代码如下:// 切换到Safari应用 let safariApp = XCUIApplication(bundleIdentifier: "com.apple.mobilesafari") safariApp.activate() // 等待SSO登录页面加载完成,操作输入框 let emailInput = safariApp.textFields["Email or phone"] XCTAssertTrue(emailInput.waitForExistence(timeout: 10)) emailInput.typeText("your-test-account@domain.com") // 点击下一步按钮 let nextBtn = safariApp.buttons["Next"] nextBtn.tap() // 后续密码输入、登录确认等操作可以参照这个逻辑编写另外要注意,如果你测试的SSO页面是HTTP协议,需要在测试目标的
Info.plist中添加NSAllowsArbitraryLoads权限;如果是HTTPS则无需额外配置。检查Xcode与iOS设备的版本匹配度
版本不兼容也可能导致这类问题,比如Xcode 11.1建议搭配iOS 13.x系列的设备测试,尽量保持Xcode和设备系统版本接近,避免跨大版本进行UI测试。尝试Xcode的Beta版本
如果上面的方法都没效果,可以试试Apple最新的Xcode Beta版本,通常这类边缘场景的崩溃会在后续版本中得到修复。
内容的提问来源于stack exchange,提问作者Alok
相关产品推荐
相关产品推荐

