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、内存不够,浏览器根本跑不起来。用
htop或top命令看看实时资源占用,要是CPU满负荷、内存不足,那肯定会导致页面加载卡顿甚至超时。
问题更新(已解决)
经过排查,测试用例本身没问题,根源在服务器性能上——服务器页面加载慢到离谱,单页要好几分钟才能加载完,直接导致测试超时终止。升级服务器配置后,问题就完全解决了。
内容的提问来源于stack exchange,提问作者Dries




