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

解决Playwright在Jenkins中“networkidle”事件无限循环问题

问题原因分析
  • 网络环境差异:Jenkins服务器与目标站点的网络链路可能存在延迟、丢包或带宽限制,导致部分请求长时间未完成,甚至触发重试逻辑,始终无法满足networkidle0(0个活跃网络连接)的条件。
  • 页面持续网络请求:目标页面可能存在WebSocket、Server-Sent Events(SSE)或定时轮询的API请求,这类长连接/周期性请求会持续占用网络连接,永远无法触发networkidle0事件。
  • 无头模式行为差异:无头浏览器模式下,部分页面的JavaScript逻辑可能触发与本地有头模式不同的网络请求(比如某些仅在无头环境下加载的统计脚本),或者资源加载策略、缓存机制存在差异,导致请求无法正常完成。
  • 请求阻塞/重试:部分请求可能因Jenkins环境的网络限制、证书问题(即使开启ignoreHTTPSErrors仍可能存在异常)卡住,不断重试却无法完成,导致网络连接一直处于活跃状态。
调试与解决方法

临时绕过networkidle限制

调整waitUntil参数,降低对网络空闲的要求,优先保证测试流程推进:

await page.goto('url', {
  // 允许最多2个活跃网络连接,比networkidle0更宽松
  waitUntil: 'networkidle2',
  timeout: 60000
});
// 或者直接等待DOM加载完成,不依赖网络状态
await page.goto('url', {
  waitUntil: 'domcontentloaded',
  timeout: 60000
});

捕获网络请求日志定位问题

在测试代码中添加网络请求监听,打印所有请求的URL和状态,找出卡住的请求:

// 监听所有请求
page.on('request', request => {
  console.log(`[REQUEST] ${request.method()} ${request.url()}`);
});
// 监听所有响应
page.on('response', response => {
  console.log(`[RESPONSE] ${response.status()} ${response.url()}`);
});
// 监听请求失败/中止事件
page.on('requestfailed', request => {
  console.log(`[REQUEST FAILED] ${request.url()} - ${request.failure().errorText}`);
});

// 原有goto逻辑
await page.goto('url', { waitUntil: 'networkidle0', timeout: 500000 });

将这些日志输出到Jenkins控制台,就能看到哪些请求一直未完成或反复失败,针对性处理。

拦截不必要的持续请求

如果日志显示是统计、广告或其他非核心业务的持续请求,可直接拦截这些请求:

// 拦截所有统计类请求
await page.route('**/*analytics*', route => route.abort());
// 拦截WebSocket连接
await page.route('wss://**/*', route => route.abort());

await page.goto('url', { waitUntil: 'networkidle0', timeout: 60000 });

等待目标元素而非网络状态

跳过网络空闲等待,直接等待测试需要操作的元素出现,确保业务流程能继续:

await page.goto('url', { waitUntil: 'domcontentloaded', timeout: 60000 });
// 等待用户名输入框出现后再执行填充操作
await page.getByPlaceholder('Username').waitFor({ timeout: 60000 });
await page.getByPlaceholder('Username').fill('user');

调整无头模式配置

禁用缓存或调整上下文参数,消除无头模式与本地环境的差异:

test.use({
  headless: true,
  ignoreHTTPSErrors: true,
  // 禁用缓存,避免环境差异导致的加载问题
  context: {
    cache: 'no-store',
    // 禁用本地存储状态
    storageState: null
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:23:11