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

Selenium Java调用getTitle()出现Null Pointer Exception问题排查

空指针异常原因分析

问题出在Login类中成员变量的初始化顺序:

Java中,类的成员变量会在构造函数执行之前完成初始化。你的Login类里:

  1. WebDriver driver ; 作为成员变量,默认初始值为null
  2. String titleText = driver.getTitle(); 这行代码在构造函数执行前就会运行,此时driver还未被构造函数中的this.driver=driver;赋值,依然是null,调用driver.getTitle()自然会抛出空指针异常。

而你移除titleText相关代码后,构造函数正常给driver赋值,后续的setUserName等方法就能正常使用driver,所以测试可以正常运行。

修正方案

把获取页面标题的逻辑放到driver赋值完成后执行,两种可行方式:

方案1:在构造函数中初始化titleText

public class Login {
    WebDriver driver ;
    By userNameTextBox = By.name("email");
    By passwordTestBox = By.id("password");
    By loginButton = By.id("signInButton");
    String titleText;

    public Login(WebDriver driver) {
        this.driver=driver;
        // 此时driver已完成赋值,可安全调用getTitle()
        titleText = driver.getTitle();
    }

    // 其他方法保持不变
}

方案2:封装成getTitle方法,在需要时调用

public class Login {
    WebDriver driver ;
    By userNameTextBox = By.name("email");
    By passwordTestBox = By.id("password");
    By loginButton = By.id("signInButton");

    public Login(WebDriver driver) {
        this.driver=driver;
    }

    // 添加获取标题的方法
    public String getTitle() {
        return driver.getTitle();
    }

    // 其他方法保持不变
}

对应测试类中调用方式:

@Test
public void Test() {
    objLogin = new Login(driver);
    String title = objLogin.getTitle();
    System.out.println(title);
    // Assert.assertTrue(title.toLowerCase().contains(" "));
    objLogin.setUserName();
    objLogin.setPassword();
    objLogin.clickLogin();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:20:17