In playwright.config.ts, define a projects array with one entry per browser: { name: 'chromium', use: { ...devices['Desktop Chrome'] } }, { name: 'firefox', use: { ...devices['Desktop Firefox'] } }, { name: 'webkit', use: { ...devices['Desktop Safari'] } }
Run npx playwright install to download all three browser binaries; omit specific browsers with --browser=chromium if bandwidth is a concern in CI
Use project.grep or test.skip(({ browserName }) => browserName === 'webkit', 'reason') inside tests to exclude browser-specific tests from projects where they are not applicable
For tests with shared dependencies (e.g., a login setup project), use the dependencies field in a project config to declare which setup project must complete before this project's tests run
View per-browser results in the HTML report with npx playwright show-report; filter by project name to compare pass/fail across browsers
Known gotchas
WebKit on Linux requires additional system libraries that are not always pre-installed in CI images; run npx playwright install-deps webkit to install them, or use the official Playwright Docker image which bundles all dependencies
Browser behavior differs in subtle ways (font rendering, CSS support, timing) — a test passing in Chromium may fail in WebKit for legitimate reasons; avoid using screenshot diffs across browsers in the same assertion
The devices presets set viewport size, user agent, device scale factor, and touch support together — do not override individual fields piecemeal unless you understand all the values the preset applies
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp