testNg运行Selenium代码报null pointer exception:this.driver为null求解
问题根因
这是典型的**Java变量遮蔽(Variable Shadowing)**引发的空指针问题,和Selenium、TestNG框架本身逻辑无关:
- 类中定义了全局成员变量
WebDriver driver,初始值默认为null - 在
@BeforeTest修饰的LaunchBrowser()方法中,写了WebDriver driver=new ChromeDriver()——前面带的WebDriver类型声明,代表这是一个全新的、只在LaunchBrowser方法内部生效的局部变量,和类的全局driver是完全两个独立的对象 - 浏览器启动流程实际操作的是这个局部的driver对象,类的全局
this.driver从头到尾没有被赋值,一直保持null状态 - 当
@Test修饰的Img()方法执行到driver.findElement()调用时,实际操作的是null的全局driver,就会抛出对应的空指针报错。
修复方法
只需要去掉LaunchBrowser()方法内创建ChromeDriver对象时的局部变量类型声明,直接给全局的driver成员变量赋值即可:
public class ImgDDChkbxRadio { WebDriver driver; @BeforeTest public void LaunchBrowser() { System.setProperty("webdriver.chrome.driver","F:\\chromedriver_win32\\chromedriver.exe"); // 移除前面的WebDriver类型声明,直接给全局driver赋值 driver = new ChromeDriver(); driver.manage().window().maximize(); driver.get("http://www.leafground.com/"); } @Test public void Img() { driver.findElement(By.xpath("//img[@src='images/image.png']")).click(); driver.findElement(By.xpath("//*[@src=\"../images/home.png\"]")).click(); driver.navigate().back(); driver.findElement(By.xpath("//*[@src=\"../images/abcd.jpg\"]")).click(); } }
额外注意点
- 修复完成后可以在
LaunchBrowser方法末尾加一行日志System.out.println(driver),确认打印的不是null,就说明全局变量赋值成功了 - 后续记得在
@AfterTest注解的方法中调用driver.quit()释放浏览器资源,避免占用系统端口
内容的提问来源于stack exchange,提问作者Megaya
相关产品推荐
相关产品推荐

