You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

引入sikulixapi依赖后ChromeDriver实例化失败报错排查

环境信息
  • Chrome版本:102.0.5005.115
  • ChromeDriver版本:102.0.5005.61(32位)
  • 项目框架:Serenity BDD + Selenium 4.0.0 + Cucumber
问题现象

在pom.xml中新增com.sikulix:sikulixapi:2.0.5依赖后,执行步骤定义文件login类中open()方法时抛出net.thucydides.core.webdriver.DriverConfigurationError异常,提示无法实例化org.openqa.selenium.chrome.ChromeDriver类型的WebDriver实例、无法启动新会话;移除sikulixapi依赖后代码可正常运行。
错误栈根因:抛出java.lang.ClassNotFoundException: io.netty.handler.codec.compression.Brotli,导致NettyHttpHandler请求执行失败,最终Chrome会话创建失败。

触发原因

Selenium 4.0.0内置依赖的Netty版本为4.1.60+,该版本已内置Brotli压缩编解码器实现类io.netty.handler.codec.compression.Brotli,ChromeDriver与Chrome浏览器建立通信会话时,会通过Netty HTTP客户端调用该类完成数据压缩处理。
引入sikulixapi:2.0.5时,Maven依赖传递机制会拉取该依赖自带的低版本Netty(版本低于4.1.60.Final)。如果Maven依赖仲裁优先加载了sikulixapi传递的低版本Netty,会直接覆盖Selenium引入的符合版本要求的Netty包,运行时找不到Brotli对应类,直接导致Chrome会话创建失败,外层抛出Serenity封装的驱动配置错误异常。

修复方案
  • 排除sikulixapi传递的Netty依赖:引入sikulixapi时直接排除所有io.netty组下的传递依赖,强制项目全局使用Selenium自带的匹配版本Netty,配置示例如下:
<dependency>
    <groupId>com.sikulix</groupId>
    <artifactId>sikulixapi</artifactId>
    <version>2.0.5</version>
    <exclusions>
        <exclusion>
            <groupId>io.netty</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  • 显式声明Netty版本:在pom.xml中直接声明版本不低于4.1.60.Final的Netty全量依赖(推荐版本和Selenium 4.0.0内置的Netty版本完全一致,可通过mvn dependency:tree命令查看Selenium依赖的Netty具体版本),通过Maven依赖仲裁的就近原则,强制全局使用指定版本的Netty,避免版本覆盖。
  • 升级sikulixapi版本:如果排除Netty依赖后sikulixapi运行异常,可升级sikulixapi到更高迭代版本,新版本已调整Netty依赖的作用域,不会出现传递低版本Netty覆盖Selenium依赖的问题。

配置修改完成后,先执行mvn clean compile刷新依赖,再执行mvn dependency:tree | grep netty校验项目实际引入的Netty版本,确认无低版本Netty残留后重新执行用例即可。

内容的提问来源于stack exchange,提问作者Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 20:24:19