Selenium Java调用getTitle()出现Null Pointer Exception问题排查
空指针异常原因分析
问题出在Login类中成员变量的初始化顺序:
Java中,类的成员变量会在构造函数执行之前完成初始化。你的Login类里:
WebDriver driver ;作为成员变量,默认初始值为nullString 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
相关产品推荐
相关产品推荐

