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

TestNG代码报错:driver为null,无法调用WebDriver.findElement

问题原因分析

你遇到的空指针错误,核心原因是**InvoiceCreationSanity类中的driver变量从未被初始化,始终为null**,当你调用createinvoicepom.createinvoice(driver)时,传入的是null值,导致driver.findElement()方法无法执行。

具体来说:

  • TestNG_Demo类中确实初始化了自己的静态driver变量,但这个变量属于TestNG_Demo类本身,和InvoiceCreationSanity中定义的driver是完全独立的两个变量,后者并没有获取到前者初始化后的实例。
  • 你直接实例化TestNG_Demo并调用其方法时,只是执行了方法逻辑,但没有将初始化好的driver传递到InvoiceCreationSanity中。
修复方案

方案一:直接引用TestNG_Demo的静态driver

因为TestNG_Demo的driver是public static修饰的,可以直接在InvoiceCreationSanity中使用这个已初始化的实例:

修改InvoiceCreationSanity的代码:

package pages;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import org.openqa.selenium.By;
import io.github.bonigarcia.wdm.WebDriverManager;
import pages.createinvoicepom;

public class InvoiceCreationSanity {
    
    @BeforeTest
    public void SetUp() throws InterruptedException {
        TestNG_Demo Setupobject = new TestNG_Demo();
        Setupobject.SetUp();
        Setupobject.signin();
    }
    
    @Test
    public void invoicecreation()  {
        // 直接传入TestNG_Demo中已初始化的静态driver
        createinvoicepom.createinvoice(TestNG_Demo.driver).click();
    }
    
    public void result() {
        System.out.println("Test Completed Successfully");
    }
}

方案二:重构代码,传递driver实例(推荐)

静态driver会导致线程安全问题,更规范的做法是将TestNG_Demo的driver改为实例变量,并提供获取方法:

  1. 修改TestNG_Demo类:
package pages;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import pages.dashloginpagepom;
import pages.createinvoicepom;

import io.github.bonigarcia.wdm.WebDriverManager;

public class TestNG_Demo {
    
    private WebDriver driver;

    public void SetUp() {
        System.setProperty("webdriver.http.factory", "jdk-http-client");
        WebDriverManager.chromedriver().setup();
        driver = new ChromeDriver();
        driver.manage().window().maximize();
    }
    
    // 添加获取driver的方法
    public WebDriver getDriver() {
        return driver;
    }
    
    public void signin() throws InterruptedException {
        driver.get("https://zolvitdash.vakilsearch.com/login");
        dashloginpagepom.Phone_number(driver).sendKeys("8825892445");
        dashloginpagepom.continue_button(driver).click();
        Thread.sleep(6000);
        dashloginpagepom.otpone(driver).sendKeys("0");
        dashloginpagepom.otptwo(driver).sendKeys("0");
        dashloginpagepom.otpthree(driver).sendKeys("0");
        dashloginpagepom.otpfour(driver).sendKeys("0");
        dashloginpagepom.cont(driver).click();
        Thread.sleep(6000);
    }
    
    public void result() {
        driver.close();
        System.out.println("Test Completed Successfully");
    }
}
  1. 修改InvoiceCreationSanity类:
package pages;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import pages.createinvoicepom;

public class InvoiceCreationSanity {
    private WebDriver driver;
    
    @BeforeTest
    public void SetUp() throws InterruptedException {
        TestNG_Demo Setupobject = new TestNG_Demo();
        Setupobject.SetUp();
        Setupobject.signin();
        // 获取TestNG_Demo中初始化好的driver实例
        driver = Setupobject.getDriver();
    }
    
    @Test
    public void invoicecreation()  {
        createinvoicepom.createinvoice(driver).click();
    }
    
    public void result() {
        System.out.println("Test Completed Successfully");
    }
}
额外优化建议
  • createinvoicepom中的静态element变量存在线程安全风险,建议改为方法内局部变量:
public static WebElement createinvoice(WebDriver driver){
    WebElement element = driver.findElement(By.xpath("//span[@class='styles_btnContent__7MVVu']"));
    return element;
}
  • 避免使用Thread.sleep(),改用WebDriverWait实现显式等待,提升测试稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:35:04