news 2026/6/1 20:36:16

HoRain云--Playwright 项目结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HoRain云--Playwright 项目结构

🎬 HoRain 云小助手:个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

初始化的项目结构一览

playwright.config.ts —— 配置文件

实例

package.json —— 依赖与脚本

实例

实例

tests/ 目录 —— 测试文件

实例

tests-examples/ 目录 —— 更多示例

.github/workflows/ —— CI 配置

浏览器存放位置

node_modules/ —— 依赖包


成功初始化 Playwright 项目后,你的项目目录中会生成一系列文件和文件夹,本章详细解读每个部分的用途。


初始化的项目结构一览

运行npm init playwright@latest后,项目目录中会生成以下结构:

your-project/ ├── playwright.config.ts # Playwright 配置文件 ├── package.json # 项目依赖与脚本 ├── package-lock.json # 依赖锁定文件 ├── tests/ # 测试文件目录 │ └── example.spec.ts # 示例测试文件 ├── tests-examples/ # 更多示例测试(可选) │ └── demo-todo-app.spec.ts ├── .github/ # GitHub Actions 配置(可选) │ └── workflows/ │ └── playwright.yml └── node_modules/ # npm 依赖包

playwright.config.ts —— 配置文件

这是 Playwright 的核心配置文件,控制测试运行的所有方面。

实例

// 文件路径:playwright.config.ts
import { defineConfig, devices } from '@playwright/test';

export default defineConfig({
// 测试文件目录,相对于此配置文件的路径
testDir: './tests',

// 完全并行运行所有测试
fullyParallel: true,

// 如果源码中遗留了 test.only,在 CI 上则构建失败
forbidOnly: !!process.env.CI,

// CI 环境下失败后重试 2 次,本地不重试
retries: process.env.CI ? 2 : 0,

// CI 环境下使用单线程,本地使用默认多线程
workers: process.env.CI ? 1 : undefined,

// 使用 HTML 报告器
reporter: 'html',

// 所有测试共享的配置
use: {
// 基础 URL,测试中使用相对路径即可
baseURL: 'http://localhost:3000',

// 失败重试时收集 Trace
trace: 'on-first-retry',
},

// 多浏览器/多设备项目配置
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},
{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
},
{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
},
],

// 在测试开始前启动本地开发服务器(可选)
// webServer: {
// command: 'npm run start',
// url: 'http://localhost:3000',
// reuseExistingServer: !process.env.CI,
// },
});

playwright.config.ts 是控制 Playwright 行为的核心入口,第 15 篇会对每个配置项做详细说明。


package.json —— 依赖与脚本

初始化后,package.json中会新增 Playwright 相关的内容:

实例

{
"devDependencies": {
"@playwright/test": "^1.52.0" // Playwright Test 作为开发依赖
},
"scripts": {
"test": "playwright test" // 可直接运行 npm test
}
}

你也可以添加更多自定义脚本:

实例

{
"scripts": {
"test": "playwright test",
"test:ui": "playwright test --ui",
"test:headed": "playwright test --headed",
"test:chromium": "playwright test --project=chromium",
"test:debug": "playwright test --debug",
"codegen": "playwright codegen"
}
}


tests/ 目录 —— 测试文件

tests/目录是默认的测试文件存放位置(由testDir配置指定)。

初始化的示例测试文件内容如下:

实例

// 文件路径:tests/example.spec.ts
import { test, expect } from '@playwright/test';

test('has title', async ({ page }) => {
// 导航到 Playwright 官网
await page.goto('https://playwright.dev/');

// 断言页面标题包含 "Playwright"
await expect(page).toHaveTitle(/Playwright/);
});

test('get started link', async ({ page }) => {
// 导航到 Playwright 官网
await page.goto('https://playwright.dev/');

// 点击 "Get started" 链接
await page.getByRole('link', { name: 'Get started' }).click();

// 断言页面上出现了 "Installation" 标题
await expect(page.getByRole('heading', { name: 'Installation' })).toBeVisible();
});

测试文件命名建议:使用.spec.ts(TypeScript)或.spec.js(JavaScript)后缀。


tests-examples/ 目录 —— 更多示例

如果你在初始化时选择了包含示例测试,tests-examples/目录中会有一个更完整的测试示例:

demo-todo-app.spec.ts演示了真实 Todo 应用的完整测试场景,包括添加任务、完成状态切换、过滤功能等。

这是一个很好的学习参考,你可以运行来看看效果:

npx playwright test tests-examples/

.github/workflows/ —— CI 配置

如果你在初始化时选择了添加 GitHub Actions,.github/workflows/playwright.yml文件会被自动生成。

这个工作流会在每次推送代码或创建 PR 时自动运行 Playwright 测试。


浏览器存放位置

Playwright 安装的浏览器二进制文件不在项目目录中,而是存放在操作系统缓存目录:

操作系统浏览器存放路径
macOS
~/Library/Caches/ms-playwright/
Windows
%USERPROFILE%\AppData\Local\ms-playwright\
Linux
~/.cache/ms-playwright/

你也可以设置自定义存放路径:

# 设置浏览器安装路径 export PLAYWRIGHT_BROWSERS_PATH=/your/custom/path npx playwright install

node_modules/ —— 依赖包

Playwright 的核心依赖@playwright/test安装在node_modules/中。

依赖内部包含了 Playwright 的完整运行时,包括与浏览器通信的协议层。

除了通过 npm 安装的 Node.js 包外,Playwright 还依赖浏览器二进制文件(存放在系统缓存中),两者缺一不可。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/1 20:35:26

Airtest自动化:使用Airtest基于图像识别控制App。从图像识别到智能爬虫:Airtest自动化控制App的爬虫实战

在传统的爬虫开发中,我们往往习惯于直接分析网络请求、解析HTML或JSON数据。然而,随着移动互联网的迅猛发展,越来越多的应用采用了动态加载、数据加密、反爬机制等策略,使得传统爬虫方法频频受阻。在这样的背景下,一种全新的思路应运而生——利用计算机视觉技术,通过图像…

作者头像 李华
网站建设 2026/6/1 20:31:49

宋朝历代皇帝完整脉络全解析:南北两宋三百年繁华与悲歌

一、人物整体介绍宋朝(960年—1279年),上承五代十国、下启元朝,分为北宋、南宋两个阶段,共历十八帝,国祚三百一十九年,是中国历史上经济最繁荣、文化最鼎盛、科技最发达、民生最富庶的封建王朝。…

作者头像 李华
网站建设 2026/6/1 20:30:47

QSPI pSRAM嵌入式存储CSS1604LS高稳定国产PSRAM工作机制与规范

CSS1604LS同样为SPI/QPI接口架构的国产替代PSRAM芯片,主打高可靠性上电初始化与稳定运行能力,适配工业级常态化工作场景。芯片内置高精度片内电压传感器,可自主完成上电自初始化流程,无需额外外接控制电路。 QSPI pSRAM标准化上电…

作者头像 李华
网站建设 2026/6/1 20:28:58

终极Windows运行库修复工具:VisualCppRedist AIO完整指南

终极Windows运行库修复工具:VisualCppRedist AIO完整指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist Windows运行库修复是每个Windows用户都可能…

作者头像 李华
网站建设 2026/6/1 20:23:07

汽车底盘集成非线性鲁棒控制方法解析【附数据】

✨ 长期致力于车辆工程、底盘集成控制、快速终端滑模控制、混合卡尔曼滤波器、非线性L2增益控制、神经网络自适应控制、试验研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 &…

作者头像 李华