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('webdriver.io page', () => {
it('should have the right title', async () => {
await browser.url('https://webdriver.io');
await expect(browser).toHaveTitle('WebdriverIO · Next-gen browser and mobile automation test framework for Node.js');
await percySnapshot('webdriver.io page');
});
});
Running the test above will result in the following log:
$ wdio wdio.conf.js
...
[...] webdriver.io 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: https://percy.io/[your-project]
[percy] Running "wdio wdio.conf.js"
...
[...] webdriver.io page
[percy] Snapshot taken "webdriver.io page"
[...] ✓ should have the right title
...
[percy] Stopping percy...
[percy] Finalized build #1: https://percy.io/[your-project]
[percy] Done!
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('https://duckduckgo.com');
const inputElem = await browser.$('#search_form_input_homepage');
await inputElem.setValue('WebdriverIO');
const submitBtn = await browser.$('#search_button_homepage');
await submitBtn.click();
// 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)
browser
(required) - The WebdriverIO browser objectname
(required) - The snapshot name; must be unique to each snapshotoptions
- Additional snapshot options (overrides any project options)options.widths
- An array of widths to take screenshots atoptions.minHeight
- The minimum viewport height to take screenshots atoptions.percyCSS
- Percy specific CSS only applied in Percy's rendering environmentoptions.requestHeaders
- Headers that should be used during asset discoveryoptions.enableJavaScript
- Enable JavaScript in Percy's rendering environment
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);
If you have a previous Percy configuration file, migrate it to the newest version with the
config:migrate
command:
$ percy config:migrate