Naively Programmable Module

    TypeScript icon, indicating that this package has built-in type declarations

    2.0.2 • Public • Published


    Version Test

    Percy visual testing for WebdriverIO.


    $ npm install --save-dev @percy/cli @percy/webdriverio


    This is an example using the percySnapshot() function in async mode.

    const percySnapshot = require('@percy/webdriverio');
    describe(' page', () => {
      it('should have the right title', async () => {
        await browser.url('');
        await expect(browser).toHaveTitle('WebdriverIO · Next-gen browser and mobile automation test framework for Node.js');
        await percySnapshot(' page');

    Running the test above will result in the following log:

    $ wdio wdio.conf.js
    [...] page
    [percy] Percy is not running, disabling snapshots
    [...]    ✓ should have the right title

    When running with percy exec, and your project's PERCY_TOKEN, a new Percy build will be created and snapshots will be uploaded to your project.

    $ export PERCY_TOKEN=[your-project-token]
    $ percy exec -- wdio wdio.conf.js
    [percy] Percy has started!
    [percy] Created build #1:[your-project]
    [percy] Running "wdio wdio.conf.js"
    [...] page
    [percy] Snapshot taken " page"
    [...]    ✓ should have the right title
    [percy] Stopping percy...
    [percy] Finalized build #1:[your-project]
    [percy] Done!

    Standalone mode

    When using WebdriverIO in standalone mode, the browser object must be provided as the first argument to the percySnapshot function.

    const { remote } = require('webdriverio');
    const percySnapshot = require('@percy/webdriverio');
    (async () => {
      const browser = await remote({
        logLevel: 'trace',
        capabilities: {
          browserName: 'chrome'
      await browser.url('');
      const inputElem = await browser.$('#search_form_input_homepage');
      await inputElem.setValue('WebdriverIO');
      const submitBtn = await browser.$('#search_button_homepage');
      // the browser object is required in standalone mode
      percySnapshot(browser, 'WebdriverIO at DuckDuckGo');
      await browser.deleteSession();
    })().catch((e) => console.error(e));


    percySnapshot(name[, options])

    percySnapshot(browser, name[, options]) (standalone mode only)


    Automatically with @percy/migrate

    We built a tool to help automate migrating to the new CLI toolchain! Migrating can be done by running the following commands and following the prompts:

    $ npx @percy/migrate
    ? Are you currently using @percy/webdriverio? Yes
    ? Install @percy/cli (required to run percy)? Yes
    ? Migrate Percy config file? Yes
    ? Upgrade SDK to @percy/webdriverio@2.0.0? Yes

    This will automatically run the changes described below for you.


    If you're coming from a pre-2.0 version of this package, the percySnapshot function is now the default export, and the browser argument is now only required when used in standalone mode.

    // before 
    const { percySnapshot } = require('@percy/webdriverio');
    await percySnapshot(browser, 'Snapshot name', options);
    // after
    const percySnapshot = require('@percy/webdriverio');
    await percySnapshot('Snapshot name', options);
    // in standalone mode, browser is still required
    await percySnapshot(browser, 'Snapshot name', options);

    Migrating Config

    If you have a previous Percy configuration file, migrate it to the newest version with the config:migrate command:

    $ percy config:migrate


    npm i @percy/webdriverio

    DownloadsWeekly Downloads






    Unpacked Size

    8.72 kB

    Total Files


    Last publish


    • wwilsman
    • robdel12
    • cadeparade
    • percy-admin
    • fotinakis
    • dgjones