Maven集成Selenium运行报SLF4J错误及ChromeDriver启动超时问题
问题排查结果
你遇到的报错分为两类,其中SLF4J提示为非阻断警告,真正导致测试执行失败的是ChromeDriver运行异常。
1. SLF4J StaticLoggerBinder 加载失败说明
你不需要主动引入org.slf4j.impl.StaticLoggerBinder类,这个报错的触发逻辑是:你引入的selenium-java、testng依赖都传递依赖了SLF4J日志门面,SLF4J本身只提供日志接口规范,不包含具体日志实现,启动时扫描不到实现类就会输出该提示,自动降级为不输出任何日志的NOP模式。
- 该警告不会影响程序核心逻辑运行,如果要消除提示,在pom.xml的
<dependencies>节点下补充一个SLF4J适配的日志实现即可,例如轻量的simple实现:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.36</version> <scope>test</scope> </dependency>
2. 核心报错根因(WebDriver启动超时)
后续一连串的Driver服务启动超时、端口等待超时都是表层现象,根因在最开始的SEVERE级别日志里已经明确:
Cannot run program "/Users/zarinabakchieva/Desktop/romance/chromedriver" (in directory "."): error=86, Bad CPU type in executable
这个错误代表你项目目录下存放的chromedriver二进制文件和当前设备的CPU架构不匹配:你的设备系统为Mac OS X,运行架构为x86_64,但当前的chromedriver是为其他架构(如ARM架构M系列芯片、32位系统)编译的,系统无法执行该程序,导致ChromeDriver服务根本没有成功启动,Selenium等待20秒后无法连通driver的服务端口,最终抛出超时异常。
修复操作
- 删除当前项目路径下架构不匹配的chromedriver文件
- 查看本机安装的Chrome浏览器大版本号,下载版本号完全匹配、适配Mac x86_64架构的ChromeDriver,放到原项目路径下
- 终端进入chromedriver所在目录,执行
chmod +x chromedriver给文件赋予可执行权限 - 重新运行测试即可正常启动ChromeDriver
内容的提问来源于stack exchange,提问作者Z Bakchieva
相关产品推荐
相关产品推荐

