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调试配置:
- 打开VS 2022 菜单栏「工具」->「选项」->「调试」->「常规」,勾选「调试时禁用异步操作超时」
- 给测试类/测试方法添加特性,关闭调试场景下的测试超时限制:
[TestClass] [Timeout(Microsoft.VisualStudio.TestTools.UnitTesting.TestTimeout.Infinite)] public class MyUITest { // 测试方法实现 }
如果项目使用.runsettings配置文件,也可以在配置中全局设置调试超时时间。
内容的提问来源于stack exchange,提问作者Liero
相关产品推荐
相关产品推荐

