
在 selenium 自动化测试中,为每个测试用例单独启动和关闭浏览器虽能保证环境隔离,但显著降低执行效率;更优策略是复用浏览器会话,并通过清理 cookies、缓存等状态确保测试独立性。
在实际测试开发中,是否在每个 @Test 方法前后重启浏览器(即调用 driver.quit() + 新建 WebDriver 实例),是一个影响稳定性、可维护性与执行速度的关键设计决策。
✅ 推荐做法:复用单个浏览器实例,配合精准状态重置
而非频繁启停。原因如下:
- 性能优势明显:启动 Chrome/Firefox 实例通常耗时 1–3 秒,若一个测试类含 20 个用例,重复启动将额外增加 20–60 秒,严重拖慢 CI/CD 流程;
- 资源开销更低:避免反复创建/销毁进程与内存对象,减少系统负载;
- 可控性更强:通过 driver.manage().deleteAllCookies()、driver.navigate().refresh() 或 driver.get("about:blank") 等方式,可精确清除登录态、本地存储(localStorage/sessionStorage)等干扰项,比“杀进程”更轻量、更可靠。
? 关键操作示例(Java + Selenium):
@BeforeMethod
public void setUp() {
if (driver == null) {
driver = new ChromeDriver(); // 首次初始化
driver.manage().window().maximize();
} else {
// 复用 driver,仅重置状态
driver.manage().deleteAllCookies(); // 清除所有 cookies
driver.navigate().to("about:blank"); // 重置页面上下文
driver.executeScript("window.sessionStorage.clear();");
driver.executeScript("window.localStorage.clear();");
}
}
@AfterMethod
public void tearDown() {
// 不关闭 driver,仅确保页面回到干净起点
// driver.quit(); // ❌ 不在此处调用
}⚠️ 何时才需真正重启浏览器?
仅在以下场景建议强制重启:
- 测试涉及全局浏览器配置变更(如代理、证书、扩展安装);
- 某个用例导致 WebDriver 状态异常(如 UnreachableBrowserException)且无法恢复;
- 跨域/多账号并行登录验证(如需同时保持 admin 和 user 两个独立会话)——此时应使用不同 WebDriver 实例,而非共享。
? 补充建议:
- 使用 TestNG 的 @BeforeClass / @AfterClass 管理浏览器生命周期(启动于类前,退出于类后);
- 对于高度敏感的登录/支付类测试,可在关键用例前后插入 driver.navigate().to("https://example.com/logout") + 显式等待登出完成,再清理 cookies;
- 始终结合显式等待(WebDriverWait)替代 Thread.sleep(),提升稳定性和响应速度。
总之,“复用 + 清理”优于“重建 + 重启” —— 这是在可靠性、效率与可维护性之间达成平衡的 Selenium 测试工程化核心实践。










