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

Selenium TestNG子类继承父类后WebDriver为空空指针异常问题

问题根因

  • TestNG执行子类@Test注解的测试方法前,没有触发父类的LogInCredit()初始化逻辑,driver相关初始化代码从未运行
  • 父类LogInCredit()方法内部重复定义了局部变量WebDriver driver,新创建的ChromeDriver实例被赋值给了方法内的局部变量,类成员变量public WebDriver driver从未被赋值,始终保持null
  • 你单独跑父类带main方法时正常,是因为main方法中用的是方法内的局部driver实例,没有用到类的成员变量,因此没暴露变量覆盖的问题

修复步骤

1. 修改父类LogInPage代码

给初始化方法加上TestNG前置注解,同时删除局部变量声明,直接给成员变量赋值:

package logInCredit;
 
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.BeforeMethod;

public class LogInPage  {
    public WebDriver driver ;

    @BeforeMethod
    public void LogInCredit() {
        // 本地如果没有配置ChromeDriver环境变量,需要显式指定驱动路径
        // System.setProperty("webdriver.chrome.driver", "你的本地驱动路径/chromedriver.exe");
        // 直接给成员变量赋值,不要重复声明WebDriver
        driver = new ChromeDriver();
        driver.get("https://opensource-demo.orangehrmlive.com/");
        driver.manage().window().maximize();
        System.out.println(driver);
    }
}

2. 子类新增后置清理逻辑(可选)

建议加@AfterMethod注解,测试用例跑完后自动关闭浏览器释放资源:

package afterLogIn;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;
import logInCredit.LogInPage;

public class NextLogIn extends LogInPage {

    @Test
    public void DashboardPage() {
        System.out.println("driver is " +driver);
        // 输入管理员用户名
        WebElement AdminUserName = driver.findElement(By.xpath("//input[@name='txtUsername']"));
        AdminUserName.sendKeys("Admin");
        // 输入管理员密码
        WebElement AdminPassword = driver.findElement(By.xpath("//input[@name='txtPassword']"));
        AdminPassword.sendKeys("admin123");
        // 点击登录
        WebElement LogInButton = driver.findElement(By.xpath("//input[@id='btnLogin']"));
        LogInButton.click();
        WebElement ClickAdmin = driver.findElement(By.xpath("//*[text()='Admin']"));
        ClickAdmin.click();
        WebElement ClickPIM = driver.findElement(By.xpath("//*[text()='PIM']"));
        ClickPIM.click();
    }
    
    @AfterMethod
    public void tearDown() {
        if(driver != null) {
            driver.quit();
        }
    }
}

3. testng.xml无需修改,直接运行即可,此时driver已经被正确初始化,不会再触发空指针异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:36:04