Maven执行mvn clean install时Chrome Driver报错Could not start a new session如何解决
问题根因分析
你遇到的问题核心差异是IntelliJ运行测试和Maven命令运行测试的执行环境不同:IntelliJ运行时是直接使用当前用户的桌面环境上下文启动进程,而mvn clean install默认通过Maven Surefire插件fork独立子进程执行测试,子进程的环境变量、权限、工作目录都和IntelliJ的执行上下文存在差异,才会导致ChromeDriver进程提前终止。
可直接落地的解决方案
方案1:修改Maven Surefire插件配置禁用进程fork
这是90%以上同类问题的解决方法,直接在你的pom.xml中添加/修改Surefire插件配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M7</version> <configuration> <!-- 禁用fork子进程,和IntelliJ运行逻辑保持一致 --> <forkCount>0</forkCount> <!-- 确保测试使用的JDK和项目配置一致 --> <jvm>${java.home}/bin/java</jvm> </configuration> </plugin> </plugins> </build>
修改后重新执行mvn clean install验证。
方案2:给Chrome添加启动参数适配子进程运行环境
如果禁用fork不符合你的项目要求,可以在初始化ChromeDriver时添加以下参数,规避子进程运行的权限/环境限制:
ChromeOptions options = new ChromeOptions(); // 禁用沙箱,解决Windows子进程权限不足问题 options.addArguments("--no-sandbox"); // 禁用共享内存限制,避免资源不足导致进程崩溃 options.addArguments("--disable-dev-shm-usage"); // 允许跨域请求,规避驱动和浏览器通信校验失败问题 options.addArguments("--remote-allow-origins=*"); // 可选:如果还是报错,手动指定Chrome浏览器的安装路径 options.setBinary("C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"); WebDriver driver = new ChromeDriver(options);
方案3:核对ChromeDriver路径配置
如果你是手动指定webdriver.chrome.driver系统变量,务必使用绝对路径,不要使用相对路径:
// 错误写法:相对路径会因为Maven和IntelliJ的工作目录不同找不到驱动 // System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); // 正确写法:用绝对路径,或者直接使用WebDriverManager自动管理 System.setProperty("webdriver.chrome.driver", "C:\\你的驱动存放路径\\chromedriver.exe");
方案4:临时关闭安全软件验证
部分杀毒软件/防火墙会拦截非桌面上下文启动的ChromeDriver进程,可临时关闭杀毒软件、Windows Defender实时防护后重新执行Maven命令测试,如果恢复正常,将Chrome.exe、chromedriver.exe、maven的java.exe加入安全软件白名单即可。
内容的提问来源于stack exchange,提问作者Azeem Baloch
相关产品推荐
相关产品推荐

