Selenium WebDriver:Safari 16.x以上版本在测试框架中启动后崩溃
解决思路
1. 排查依赖冲突
- 框架集成了多套依赖库,大概率存在Selenium相关依赖版本不一致的问题,比如Cucumber、TestNG或Allure引入了旧版Selenium组件,和指定的4.11.0版本冲突。
- 执行
mvn dependency:tree(Maven项目)或./gradlew dependencies(Gradle项目)梳理依赖树,找出重复或版本不符的Selenium相关包(如selenium-safari-driver、selenium-java),强制统一为4.11.0版本。
2. 简化SafariDriver初始化逻辑
- 独立项目可正常运行,说明框架的初始化流程可能干扰了SafariDriver。先在框架中用最基础的代码启动浏览器,排查是否是额外配置导致崩溃:
SafariOptions options = new SafariOptions(); WebDriver driver = new SafariDriver(options); - 再逐步添加框架中的配置(如TestNG监听器、Allure截图钩子),定位触发崩溃的具体配置项。
3. 排查ReportPortal/Allure的会话监听问题
- ReportPortal和Allure都会对WebDriver会话进行监听或代理,可能和Safari16.x以上的新特性(如会话隔离、权限控制)存在兼容性问题。
- 临时禁用ReportPortal的WebDriver集成,或关闭Allure的自动截图/会话追踪功能,测试是否还会崩溃。若问题消失,再针对性调整工具配置,比如更新ReportPortal代理适配版本,或修改Allure监听器逻辑。
4. 调整JVM参数与Safari权限
- OpenJDK17的JVM参数可能和Safari16.x的沙箱机制冲突,尝试添加
--add-opens java.base/java.lang=ALL-UNNAMED或--add-opens java.desktop/com.apple.eawt=ALL-UNNAMED参数,避免反射权限问题导致驱动崩溃。 - 确认MacOS权限:打开「系统设置」→「隐私与安全性」→「自动化」,确保OpenJDK17的Java进程被允许控制Safari。
5. 升级Selenium版本
- Selenium 4.11.0可能对Safari16.x以上版本存在未修复的适配问题,尝试升级到最新稳定版(如4.15.0+),新版本通常会修复浏览器兼容漏洞。
6. 分析崩溃转储信息
- 从崩溃日志来看,崩溃发生在
com.apple.WebKit.WebContent进程,核心是WebInspector模块出错,说明驱动与Safari的调试协议交互存在问题。 - 尝试在SafariOptions中禁用调试协议相关配置,比如添加
options.setCapability("safari:useSimulator", false)(若使用模拟器),或开启Safari开发者模式,检查调试连接是否正常。
内容的提问来源于stack exchange,提问作者deepakguna
相关产品推荐
相关产品推荐

