Giter VIP home page Giter VIP logo

visualception's Introduction

VisualCeption

Visual regression tests for Codeception.

Build Status

This module can be used to compare the current representation of a website element with an expected. It was written on the shoulders of codeception and integrates in a very easy way.

WARNING This module can reduce the execution speed of acceptance tests. Use it only for visual regression test suite and not for regular end to end testing.

Example

How it works

VisualCeption uses a combination of the "make a screenshot" feature in webdriver, imagick and native JavaScript to compare visual elements on a website. This comparison is done in five steps:

  1. Take a screenshot of the full page using webdriver.
  2. Calculate the position and size of the selected element using JavaScript.
  3. Crop the element out of the full screenshot using imagick.
  4. Compare the element with an older version of the screenshot that has been proofed as valid using imagick. If no previous image exists the current image will be used fur future comparions. As an effect of this approach the test has to be run twice before it works.
  5. If the deviation is too high throw an exception that is caught by Codeception.

Requirements

VisualCeption needs the following components to run:

  • Codeception VisualCeption is a module for Codeception. It will need a running version of this tool.
  • Imagick For comparing two images VisualCeption is using the imagick library for php. For more information visit php.net or the installation guide.
  • WebDriver module This tool only works with the webdriver module in Codeception at the moment.

Installation

Make sure you have php-imagick extension installed. Run php -m to see if imagick extension is enabled.

Then add VisualCeption to composer.json:

composer require "codeception/visualception:*" --dev

Configuration

To use the VisualCeption module you have to configure it.

Example Configuration

modules:
    enabled: 
        - WebDriver:
            url: http://localhost.com
            browser: firefox
        - VisualCeption:
            maximumDeviation: 5                                   # deviation in percent
            saveCurrentImageIfFailure: true                       # if true, VisualCeption saves the current
  • referenceImageDir VisualCeption uses an "old" image for calculating the deviation. These images have to be stored in data directory (tests/_data) or be relative to it. Default: 'VisualCeption/'
  • currentImageDir temporary directory for current processed images. Relative to output dirtests/_output. Default: 'debug/visual/'
  • maximumDeviation (default: 0)When comparing two images the deviation will be calculated. If this deviation is greater than the maximum deviation the test will fail.
  • saveCurrentImageIfFailure When the test fails, the current image will be saved too, so it's easier to change the reference image with this one. The image will appear beside the compare image with the prefix "current."
  • report When enabled an HTML report with diffs for failing tests is generated. Report is stored in tests/_output/vcresult.html. Default: false
  • module module responsible for browser interaction, default: WebDriver.

Usage

VisualCeption is really easy to use. There are only two methods that will be added to $I seeVisualChanges and dontSeeVisualChanges.

$I->seeVisualChanges( "uniqueIdentifier1", "elementId1" );
$I->dontSeeVisualChanges( "uniqueIdentifier2", "elementId2" );

$I->dontSeeVisualChanges( "uniqueIdentifier3", "elementId3" [, array("excludeElement1", "excludeElement2")] );

$I->dontSeeVisualChanges( "uniqueIdentifier3", "elementId3" [, array("excludeElement1", "excludeElement2") [, 
                          $deviation]] );
  • uniqueIdentifier For comparing the images it is important to have a stable name. This is the corresponding name.
  • elementId It is possible to only compare a special div container. The element id can be passed. You can use CSS locators.
  • excludeElements Optional parameter as string or an array of strings to exclude an element from the screenshot. Maybe there is an animated image in your test container, so you can ignore it. You can use CSS locators.
  • $deviation Optional parameter as float use if it is necessary to establish deviation coefficient other than configuration.

Example Usage

$I->seeVisualChanges( "subNavigation", "#subNav" );
$I->dontSeeVisualChanges("content", "div.content", array("#intro"));

If you need more information about the test run please use the command line debug option (-d or --debug).

HTML Reports

Enable Reports in config and use nice HTML output to see all failed visual tests with thair image diffs on a page:

modules:
    enabled: 
        - WebDriver:
            url: http://localhost.com
            browser: firefox
        - VisualCeption:
            report: true
            templateFile: "/report/template2.php" # Absolute path or relative from module dir to report template. Default "/report/template.php"

Restriction

VisualCeption uses the WebDriver module for making the screenshots. As a consequence we are not able to take screenshots via google chrome as the chromedriver does not allow full page screenshots.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.