behat-screenshot
behat-screenshot copied to clipboard
Behat extension and step definitions to create HTML and image screenshots on demand or when tests fail
Behat Screenshot Extension
Behat extension and step definitions to create HTML and image screenshots on demand or when tests fail.
Features
- Create a screenshot using
I save screenshot
orsave screenshot
step definition. - Create a screenshot when test fails.
- Screenshot is saved as HTML page for Goutte driver.
- Screenshot is saved as both HTML and PNG image for Selenium driver.
- Screenshot directory can be specified through environment
variable
BEHAT_SCREENSHOT_DIR
(useful for CI systems to override values inbehat.yml
). - Screenshots can be purged after every test run by setting
purge: true
( useful during test debugging) or setting environment variableBEHAT_SCREENSHOT_PURGE=1
.
Installation
composer require --dev drevops/behat-screenshot
Usage
Example behat.yml
with default parameters:
default:
suites:
default:
contexts:
- DrevOps\BehatScreenshotExtension\Context\ScreenshotContext
- FeatureContext
extensions:
DrevOps\BehatScreenshotExtension: ~
or with parameters:
default:
suites:
default:
contexts:
- DrevOps\BehatScreenshotExtension\Context\ScreenshotContext
- FeatureContext
extensions:
DrevOps\BehatScreenshotExtension:
dir: '%paths.base%/screenshots'
fail: true
fail_prefix: 'failed_'
purge: false
filenamePattern: '{datetime:u}.{feature_file}.feature_{step_line}.{ext}'
filenamePatternFailed: '{datetime:u}.{fail_prefix}{feature_file}.feature_{step_line}.{ext}'
In your feature:
Given I am on "http://google.com"
Then I save screenshot
You may optionally specify size of browser window in the screenshot step:
Then I save 1440 x 900 screenshot
And I save 800 x 600 screenshot
Options
Name | Default value | Description |
---|---|---|
dir |
%paths.base%/screenshots |
Path to directory to save screenshots. Directory structure will be created if the directory does not exist. |
fail |
true |
Capture screenshots for failed tests. |
fail_prefix |
failed_ |
Prefix failed screenshots with fail_ string. Useful to distinguish failed and intended screenshots. |
purge |
false |
Remove all files from the screenshots directory on each test run. Useful during debugging of tests. |
filenamePattern |
{datetime:u}.{feature_file}.feature_{step_line}.{ext} |
File name pattern for successful assertions. |
filenamePatternFailed |
{datetime:u}.{fail_prefix}{feature_file}.feature_{step_line}.{ext} |
File name pattern for failed assertions. |
Supported tokens
Token | Substituted with | Example value(s) |
---|---|---|
{ext} |
The extension of the file captured | html or png |
{fail_prefix} |
The value of fail_prefix from configuration | failed_ , error_ (do include the _ suffix, if required) |
{url} |
Full URL | http_example_com_mypath_subpath__query__myquery_1_plus_2_plus_3_and_another1_4__fragment__somefragment |
{url_origin} |
Scheme with domain | http_example_com |
{url_relative} |
Path + query + fragment | mypath_subpath__query__myquery_1_plus_2_plus_3_and_another1_4__fragment__somefragment |
{url_domain} |
Domain | example_com |
{url_path} |
Path | mypath_subpath |
{url_query} |
Query | myquery_1_plus_2_plus_3_and_another1_4 |
{url_fragment} |
Fragment | somefragment |
{feature_file} |
The filename of the .feature file currently being executed, without extension |
my_example.feature -> my_example |
{step_line} |
Step line number | 1 , 10 , 100 |
{step_line:%03d} |
Step line number with leading zeros. Modifiers are from sprintf() . |
001 , 010 , 100 |
{step_name} |
Step name without Given/When/Then and lower-cased. |
i_am_on_the_test_page |
{datetime} |
Current date and time. defaults to Ymd_His format. |
20010310_171618 |
{datetime:U} |
Current date and time as microtime. Modifiers are from date() . |
1697490961192498 |
Maintenance
Local development setup
cp docker-compose.override.default.yml docker-compose.override.yml
docker compose up -d
docker compose exec phpserver composer install --ansi
Lint code
docker compose exec phpserver composer lint
Lint fix
docker compose exec phpserver composer lint-fix
Run tests
docker compose exec phpserver composer test
Enable Xdebug
XDEBUG_ENABLE=true docker compose up -d phpserver
To disable, run
docker compose up -d phpserver