正确做法是用npx playwright test启动测试,因其依赖playwright测试运行器管理浏览器、钩子和报告;直接node test.js会因缺失上下文而报错或静默失败。

直接用 npx playwright test 启动测试,别写 node test.js
Playwright 不是普通 Node.js 脚本,它依赖自己的测试运行器(playwright-test)来管理浏览器实例、生命周期钩子和报告生成。如果你把测试逻辑写在 test.js 里,然后执行 node test.js,会报错或静默失败——因为没加载 Playwright 的上下文环境,test 函数根本没被注册,expect 断言也未初始化。
正确做法是让 Playwright CLI 接管执行流程:
- 确保项目已通过
npm init playwright@latest初始化(会自动创建playwright.config.ts和tests/目录) - 测试文件必须放在
tests/下,且以.spec.ts或.spec.js结尾 - 运行命令始终用
npx playwright test,不是node直接调用 - 想只跑某个文件?加参数:
npx playwright test tests/login.spec.ts
VSCode 里点“运行”按钮前,先检查 launch.json 类型是不是 node
VSCode 的调试器默认按 Node.js 模式启动,但 Playwright 测试不能走这个路径——它需要的是 Playwright Test 运行器,不是原始 Node 进程。如果你在调试面板里点 ▶️ 并看到 launch 配置里 "type": "node",那八成会卡在 Cannot find module 'playwright' 或直接退出。
真正能调试 Playwright 测试的方式只有两种:
- 用官方插件 Playwright Test for VSCode:安装后,测试文件顶部会出现绿色 ▶️ 图标,点击即可带断点运行
- 手动配置
launch.json类型为playwright(需插件支持),内容类似:{ "version": "0.2.0", "configurations": [ { "type": "playwright", "request": "launch", "name": "Playwright", "project": "chromium", "env": { "DEBUG": "pw:api" } } ] } - 别碰
"type": "node"+program指向 spec 文件的组合,那不是 Playwright 的使用方式
page.goto() 超时却没报错?检查 playwright.config.ts 的 timeout 和 baseURL
常见现象:脚本执行到 await page.goto('https://example.com') 就停住 30 秒,然后跳过后续断言,测试显示 “passed”,但实际没做任何验证。这不是代码问题,而是配置陷阱。
原因通常是:
-
playwright.config.ts里设置了timeout: 30000(默认值),但页面因网络或重定向卡住,Playwright 等满 30 秒后继续执行下一行,而不是抛异常中断 -
baseURL配错了(比如写成http://localhost:3000但服务根本没起来),goto('/login')实际请求的是http://localhost:3000/login,而你本地没服务,就一直挂起 - 没启用
headless: false,看不到浏览器是否真的打开了页面
建议调试时临时加这两项:
use: {
headless: false,
viewport: { width: 1280, height: 720 },
// 关键:缩短超时,让失败更快暴露
timeout: 5000,
},
再配合 DEBUG=pw:api npx playwright test 查看底层请求日志。
为什么 npm run test 在终端能跑,VSCode 里点运行却提示找不到命令
这通常不是 Playwright 本身的问题,而是 VSCode 终端环境变量没加载完整。特别是当你用 nvm 切换 Node 版本,或全局安装了某些 CLI 工具时,VSCode 启动的集成终端可能没 source 到 shell 配置文件(如 ~/.zshrc)。
验证方法:在 VSCode 内置终端里执行 which npx 和 node -v,对比系统终端输出。如果不一致,说明环境隔离了。
解决路径很直接:
- 重启 VSCode(它会在启动时重新读取 shell 环境)
- 或者,在 VSCode 设置里搜
terminal integrated env,勾选Terminal > Integrated: Inherit Env - 避免在
package.json里写死"test": "npx playwright test"—— 改成"test": "playwright test",前提是已全局安装 Playwright CLI(npm install -g playwright)
最稳的方案其实是不用 npm script,直接用 Playwright 插件图标运行,绕过 shell 环境依赖。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











