You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium 4.5.0测试后无法关闭窗口:tearDown中driver为空问题求助

问题修复:tearDown中driver为空导致无法关闭浏览器

问题根源

在setup方法中,你重新声明了局部变量WebDriver driver,这会覆盖类的成员变量driver,导致类成员变量始终未被赋值(保持null)。当tearDown方法调用driver.quit()时,自然会触发空指针异常。

修复步骤

  1. 移除setup方法中driver变量的局部声明,直接为类成员变量赋值:
    将WebDriver driver = new ChromeDriver();改为driver = new ChromeDriver();
  2. (可选)为避免意外空指针,在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:01:16