import { defineConfig, devices } from '@playwright/test'; export default defineConfig({ testDir: './tests/e2e', timeout: 30 * 1000, expect: { timeout: 5000 }, fullyParallel: false, forbidOnly: !!process.env.CI, retries: process.env.CI ? 2 : 0, workers: 1, reporter: [ ['list'], ['html', { outputFolder: 'playwright-report', open: 'never' }] ], use: { baseURL: 'http://localhost:3000', trace: 'on-first-retry', video: 'off', screenshot: 'off' }, projects: [ { name: 'desktop-chrome', use: { ...devices['Desktop Chrome'], viewport: { width: 1440, height: 900 } } }, { name: 'ipad-portrait', use: { viewport: { width: 834, height: 1194 }, deviceScaleFactor: 2, isMobile: true, hasTouch: true, userAgent: 'Mozilla/5.0 (iPad; CPU OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1' } }, { name: 'mobile-iphone', use: { ...devices['iPhone 14'] } } ], webServer: { command: 'npm run dev -- --port 3000', url: 'http://localhost:3000', reuseExistingServer: !process.env.CI, timeout: 120 * 1000 } });