integratedexperts/behat-screenshot

This package is abandoned and no longer maintained. The author suggests using the drevops/behat-screenshot package instead.

Behat extension and step definitions to create HTML and image screenshots on demand or when tests fail

Fund package maintenance!
Patreon

1.4.0 2024-03-12 23:45 UTC

README

Behat screenshot logo

Behat Screenshot Extension

GitHub Issues GitHub Pull Requests CircleCI codecov GitHub release (latest by date) LICENSE Renovate

Total Downloads

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 or save 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 in behat.yml).
  • Screenshots can be purged after every test run by setting purge: true ( useful during test debugging) or setting environment variable BEHAT_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