使用Selenium Page Factory时Page类调用WebDriver.getTitle()报空指针如何解决
问题根因
- 核心原因是
loginpage页面对象类中的WebDriver类型成员变量未完成初始化赋值,始终为null:- 当前使用的无参构造方法中,直接将未赋值的
driver变量传入PageFactory.initElements方法,此时传入的driver本身是空值 - 测试用例中创建
loginpage实例lp时,也没有将测试类中已经启动配置完成的WebDriver实例传递给页面对象,导致页面对象中调用driver.getTitle()时触发空指针异常
- 当前使用的无参构造方法中,直接将未赋值的
修复方案
- 修改页面对象构造方法,改为接收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(); } }
- 调整测试类中页面对象的实例化逻辑,将测试类中初始化完成的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
相关产品推荐
相关产品推荐

