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

测试套件执行后窗口保持及全程复用浏览器会话的实现方法

测试套件浏览器会话管理方案

1. 测试套件执行完成后保持浏览器窗口打开

核心是避免在测试用例/方法级别调用driver.quit(),通过可控逻辑决定是否关闭浏览器:

  • 调试场景:直接注释代码中所有driver.quit()语句,测试结束后浏览器会自然保留。
  • 生产/可控场景:通过系统参数开关控制,示例代码:
@AfterSuite
public void tearDownSuite() {
    String keepOpen = System.getProperty("keepBrowserOpen", "false");
    if (!"true".equals(keepOpen)) {
        driver.quit();
    }
}

运行测试时添加参数:-DkeepBrowserOpen=true,即可让测试完成后保持窗口打开。

2. 复用浏览器会话+测试失败重定向

复用浏览器会话

核心是在套件级别初始化浏览器,而非测试用例级别,两种实现方式:

方案1:TestNG注解直接实现

public class BaseTest {
    protected static WebDriver driver;

    @BeforeSuite
    public void initBrowser() {
        // 仅在套件开始时初始化一次浏览器
        driver = new ChromeDriver();
        driver.manage().window().maximize();
    }

    @AfterSuite
    public void closeBrowser() {
        // 整个套件执行完毕后才关闭浏览器
        if (driver != null) {
            driver.quit();
        }
    }
}

所有测试用例继承该基类,即可共用同一个浏览器会话,不会在每个用例结束后关闭窗口。

方案2:测试监听器实现(更灵活的生命周期控制)

实现ISuiteListener监听套件生命周期:

public class SuiteBrowserListener implements ISuiteListener {
    private static WebDriver driver;

    @Override
    public void onStart(ISuite suite) {
        // 套件启动时初始化浏览器
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        // 将driver存入套件上下文,供测试用例调用
        suite.setAttribute("driver", driver);
    }

    @Override
    public void onFinish(ISuite suite) {
        // 套件结束时关闭浏览器
        if (driver != null) {
            driver.quit();
        }
    }
}

在testng.xml中配置监听器:

<suite name="TestSuite">
    <listeners>
        <listener class-name="com.yourpackage.SuiteBrowserListener"/>
    </listeners>
    <!-- 测试用例/类配置 -->
</suite>

测试用例中获取driver:

WebDriver driver = (WebDriver) Reporter.getCurrentTestResult().getTestContext().getSuite().getAttribute("driver");

测试失败时重定向到指定位置

实现ITestListener监听测试失败事件,执行跳转逻辑:

public class FailureRedirectListener implements ITestListener {
    @Override
    public void onTestFailure(ITestResult result) {
        WebDriver driver = (WebDriver) result.getTestContext().getSuite().getAttribute("driver");
        if (driver != null) {
            // 重定向到目标页面,比如首页或错误处理页
            driver.navigate().to("https://your-target-page.com");
            // 可选:保存失败状态截图
            File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
            // 后续截图存储逻辑...
        }
    }
}

同样在testng.xml中添加该监听器即可生效。

注意事项

  • 若启用并行测试,需为每个线程分配独立的driver实例,避免会话冲突。
  • 确保driver实例为静态或存入套件上下文,防止重复初始化。
  • 调试时保留浏览器窗口后,需手动关闭以避免资源泄漏。

内容的提问来源于stack exchange,提问作者qatester

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:12:23