Selenium 4.5.0测试后无法关闭窗口:tearDown中driver为空问题求助
问题修复:tearDown中driver为空导致无法关闭浏览器
问题根源
在setup方法中,你重新声明了局部变量WebDriver driver,这会覆盖类的成员变量driver,导致类成员变量始终未被赋值(保持null)。当tearDown方法调用driver.quit()时,自然会触发空指针异常。
修复步骤
- 移除
setup方法中driver变量的局部声明,直接为类成员变量赋值:
将WebDriver driver = new ChromeDriver();改为driver = new ChromeDriver(); - (可选)为避免意外空指针,在
tearDown中增加null判断
修复后的完整代码
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.PageFactory; import test.config.TestSettings; import test.pages.BasePage; import test.pages.LoginPage; import java.time.Duration; public class LoginPageTest { WebDriver driver; LoginPage loginPage; BasePage basePage; @BeforeEach public void setup(){ System.setProperty("webdriver.chrome.driver","src/main/resources/chromedriver"); // 去掉局部变量声明,直接给类成员变量赋值 driver = new ChromeDriver(); loginPage = PageFactory.initElements(driver, LoginPage.class); basePage = PageFactory.initElements(driver, BasePage.class); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(20)); driver.manage().window().maximize(); driver.get("mysite"); } @Test public void emptyPassword(){ loginPage.setUsername("myaccountn"); loginPage.clickSave(); basePage.checkSite(); } @AfterEach public void tearDown(){ // 增加null判断,避免空指针 if(driver != null){ driver.quit(); } } }
额外优化建议
- 如果你升级到Selenium 4.6.0及以上版本,可以移除
System.setProperty("webdriver.chrome.driver",...)这行代码,因为Selenium会自动管理驱动(通过Selenium Manager)。
内容的提问来源于stack exchange,提问作者Tom1416
相关产品推荐
相关产品推荐

