idea中手动停止后selenium UI自动化打开的浏览器及chromedriver进程就会一直在后台中,使用钩子程序保证在程序结束时一定会进行退出。

在实际编写项目UI自动化测试脚本中经常会在本地执行调试,有很多次的启停,有时还是无头模式,而且经常在没有执行完成就停止了,这种时候因为代码被终止,就不会执行退出相关操作,导致浏览器一直在后台占用大量资源。所以想着通过什么方式保证不管什么情况都能退出关闭浏览器。

shutdownHook() 是 Java 中 Runtime 类提供的一种机制,用于在 JVM 关闭时执行特定的代码。开发者可以注册一个线程(shutdown hook),这个线程将在 JVM 关闭时自动执行,通常用于释放资源或执行清理工作。

主要特点:

  1. 注册方式:通过 Runtime.getRuntime().addShutdownHook(Thread hook) 注册一个线程。这个线程会在 JVM 正常关闭或异常退出时被执行。

触发时机:

  1. 程序正常结束。
  2. 用户或操作系统显式地终止 JVM(如 Ctrl+C 或 kill 命令)。
  3. 调用 System.exit() 退出。
  4. 系统关机或重启。
  5. 在未捕获异常导致的 JVM 崩溃时,shutdown hook 可能会被执行(但不是总能保证)。
java 复制代码
    private void shutdownHook() {
        // 注册一个Shutdown Hook,当JVM退出时执行
        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            if(!driver.toString().contains("null")){
                System.out.println("程序被终止,执行浏览器退出清除工作...");
                closeBrowser();
            }
        }));
    }

driver退出之前执行打印的后是有唯一信息的,通过打印的内容就能判断driver的状态。在未退出的情况下再去退出。

退出之前打印driver:chrome on WINDOWS (a42f777fab5ce8fb484a626281de5e4e)

退出之后打印driver:chrome on WINDOWS (null)

最后在创建浏览器deiver时去调用一下shutdownHook()方法,这样在程序终止时就会执行内部的closeBrowser()方法关闭浏览器。

相关推荐
程序员雷叔6 小时前
在postman设置请求里带动态token,看看这两种方法!
selenium·测试工具·单元测试·测试用例·pytest·lua·postman
H Corey6 小时前
Java--面向对象之继承与多态
java·开发语言·windows·学习·算法·intellij-idea
航Hang*7 小时前
Photoshop 图形与图像处理技术——第9章:实践训练2——变换花朵颜色与绘制正方体
图像处理·笔记·学习·ui·photoshop·期末·复习
航Hang*7 小时前
Photoshop 图形与图像处理技术——第9章:实践训练5——文字和路径
图像处理·笔记·学习·ui·photoshop·期末
工业HMI实战笔记7 小时前
HMI权限分级设计:兼顾安全与操作效率的平衡术
运维·数据库·安全·ui·自动化·人机交互·交互
小旭95279 小时前
【Java 面试高频考点】finally 与 return 执行顺序 解析
java·开发语言·jvm·面试·intellij-idea
深念Y9 小时前
IDEA下载JDK慢的真相:权限、DNS与CDN的解析
java·ide·intellij-idea
世人万千丶10 小时前
鸿蒙跨端框架 Flutter 学习 Day 4:网络交互——HTTP 请求基础与数据反序列化实战
网络·学习·flutter·ui·交互·harmonyos·鸿蒙
航Hang*1 天前
Photoshop 图形与图像处理技术——第9章:实践训练6——滤镜特效
图像处理·笔记·学习·ui·photoshop
小雨下雨的雨1 天前
鸿蒙PC应用:工程结构解析与配置文件详解
ui·华为·harmonyos·鸿蒙系统