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

WebDriverManager调用avoidShutdownHook()后ChromeDriver仍自动退出问题

解决WebDriverManager远程模式下浏览器自动关闭的问题

问题根源

你是通过远程连接Selenium Standalone Server创建WebDriver实例,WebDriverManager的.avoidShutdownHook()只对本地直接启动的ChromeDriver生效。远程模式下,浏览器的生命周期由Selenium Server和Chrome自身的启动参数控制,所以这个配置完全起不到作用。

修复步骤

1. 给ChromeOptions添加--detach参数

这个参数会让Chrome浏览器在ChromeDriver进程结束后保持运行,不会随驱动进程退出而关闭:

ChromeOptions options = new ChromeOptions();
options.addArguments("--detach");
// 你的其他配置(如--start-maximized等)继续保留

2. 修改Selenium Standalone Server启动参数

启动Server时加上--stay-alive true,避免Server在会话结束后立即清理浏览器进程:

Main.main(new String[]{"standalone", "--port", Integer.toString(remotePort), "--stay-alive", "true"});

3. 排查测试框架的隐式清理逻辑

如果你用JUnit/TestNG这类框架,除了自己写的teardown方法,还要检查框架自带的钩子(比如JUnit的@After、TestNG的@AfterMethod),确保没有地方隐式调用driver.quit()——这个方法会通知Selenium Server关闭当前会话和对应的浏览器。

4. 简化远程模式下的WebDriverManager代码

远程模式下不需要重复调用WebDriverManager.chromedriver().setup()(因为你手动启动了Standalone Server),而且.avoidShutdownHook()可以直接去掉,优化后的代码:

Main.main(new String[]{"standalone", "--port", Integer.toString(remotePort), "--stay-alive", "true"});

ChromeOptions options = new ChromeOptions();
options.addArguments("--detach");

driver = WebDriverManager.chromedriver()
        .remoteAddress("http://" + remoteServer + ":" + remotePort + "/wd/hub")
        .capabilities(options)
        .create();

补充说明

  • 配置完成后,无论测试通过还是失败,浏览器都会保持打开状态,你可以直接在页面上检查元素、调试交互。
  • 调试完成后,手动关闭Chrome窗口即可,不会影响后续测试的执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:05:55