Estructura del proyecto Playwright
Después de inicializar correctamente un proyecto de Playwright, se generarán una serie de archivos y carpetas en el directorio de tu proyecto. Este capítulo explica en detalle el propósito de cada parte.
Resumen de la estructura del proyecto inicializado
Ejecutarnpm init playwright@latestDespués, se generará la siguiente estructura en el directorio del proyecto:
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 — Archivo de configuración
Este es el archivo de configuración principal de Playwright, que controla todos los aspectos de la ejecución de las pruebas.
Ejemplo
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
// Directorio de archivos de prueba, ruta relativa a este archivo de configuración
testDir: './tests',
// Ejecutar todas las pruebas completamente en paralelo
fullyParallel: true,
// Si queda test.only en el código fuente, la compilación fallará en CI
forbidOnly: !!process.env.CI,
// Reintentar 2 veces tras un fallo en el entorno CI, sin reintentos en local
retries: process.env.CI ? 2 : 0,
// Usar un solo hilo en CI, usar el multihilo predeterminado en local
workers: process.env.CI ? 1 : undefined,
// Usar el reportero HTML
reporter: 'html',
// Configuración compartida por todas las pruebas
use: {
// URL base, basta con usar rutas relativas en las pruebas
baseURL: 'http://localhost:3000',
// Recopilar Trace al reintentar tras un fallo
trace: 'on-first-retry',
},
// Configuración del proyecto para múltiples navegadores/dispositivos
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},
{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
},
{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
},
],
// Iniciar el servidor de desarrollo local antes de que comiencen las pruebas (opcional)
// webServer: {
// command: 'npm run start',
// url: 'http://localhost:3000',
// reuseExistingServer: !process.env.CI,
// },
});
playwright.config.tsEs la entrada principal que controla el comportamiento de Playwright; el capítulo 15 explicará en detalle cada elemento de configuración.
package.json — Dependencias y scripts
Después de la inicialización,package.jsonse añadirá contenido relacionado con Playwright:
Ejemplo
"devDependencies": {
"@playwright/test": "^1.52.0" // Playwright Test como dependencia de desarrollo
},
"scripts": {
"test": "playwright test" // Se puede ejecutar directamente con npm test
}
}
También puedes añadir más scripts personalizados:
Ejemplo
"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"
}
}
Directorio tests/ — Archivos de prueba
tests/El directorio es la ubicación predeterminada para los archivos de prueba (especificada por latestDirconfiguración).
El contenido del archivo de prueba de ejemplo inicializado es el siguiente:
Ejemplo
import { test, expect } from '@playwright/test';
test('has title', async ({ page }) => {
// Navegar al sitio web oficial de Playwright
await page.goto('https://playwright.dev/');
// Verificar que el título de la página contiene "Playwright"
await expect(page).toHaveTitle(/Playwright/);
});
test('get started link', async ({ page }) => {
// Navegar al sitio web oficial de Playwright
await page.goto('https://playwright.dev/');
// Hacer clic en el enlace "Get started"
await page.getByRole('link', { name: 'Get started' }).click();
// Verificar que el título "Installation" aparece en la página
await expect(page.getByRole('heading', { name: 'Installation' })).toBeVisible();
});
Sugerencia para nombrar archivos de prueba: use el sufijo.spec.ts(TypeScript) o.spec.js(JavaScript).
Directorio tests-examples/ — Más ejemplos
Si elegiste incluir pruebas de ejemplo durante la inicialización,tests-examples/el directorio contendrá un ejemplo de prueba más completo:
demo-todo-app.spec.tsDemuestra un escenario de prueba completo de una aplicación Todo real, que incluye agregar tareas, cambiar el estado de completado, funciones de filtrado, etc.
Es una excelente referencia de aprendizaje; puedes ejecutarlo para ver el resultado:
npx playwright test tests-examples/
.github/workflows/ — Configuración de CI
Si elegiste agregar GitHub Actions durante la inicialización,.github/workflows/playwright.ymlel archivo se generará automáticamente.
Este flujo de trabajo ejecutará automáticamente las pruebas de Playwright cada vez que se haga push del código o se cree un PR.
Ubicación de almacenamiento del navegador
Los archivos binarios del navegador instalados por Playwright no están en el directorio del proyecto, sino en el directorio de caché del sistema operativo:
| Sistema operativo | Ruta de almacenamiento del navegador |
|---|---|
| macOS | ~/Library/Caches/ms-playwright/ |
| Windows | %USERPROFILE%\AppData\Local\ms-playwright\ |
| Linux | ~/.cache/ms-playwright/ |
También puedes establecer una ruta de almacenamiento personalizada:
# 设置浏览器安装路径 export PLAYWRIGHT_BROWSERS_PATH=/your/custom/path npx playwright install
node_modules/ — Paquetes de dependencias
Las dependencias principales de Playwright@playwright/testse instalan ennode_modules/.
Las dependencias incluyen el runtime completo de Playwright, incluida la capa de protocolo para comunicarse con el navegador.
Otras extensionesAdemás de los paquetes de Node.js instalados mediante npm, Playwright también depende de los archivos binarios del navegador (almacenados en la caché del sistema); ambos son indispensables.