使用Maven执行多个Selenium测试用例时出现WebDriver为空的空指针异常
问题现象
- 项目包含2个Selenium测试类,手动逐个运行单个测试用例时全部可正常跑通
- 使用Maven执行全量测试时,仅1个用例执行成功,其余用例抛出空指针异常
- 报错堆栈指向:
java.lang.NullPointerException at com.selenium.course.tests.ProductTests.executeProductTest(ProductTests.java:17)
- 预期效果:所有测试用例无需手动逐个触发,直接通过Maven执行即可全部通过
排查与解决思路
- 这类“手动单跑没问题、批量执行就报错”的情况,先定位空指针的具体对象:在
ProductTests.java第17行打断点,分别在手动运行、Maven批量运行的场景下调试,看该行引用的对象是否为未初始化的null - 结合Selenium项目的常见问题,该报错大概率是全局静态共享WebDriver实例导致的:
- 单跑测试类时,代码会完整走一遍驱动初始化流程,拿到可用的driver对象,自然不会报错
- Maven批量跑多个测试类时,执行顺序和单跑时不同,先跑完的测试类会触发浏览器关闭、把全局静态的driver对象置空,后续执行的测试类再引用这个driver对象时,拿到的就是null,直接触发空指针
- 具体修复动作:
- 把测试基类里全局静态的WebDriver变量去掉,改成每个测试类独立管理自己的driver实例:用测试框架的前置注解在每个测试方法执行前新建驱动,测试结束后关闭驱动,从根源上避免跨类的实例状态污染
- 检查Maven Surefire测试插件的配置,确保测试类执行时的类加载隔离没有被关闭,避免静态变量被不同测试类共享
- 把所有依赖手动触发的初始化逻辑,全部迁到测试框架的生命周期注解里,避免批量执行时跳过初始化步骤
内容的提问来源于stack exchange,提问作者Александр Дерменжи
相关产品推荐
相关产品推荐

