Tests e2e
End-to-end (E2E) tests in Drupal with Playwright.
Playwright enables reliable end-to-end testing for modern web apps.
Tests are located in tests/src/Playwright/Tests
.
Requirements
You must install Drush
and drupal/core-dev
in your project:
composer require drush/drush --dev
composer require drupal/core-dev:^11.2 -W --dev
Quick Start
If your system match requirements, you can install Playwright run from this module folder:
npm install
npx playwright install --with-deps
Copy .env.dist
to .env
. No need to change anything.
Uncomment webServer
in playwright.config.ts
, then run:
npm run test
Run Example Test Locally with Docker
If you don't want or cannot install Playwright locally, you can run Playwright server in a Docker container.
See Playwright Docker documentation for more details.
Pull and run Playwright server from this folder:
docker pull mcr.microsoft.com/playwright:v1.55.0-noble
docker run --add-host=hostmachine:host-gateway -p 3000:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.55.0-noble /bin/sh -c "npx -y playwright@1.55.0 run-server --port 3000 --host 0.0.0.0"
Launch a webserver on Drupal root, for example:
php -S 0.0.0.0:8000 -t web
Copy .env.dist
to .env
, adapt values for first case:
DRUPAL_TEST_BASE_URL='http://hostmachine:8000'
Run the test from this folder:
PW_TEST_CONNECT_WS_ENDPOINT=ws://127.0.0.1:3000/ npx playwright test --project=firefox
Adapt the other variable for an installed Drupal with a database.
Run Tests Locally
Local Installation
If your system meets the requirements, you can install Playwright from this folder:
npm install
npx playwright install --with-deps
Fedora is not officially supported by Playwright, but it can work. See this issue. As a workaround, install the following packages:
sudo dnf install -y \
libicu \
libjpeg-turbo \
libwebp \
flite \
pcre \
libffi
Then run the install without dependencies:
npm install
npx playwright install
Even if you see some error messages, tests should work on Fedora.
Local Tests
Tests are designed to run in GitLab CI, but they can also run locally with a running Drupal instance, with or without Drupal installed.
Without a local server, with Drupal and Drush installed, you can quickly launch the example test by running:
npm run test
For local tests with installed Drupal you must enable extension_discovery_scan_tests
in your settings.php and disable js aggregation:
$config['system.performance']['js']['preprocess'] = FALSE;
$settings['extension_discovery_scan_tests'] = TRUE;
Modules that MUST be enabled:
- layout_builder
- display_builder_test
- display_builder_ui
- display_builder_entity_view
- display_builder_page_layout
- display_builder_dev_tools (external module, must be installed)
Theme MUST be display_builder_theme_test
by default, unless test is
specific for a theme.
Copy and adapt the .env.dist
file as .env
to set your environment.
There are different cases for running tests with a full installation or on a running Drupal instance to avoid the install step.
Note: WebKit tests cannot be run in a non-MacOS environment.
Commands to run the tests with Firefox only:
npm run test
Or test by tag with Firefox only:
npx playwright test --project=firefox --grep "@my_module"
Or a specific test:
npx playwright test --project=firefox -g 'Example test'
To see what's happening during a running test:
npx playwright test --project=firefox -g 'Example test' --headed
Or run the test step by step:
npx playwright test --project=firefox -g 'Example test' --ui
More information: Playwright running and debugging tests.