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

使用Selenium Page Factory时Page类调用WebDriver.getTitle()报空指针如何解决

问题根因
  • 核心原因是loginpage页面对象类中的WebDriver类型成员变量未完成初始化赋值,始终为null:
    • 当前使用的无参构造方法中,直接将未赋值的driver变量传入PageFactory.initElements方法,此时传入的driver本身是空值
    • 测试用例中创建loginpage实例lp时,也没有将测试类中已经启动配置完成的WebDriver实例传递给页面对象,导致页面对象中调用driver.getTitle()时触发空指针异常
修复方案
  1. 修改页面对象构造方法,改为接收WebDriver参数的有参构造,先给成员变量赋值再初始化PageFactory:
public class loginpage {
    // 定义WebDriver成员变量
    private WebDriver driver;

    // 替换原有无参构造为有参构造
    public loginpage(WebDriver driver) {
        // 将外部传入的已初始化driver赋值给当前类的成员变量
        this.driver = driver;
        // 再调用PageFactory初始化页面元素
        PageFactory.initElements(driver, this);
    }

    // 原有GetTitle方法保留即可
    public String GetTitle() {
        System.out.println("title111");
        return driver.getTitle();
    }
}
  1. 调整测试类中页面对象的实例化逻辑,将测试类中初始化完成的WebDriver传入页面对象构造方法:
public class LoginTest {
    private WebDriver driver;
    private loginpage lp;

    // 测试前置方法:初始化驱动、打开页面、创建页面对象
    @BeforeTest
    public void beforeTest() {
        // 替换为对应浏览器的驱动初始化逻辑
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        // 打开目标测试页面
        driver.get("你的测试站点地址");
        // 实例化页面对象时传入已完成初始化的driver
        lp = new loginpage(driver);
    }

    @Test
    public void title() {
        String a = lp.GetTitle();
        System.out.println(a);
    }

    // 测试后置方法:关闭驱动释放资源
    @AfterTest
    public void afterTest() {
        if (driver != null) {
            driver.quit();
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:06:04