You need to enable JavaScript to run this app. testNg运行Selenium代码报null pointer exception:this.driver为null求解
优惠活动
大模型
产品
解决方案
定价
更多

testNg运行Selenium代码报null pointer exception:this.driver为null求解

问题根因

这是典型的**Java变量遮蔽(Variable Shadowing)**引发的空指针问题,和Selenium、TestNG框架本身逻辑无关:

  • 类中定义了全局成员变量WebDriver driver,初始值默认为null
  • 在@BeforeTest修饰的LaunchBrowser()方法中,写了WebDriver driver=new ChromeDriver()——前面带的WebDriver类型声明,代表这是一个全新的、只在LaunchBrowser方法内部生效的局部变量,和类的全局driver是完全两个独立的对象
  • 浏览器启动流程实际操作的是这个局部的driver对象,类的全局this.driver从头到尾没有被赋值,一直保持null状态
  • 当@Test修饰的Img()方法执行到driver.findElement()调用时,实际操作的是null的全局driver,就会抛出对应的空指针报错。
修复方法

只需要去掉LaunchBrowser()方法内创建ChromeDriver对象时的局部变量类型声明,直接给全局的driver成员变量赋值即可:

public class ImgDDChkbxRadio  {
    WebDriver driver;
    
    @BeforeTest
    public void LaunchBrowser()
    {
        System.setProperty("webdriver.chrome.driver","F:\\chromedriver_win32\\chromedriver.exe");
        // 移除前面的WebDriver类型声明,直接给全局driver赋值
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.get("http://www.leafground.com/");
    }   
    @Test
    public void Img()
    {   
        driver.findElement(By.xpath("//img[@src='images/image.png']")).click();
        driver.findElement(By.xpath("//*[@src=\"../images/home.png\"]")).click();
        driver.navigate().back();
        driver.findElement(By.xpath("//*[@src=\"../images/abcd.jpg\"]")).click();
    }
}
额外注意点
  • 修复完成后可以在LaunchBrowser方法末尾加一行日志System.out.println(driver),确认打印的不是null,就说明全局变量赋值成功了
  • 后续记得在@AfterTest注解的方法中调用driver.quit()释放浏览器资源,避免占用系统端口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 07:15:04