You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu无GUI环境下运行Playwright测试出现Windows未触发的错误及卡顿问题

Playwright测试在无GUI Ubuntu无头环境下元素丢失/卡顿的排查指南

问题背景

我开发了一套Playwright测试用例,在Windows环境下不管是无头(headless)还是有头(headed)模式都能正常跑通。但放到无GUI的Ubuntu服务器上用无头模式运行时,却出现了部分元素找不到、测试卡顿的情况。我对Linux不太熟,想请教下该从哪些方向排查问题。

具体报错信息

locator.fill: Target closed
=========================== logs ===========================
waiting for selector "[placeholder="Subject*"]"

69 | await page
70 | .locator('[placeholder="Subject\*"]')

71 | .fill(${Title});
| ^

排查方向建议

  • 先补全系统依赖:无GUI的Ubuntu默认可能缺了Playwright浏览器运行必需的系统库,直接跑playwright install-deps就能自动安装所有依赖,这步很容易被忽略,但却是跨环境运行的基础。
  • 重新安装对应浏览器:有时候跨系统的浏览器安装包会有缓存或损坏问题,执行playwright install chromium(如果你用的是Chromium)重新安装一次,确保浏览器在Ubuntu环境下能正常启动。
  • 调整无头模式启动参数:Linux无头环境需要一些特殊参数来适配,比如加上这些启动参数能解决很多兼容性和性能问题:
    const browser = await playwright.chromium.launch({
      headless: true,
      args: [
        '--no-sandbox',
        '--disable-setuid-sandbox',
        '--disable-dev-shm-usage', // 解决Linux共享内存不足导致的卡顿
        '--disable-gpu' // 无GUI环境不需要GPU加速
      ]
    });
    
  • 优化等待逻辑:服务器的网络或页面渲染速度大概率比本地慢,别用默认的超时时间。可以给元素单独加等待,确保元素完全可见后再操作:
    // 先等元素可见,超时设为60秒
    await page.locator('[placeholder="Subject*"]').waitFor({ state: 'visible', timeout: 60000 });
    await page.locator('[placeholder="Subject*"]').fill(`${Title}`);
    
  • 开启详细日志排查:运行测试时加上DEBUG=pw:api环境变量,能看到Playwright的所有操作日志,比如页面加载进度、元素查找过程,方便判断是页面没加载还是元素渲染延迟。终端命令如下:
    DEBUG=pw:api npx playwright test
    
  • 检查服务器资源:无GUI服务器如果CPU、内存不够,浏览器根本跑不起来。用htoptop命令看看实时资源占用,要是CPU满负荷、内存不足,那肯定会导致页面加载卡顿甚至超时。

问题更新(已解决)

经过排查,测试用例本身没问题,根源在服务器性能上——服务器页面加载慢到离谱,单页要好几分钟才能加载完,直接导致测试超时终止。升级服务器配置后,问题就完全解决了。

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

火山引擎 最新活动