forked from paperswithcode/ai-deadlines
-
Notifications
You must be signed in to change notification settings - Fork 23
Expand file tree
/
Copy pathplaywright.config.js
More file actions
147 lines (116 loc) · 3.2 KB
/
playwright.config.js
File metadata and controls
147 lines (116 loc) · 3.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/**
* Playwright E2E test configuration
*/
import { defineConfig, devices } from '@playwright/test';
const PORT = process.env.PORT || 4000;
const BASE_URL = process.env.BASE_URL || `http://localhost:${PORT}`;
export default defineConfig({
// Test directory
testDir: './tests/e2e',
// Test file patterns
testMatch: /.*\.(spec|test)\.(js|ts)$/,
// Maximum time one test can run
timeout: 30 * 1000,
// Maximum time to wait for page to load
expect: {
timeout: 10 * 1000,
},
// Run tests in parallel
fullyParallel: true,
// Fail the build on CI if you accidentally left test.only in the source code
forbidOnly: !!process.env.CI,
// Retry on CI only
retries: process.env.CI ? 2 : 0,
// Limit parallel workers on CI
workers: process.env.CI ? 2 : undefined,
// Reporter configuration
reporter: [
['html', { outputFolder: 'playwright-report', open: 'never' }],
['json', { outputFile: 'test-results/results.json' }],
['junit', { outputFile: 'test-results/junit.xml' }],
['list'],
],
// Global test settings
use: {
// Base URL for all tests
baseURL: BASE_URL,
// Collect trace when retrying the failed test
trace: 'on-first-retry',
// Screenshot on failure
screenshot: 'only-on-failure',
// Video on failure
video: 'retain-on-failure',
// Action timeout
actionTimeout: 10 * 1000,
// Navigation timeout
navigationTimeout: 30 * 1000,
// Emulate timezone for consistent testing
timezoneId: 'UTC',
// Locale for consistent testing
locale: 'en-US',
// Permissions to grant
permissions: ['notifications'],
// Viewport size
viewport: { width: 1280, height: 720 },
},
// Configure projects for different browsers
projects: [
{
name: 'chromium',
use: {
...devices['Desktop Chrome'],
// Custom launch options for Chromium
launchOptions: {
args: ['--disable-dev-shm-usage'],
},
},
},
{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
},
{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
},
// Mobile viewports
{
name: 'mobile-chrome',
use: { ...devices['Pixel 5'] },
},
{
name: 'mobile-safari',
use: { ...devices['iPhone 12'] },
},
// Test with different timezones
{
name: 'timezone-ny',
use: {
...devices['Desktop Chrome'],
timezoneId: 'America/New_York',
},
},
{
name: 'timezone-berlin',
use: {
...devices['Desktop Chrome'],
timezoneId: 'Europe/Berlin',
},
},
],
// Run local dev server before starting tests (optional)
webServer: process.env.CI ? undefined : {
// Use optimized test server for fastest startup
command: 'bundle exec jekyll serve --config _config.yml,_config.test.yml --incremental',
port: PORT,
timeout: 30 * 1000, // Very fast with test config
reuseExistingServer: true,
stdout: 'pipe',
stderr: 'pipe',
},
// Output folder for test artifacts
outputDir: 'test-results/',
// Global setup and teardown
globalSetup: './tests/e2e/global-setup.js',
globalTeardown: './tests/e2e/global-teardown.js',
});