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
相关产品推荐
相关产品推荐

