Playwright 测试中如何禁用 JavaScript

Playwright 禁用 JavaScript:在 test.use({ javaScriptEnabled: false }) 中关闭(对当前 describe 生效),或在 playwright.config.ts 的 use 里全局设置。用于验证无 JS 环境下的可访问性与渐进增强基线。

最佳实践
Node.js 事件循环与异步任务示意

在测试里用 test.use({ javaScriptEnabled: false }) 即可禁用 JavaScript——作用于当前 describe 块;想全局生效就在 playwright.config.ts 的 use 配置里加同一选项。禁用 JS 能暴露页面在无脚本环境下的真实表现:屏幕阅读器用户、严格安全策略浏览器、弱网脚本加载失败时的降级体验,都依赖这份基线。

单个测试组禁用

import { test, expect } from '@playwright/test';

test.describe('禁用 JavaScript', () => {
  test.use({ javaScriptEnabled: false });

  test('页面在无 JS 下仍可访问核心内容', async ({ page }) => {
    await page.goto('https://example.com');
    await expect(page.locator('h1')).toBeVisible();
  });
});

全局禁用

// playwright.config.ts
export default defineConfig({
  use: { javaScriptEnabled: false },
});

更实用的做法是定义一个专门的 project,同一套代码跑"有 JS / 无 JS"两组对照:

projects: [
  { name: 'js-on' },
  { name: 'js-off', use: { javaScriptEnabled: false } },
]

测试什么

  • 核心内容是否服务端渲染可见(标题、正文、导航);
  • 表单能否以原生提交方式工作;
  • 关键链接是否为真实 <a href> 而不是 JS 跳转;
  • 无 JS 时是否有合理的提示或降级样式。

常见问题(FAQ)

Q:禁用 JS 后 page.click 等操作还能用吗?

Playwright 自身的操作不受影响(它在浏览器协议层工作,不依赖页面 JS),但页面上依赖 JS 的交互当然全部失效——这正是要测试的状态。

Q:能模拟 JS 加载失败而非完全禁用吗?

可以用路由拦截:page.route('**/*.js', route => route.abort()),只阻断脚本请求,更接近"弱网脚本超时"的场景。

Q:这个选项对 SPA 意味着什么?

纯客户端渲染的 SPA 禁用 JS 后基本是空白页。如果测试暴露出这种情况,考虑引入 SSR/SSG 或至少提供 noscript 提示。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台