Selenium自动化运行抛出UndeclaredThrowableException异常求解决方案
异常根因分析
该报错的核心是JDK版本与依赖库不兼容:
- 底层抛出的
java.lang.NoSuchMethodException: java.lang.invoke.MethodHandles$Lookup.(java.lang.Class,int)是问题根源:你本地使用的JDK为17及以上高版本,而项目依赖的io.qameta.atlas组件是基于JDK 8编译实现的,该组件内部通过反射调用的MethodHandles$Lookup构造方法在高版本JDK中被调整了访问权限与方法签名,无法直接访问。 - 同事设备运行正常是因为其本地JDK版本为JDK 8,与依赖组件适配。
- 外层的
java.lang.reflect.UndeclaredThrowableException是动态代理类对底层异常的包装,无实际排查价值。
修复方案
- 方案1:统一JDK版本
将本地项目的运行、编译JDK版本调整为和同事一致的JDK 8,同步调整IDE的项目SDK配置、编译级别,以及构建工具(Maven/Gradle)的JDK配置即可。 - 方案2:添加JVM启动参数开放权限
若需要使用高版本JDK,在测试运行的VM选项中添加如下参数:
如使用IDEA运行,可在对应TestNG运行配置的「VM options」栏填入上述参数;如使用构建工具运行测试,将参数添加到测试任务的jvmArgs配置中即可。--add-opens java.base/java.lang.invoke=ALL-UNNAMED - 方案3:升级依赖组件版本
检查io.qameta.atlas是否发布了兼容高版本JDK的更新版本,将依赖升级到对应兼容版本即可无需额外配置直接运行。
内容的提问来源于stack exchange,提问作者asftds
相关产品推荐
相关产品推荐

