Next-gen browser and mobile automation test framework for Node.js
Extendable
Adding helper functions, or more complicated sets and combinations of existing commands is simple and really useful.
Compatible
WebdriverIO can be run on the WebDriver Protocol for true cross-browser testing as well as Chrome DevTools Protocol for Chromium based automation using Puppeteer.
Feature Rich
The huge variety of community plugins allows you to easily integrate and extend your setup to fulfill your requirements.
await browser.url('https://ahfarmer.github.io/calculator/');
const appWrapper = await browser.$('div#root')
await browser.react$('t', {
props: { name: '7' }
}).click()
await browser.react$('t', {
props: { name: 'x' }
}).click()
await browser.react$('t', {
props: { name: '6' }
}).click()
await browser.react$('t', {
props: { name: '=' }
}).click()
// prints "42"
console.log(await $('.component-display').getText());
Support for Modern Web and Mobile Frameworks
WebdriverIO allows you to automate any application written with modern web frameworks such as React, Angular, Polymeror Vue.js as well as native mobile applications for Android and iOS.
It comes with smart selector strategies that can, e.g. using the react$
command, fetch React components by its component name and filter it by its props or states. A similar command called $shadow
provides the ability to fetch elements within the shadow DOM of a web component.
Google Lighthouse Integration
WebdriverIO not only runs automation based on the WebDriver protocol, it also leverages native browser APIs to enable integrations to popular developer tools such as Chrome DevTools orGoogle Lighthouse. With the @wdio/devtools-service
plugin you have access to commands for validating if you app is a valid PWA application as well as to commands for capturing frontend performance metrics such as speedIndex
and others.
await browser.emulateDevice('iPhone X')
await browser.enablePerformanceAudits({
networkThrottling: 'Good 3G',
cacheEnabled: true,
formFactor: 'mobile'
})
// open application under test
await browser.url('https://localhost:3000')
expect(await browser.getMetrics().firstMeaningfulPaint)
.toBeBelow(2500)
const pwaCheckResult = await browser.checkPWA()
expect(pwaCheckResult.passed).toBe(true)
Watch Talks about WebdriverIO
The community around WebdriverIO is actively speaking on various user groups or conferences about specific topics around automated testing with WebdriverIO. Check out this talk on My favourite features of WebdriverIO by Julia Pottinger at Open Quality Conference.
There is also many YouTube Channels with useful tutorials by community members such as Klamping, Seventeenth Sep or Automation Bro.
Get Started With WebdriverIO within Minutes
The WebdriverIO testrunner comes with a command line interface that provides a nice configuration utility that helps you to create your config file in less than a minute. It also gives an overview of all available 3rd party packages like framework adaptions, reporter and services and installs them for you!
$ npm install --save-dev @wdio/cli
$ npx wdio config --yes
$ npx wdio run