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

Selenium Java空指针异常求助:loginPage对象未初始化

解决Selenium Java登录脚本的NullPointerException问题

问题根源

你碰到的java.lang.NullPointerException,本质是loginPage变量只做了声明(public LoginPage loginPage;),但没有创建实际的实例对象,调用setUsername方法时自然会因为引用了null对象报错。

解决方案

核心是在测试类里给loginPage完成初始化,结合测试框架(TestNG/JUnit)的前置方法来做,同时保证LoginPage类有合适的构造方法接收WebDriver实例(毕竟Selenium所有操作都依赖WebDriver)。

1. 完善LoginPage类的构造方法

修改你的LoginPage.java,添加带WebDriver参数的构造方法,同时用PageFactory初始化页面元素:

package pages;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

public class LoginPage {
    private WebDriver driver;

    // 示例:用@FindBy定位页面元素,替换成你实际的定位符
    @FindBy(id = "username")
    private WebElement usernameInput;

    @FindBy(id = "password")
    private WebElement passwordInput;

    // 构造方法:接收WebDriver实例,初始化页面元素
    public LoginPage(WebDriver driver) {
        this.driver = driver;
        PageFactory.initElements(driver, this);
    }

    // 你的setUsername方法
    public void setUsername(String username) {
        usernameInput.sendKeys(username);
    }

    // 可以补充其他登录相关方法
    public void setPassword(String password) {
        passwordInput.sendKeys(password);
    }
}

2. 在LoginTest中初始化loginPage

在测试类的前置方法(比如TestNG的@BeforeMethod)里,先创建WebDriver实例,再初始化LoginPage:

package tests;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import pages.LoginPage;

public class LoginTest {
    private WebDriver driver;
    private LoginPage loginPage; // 声明变量

    @BeforeMethod
    public void setUp() {
        // 初始化WebDriver,确保ChromeDriver配置正确
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.get("你的登录页面URL");

        // 关键:创建LoginPage实例,把driver传进去
        loginPage = new LoginPage(driver);
    }

    @Test
    public void testLogin() {
        // 现在调用loginPage的方法就不会报空指针了
        loginPage.setUsername("你的测试账号");
        loginPage.setPassword("你的测试密码");
        // 后续登录操作和断言逻辑
    }

    @AfterMethod
    public void tearDown() {
        if (driver != null) {
            driver.quit();
        }
    }
}

重点提醒

  • 只写LoginPage loginPage;只是声明了变量,没有分配内存空间,必须用new LoginPage(driver)创建实例才行。
  • 遵循Page Object Model(POM)规范,页面类通过构造方法接收WebDriver是标准做法,这样能保证页面操作和驱动实例绑定。
  • 用PageFactory.initElements可以自动初始化@FindBy注解的元素,不用手动写driver.findElement,代码更简洁。

内容的提问来源于stack exchange,提问作者Ilham Nuswantoro Aji

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:13:20