TestNG运行继承基类的Selenium登录测试用例报空指针异常如何修复
问题根因
空指针异常由变量作用域冲突导致:基类BaseClass已经声明了全局的WebDriver driver成员变量,但在setUp()方法中你重复声明了同名的局部变量WebDriver driver = new ChromeDriver();,该局部变量仅在setUp方法内部生效,全局成员变量driver始终没有被赋值,因此测试方法调用时就会触发空指针报错。
修复方案
- 修改
BaseClass的setUp()方法,去掉局部driver的类型声明,直接给全局driver赋值即可,修改后的代码如下:
@BeforeClass public void setUp () { System.out.println("in setup"); WebDriverManager.chromedriver().setup(); // 移除前面的WebDriver类型声明,直接为全局driver赋值 driver = new ChromeDriver(); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); driver.manage().window().maximize(); }
- 可选优化:如果没有多线程并行测试的需求,可以去掉全局driver的
static修饰符,避免多个测试用例运行时driver实例互相覆盖的问题;如果需要支持并行测试,可以改用ThreadLocal存储driver实例。
其他优化建议
隐式等待是driver的全局生效配置,仅需要在driver初始化时设置一次即可,
setUserName方法中重复设置隐式等待的代码可以直接删除。
内容的提问来源于stack exchange,提问作者mittalri
相关产品推荐
相关产品推荐

