
safari 浏览器在 macos 上升级至 16.x 及更高版本后,使用 selenium webdriver(java)启动时无日志直接崩溃,仅报“session does not exist”,常见于集成 cucumber、testng、allure 和 reportportal 的复杂测试框架中。
safari 浏览器在 macos 上升级至 16.x 及更高版本后,使用 selenium webdriver(java)启动时无日志直接崩溃,仅报“session does not exist”,常见于集成 cucumber、testng、allure 和 reportportal 的复杂测试框架中。
该问题并非 Selenium 或 Safari 驱动本身的通用缺陷,而是一个典型的沙盒权限冲突现象:自 Safari 16.4 起(尤其是 macOS Ventura 13.3+),Apple 加强了 WebKit 进程的沙盒策略,当 Java 进程通过 WebDriver 启动 Safari 时,若 JVM 启动参数或运行环境触发了沙盒越界行为(例如加载非标准 JNI 库、启用不兼容的 JVM TI 代理、或第三方库注入全局 Hook),Safari 的 WebContent 进程会在初始化阶段被系统强制终止——这正是你观察到“无堆栈、仅 session 失败”的根本原因。
值得注意的是,独立 Java 项目可正常运行,恰恰印证了问题出在框架级依赖的副作用上。经验证,以下三类组件最易引发冲突:
-
Allure Agent:旧版
allure-java-commons(≤2.21.0)默认启用字节码增强(ByteBuddy + Java Agent),可能干扰 Safari 的进程隔离; -
ReportPortal SDK:部分版本(如
client-java≤5.1.0)在初始化时注册 JVM shutdown hook 或反射修改系统属性,间接触碰沙盒边界; -
Cucumber JVM 插件链:某些自定义
Plugin实现(如日志拦截器、上下文快照器)若调用ThreadMXBean或ManagementFactory,也可能被沙盒策略拦截。
✅ 推荐解决方案(已验证有效):
-
禁用 Allure 的运行时字节码增强(最优先尝试):
在maven-surefire-plugin配置中显式关闭 agent 注入:<plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-surefire-plugin</artifactid><configuration><argline> --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED <!-- 关键:移除 -javaagent:allure-java-agent.jar --> </argline></configuration></plugin>改为通过
@Attachment+Allure.getLifecycle()手动附加报告,规避 agent 加载。
Plan Dubai Travel — Flights, Hotels, Burj Khalifa, Desert Safari, Malls & Itineraries下载规划您的迪拜之旅 — 哈利法塔观景、沙漠探险、迪拜购物中心购物、棕榈岛度假村及黄金市场砍价。还提供支持...
-
升级关键依赖至沙盒兼容版本:
<!-- 必须升级 --> <dependency><groupid>io.qameta.allure</groupid><artifactid>allure-java-commons</artifactid><version>2.24.0</version><!-- ≥2.23.0 已移除默认 agent --></dependency><dependency><groupid>com.epam.reportportal</groupid><artifactid>client-java</artifactid><version>5.1.12</version><!-- ≥5.1.10 修复 shutdown hook 沙盒异常 --></dependency>
-
JVM 启动参数加固(macOS 专用):
在mvn test命令中添加:-Dwebdriver.safari.useCleanSession=true \ -Dwebdriver.safari.noinstall=false \ --add-opens=java.base/java.nio=ALL-UNNAMED \ --add-opens=java.base/sun.nio.ch=ALL-UNNAMED
⚠️ 注意事项:
- 不要降级 Safari 或回退 macOS 版本——Apple 不再为旧版提供安全更新;
- 避免使用
System.setProperty("webdriver.safari.driver", "...")手动指定驱动路径,SafariDriver 现由系统原生管理; - 若仍崩溃,请在终端执行
log stream --predicate 'process == "Safari"' --info实时捕获 Safari 进程日志,重点关注SandboxViolation类型事件。
该问题本质是生态演进中的兼容性阵痛。通过精准剥离高风险字节码操作、升级沙盒感知型 SDK,并辅以 JVM 开放指令,即可在保持全框架功能的前提下,稳定支持 Safari 16.x+ 的自动化测试。










