Files
teleport/e2e
Bartosz Leper 3a09c34131 Add e2e test for switching to dark mode (#65076)
* Add e2e test for switching to dark mode

* Fix license

* Also check theme while logged out

* Ensure dark theme is saved to the backend

* Move the test to unauthenticated project

This lets it use a dedicated user and minimize impact on other tests
running in parallel.

* Delete the user after the test is done

* Undo commenting out clearing cookies

* Guarantee deletion of the test user

* lint
2026-04-01 14:10:38 +00:00
..
2026-03-11 13:56:29 +00:00
2026-03-17 15:00:08 +00:00
2026-03-31 15:39:37 +00:00
2026-03-31 15:39:37 +00:00
2026-03-16 18:42:53 +00:00
2026-03-24 09:56:58 +00:00

E2E Testing with Playwright

This directory contains end-to-end tests that run against a real Teleport instance using Playwright.

Setup

The runner will install the E2E dependencies and Playwright browsers for you on each run. You can also set up your environment manually if you prefer:

pnpm install
pnpm exec playwright install chromium

Running Tests

Tests are run via the run.sh script, which builds and executes the Go test runner:

./e2e/run.sh [flags] [test files...]

You can invoke this from either the e2e/ directory or the root of the repository (or any other directory, really) - the runner will rewrite any test-result/ paths to be relative to the current working directory, so you can still click through to screenshots and anything else from Playwright's test results.

Modes

By default, the runner runs in test mode. Use one of the following flags to change the mode (mutually exclusive):

Flag Description
--ui Open Playwright UI mode
--debug Run tests with Playwright inspector (PWDEBUG=1)
--codegen Open Playwright codegen against running Teleport. Available only for web tests.
--browse Open a signed-in browser for manual web testing
--browse-connect Open a signed-in Teleport Connect app for manual testing

Flags

Flag Default Description
-v false Enable debug logging
--no-build false Skip make binaries (useful during development)
--quiet false Redirect Teleport logs to file instead of stdout
--full false Enable all optional fixtures
--replace-certs false Generate new self-signed certificates
--update-snapshots false Update Playwright snapshot baselines
--teleport-log-level INFO Teleport log severity (DEBUG, INFO, WARN, ERROR)
--license-file Path to Teleport license file (required for Enterprise features)
--teleport-bin build/teleport Override teleport binary path (env: TELEPORT_BIN)
--tctl-bin build/tctl Override tctl binary path (env: TCTL_BIN)
--teleport-url Override Teleport URL (env: TELEPORT_URL). If set, the runner skips starting Teleport

Fixtures

Flag Description
--with-ssh-node Start and connect a Teleport SSH node (runs in Docker)
--with-connect Build Teleport Connect. Enabled by default when running tests in e2e/tests/connect

Common Commands

Typically, you'll want to run with --no-build during test development to skip rebuilding Teleport binaries on every run. --quiet is also useful to reduce the noise from Teleport logs. The logs are captured in teleport.log for debugging purposes.

Connect is built automatically when running tests/connect paths or when using --browse-connect, or --full.

# Run a specific test, skip rebuilding (fastest iteration loop)
./e2e/run.sh --no-build e2e/tests/web/authenticated/roles.spec.ts

# Run only Connect tests, skip rebuilding of both Teleport and Connect
./e2e/run.sh --no-build e2e/tests/connect

# Open a browser with auth already set up for manual testing
./e2e/run.sh --browse

# Open Connect with auth already set up for manual testing
./e2e/run.sh --browse-connect

# Debug a failing test with the Playwright inspector
./e2e/run.sh --debug e2e/tests/web/authenticated/roles.spec.ts

# Open Playwright UI mode (pick and run tests interactively)
./e2e/run.sh --ui

# Record a new test by interacting with the browser
./e2e/run.sh --codegen

# Update snapshot baselines after a visual change
./e2e/run.sh --update-snapshots --with-ssh-node e2e/tests/web/with-ssh-node/ssh.spec.ts

More Examples

# Run all tests
./e2e/run.sh

# Run SSH node tests with the fixture enabled
./e2e/run.sh --with-ssh-node e2e/tests/web/with-ssh-node/ssh.spec.ts

# Run tests with all fixtures enabled, skipping the Teleport build
./e2e/run.sh --full --no-build

# Run against an existing Teleport instance (doesn't work yet as authentication is hardcoded to the e2e setup and we need to figure out auth for remote instances)
./e2e/run.sh --teleport-url https://localhost:3080

# Set the Teleport log level to DEBUG for more verbose output
./e2e/run.sh --teleport-log-level DEBUG