Selenium使用Base类driver及向Page类传参时出现空指针异常求解
场景1:继承Base类调用driver触发空指针
触发原因
Base类中的driver成员默认值为null,你在Test类的main方法中直接调用driver.get()等方法前,没有执行Base类中用于初始化driver的browser()方法,driver未被赋值为ChromeDriver实例就被调用,因此抛出空指针异常。
修复方案
在操作driver前先调用browser()方法完成初始化,修改后Test类代码如下:
public class FacebookTestCase extends Base{ public static void main(String[] args ) { // 先执行父类的浏览器初始化逻辑,给driver赋值 new FacebookTestCase().browser(); // 注意url需要加http/https协议头,否则也会触发报错 driver.get("https://www.facebook.com"); driver.findElement(By.id("email")).sendKeys("tetst@test.in"); driver.findElement(By.id("pass")).sendKeys("test"); driver.findElement(By.name("login")).click(); } }
场景2:页面对象分层调用触发空指针
触发原因
你在Test类中调用的driverInitialization()方法没有正确给Base类的静态driver赋值:要么是该方法内部逻辑异常导致初始化中断,要么是方法名写错(场景1中Base类的初始化方法名为browser(),此处调用的是不存在的driverInitialization(),driver自然还是null)。空的driver实例被传入Page类构造方法后,调用driver.findElement()就会触发空指针。
修复方案
- 先确认Base类中的driver初始化方法存在且逻辑正确,能够给静态
driver赋值为正常的ChromeDriver实例 - 可增加非空校验提前发现初始化问题,修改后Test类代码如下:
public class FacebookTestCase extends Base{ public static void main(String[] args ) { // 调用正确的driver初始化方法 new FacebookTestCase().browser(); // 非空校验提前拦截问题 if (driver == null) { throw new RuntimeException("浏览器驱动初始化失败,请检查初始化逻辑"); } FacebookElements fb = new FacebookElements(driver); fb.login(); } }
内容的提问来源于stack exchange,提问作者Shanjay Nithin
相关产品推荐
相关产品推荐

