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

VS2022调试Playwright MS Test 2测试触发Connection closed异常如何解决

Playwright + MSTest 调试时断点触发Connection Closed错误解决方案

错误根因

该错误仅在断点暂停程序时触发,本质是Playwright默认使用标准输入输出(StdIO)流和浏览器驱动通信,断点导致程序暂停时,StdIO的异步写操作被挂起超过底层阈值,触发线程中止异常,最终强制断开Playwright与浏览器的通信连接,正常运行无暂停场景时不会触发该问题。

可行解决方案

  • 优先尝试:切换Playwright通信传输方式为WebSocket,彻底规避StdIO流在调试暂停时的超时异常,修改Playwright初始化代码即可:
// 原有初始化逻辑
// var playwright = await Playwright.CreateAsync();
// 替换为以下代码,显式关闭StdIO传输
var playwright = await Playwright.CreateAsync(new PlaywrightCreateOptions
{
    StdioTransport = false
});
  • 动态调整Playwright异步操作超时:当前代码中WaitForFunctionAsync设置了5秒超时,若断点停留时间超过该阈值也会触发连接断开,可通过调试状态判断动态修改超时:
// 调试模式下超时设为0代表无限等待,非调试模式保留原有5秒配置
var actionTimeout = System.Diagnostics.Debugger.IsAttached ? 0 : 5000;
var jshandle = await Page.WaitForFunctionAsync(script,
    null, 
    new() { Timeout = actionTimeout, PollingInterval = 300 });

该修改同样适用于QuerySelectorAsync等其他Playwright异步API。

  • 适配Visual Studio与MSTest调试配置:
    1. 打开VS 2022 菜单栏「工具」->「选项」->「调试」->「常规」,勾选「调试时禁用异步操作超时」
    2. 给测试类/测试方法添加特性,关闭调试场景下的测试超时限制:
[TestClass]
[Timeout(Microsoft.VisualStudio.TestTools.UnitTesting.TestTimeout.Infinite)]
public class MyUITest
{
    // 测试方法实现
}

如果项目使用.runsettings配置文件,也可以在配置中全局设置调试超时时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:45:03