What is @wdio/local-runner?
@wdio/local-runner is a part of the WebdriverIO test automation framework. It allows you to run WebdriverIO tests locally on your machine. This package is particularly useful for running end-to-end tests in a local environment, providing a streamlined way to execute and manage test suites.
What are @wdio/local-runner's main functionalities?
Running Tests Locally
This feature allows you to run WebdriverIO tests locally. The code sample demonstrates how to set up a local WebdriverIO session, navigate to a URL, retrieve the page title, and then close the session.
const { remote } = require('webdriverio');
(async () => {
const browser = await remote({
capabilities: { browserName: 'chrome' }
});
await browser.url('https://webdriver.io');
const title = await browser.getTitle();
console.log('Title was: ' + title);
await browser.deleteSession();
})();
Parallel Test Execution
This feature allows you to run multiple test instances in parallel, which can significantly speed up the test execution time. The code sample shows a configuration file where the `maxInstances` property is set to 5, allowing up to 5 parallel test executions.
exports.config = {
runner: 'local',
specs: [
'./test/specs/**/*.js'
],
maxInstances: 5,
capabilities: [{
maxInstances: 5,
browserName: 'chrome'
}],
...
};
Custom Services
This feature allows you to integrate custom services like Selenium Standalone, Appium, etc., into your test runner. The code sample shows how to add the `selenium-standalone` service to the WebdriverIO configuration.
exports.config = {
runner: 'local',
services: ['selenium-standalone'],
...
};
Other packages similar to @wdio/local-runner
selenium-webdriver
Selenium WebDriver is a popular tool for automating web applications for testing purposes. It provides a more low-level API compared to WebdriverIO, which can be both an advantage and a disadvantage depending on the use case. Selenium WebDriver requires more boilerplate code to set up and run tests.
cypress
Cypress is a modern end-to-end testing framework that is known for its developer-friendly features and fast test execution. Unlike WebdriverIO, Cypress runs in the same run-loop as the application being tested, which can lead to more reliable tests. However, it currently only supports testing in Chrome-family browsers.
nightwatch
Nightwatch.js is an integrated, easy-to-use end-to-end testing solution for web applications and websites, written in Node.js. It uses the W3C WebDriver API to perform commands and assertions on DOM elements. Nightwatch provides a simpler syntax compared to WebdriverIO but may lack some advanced features.
WebdriverIO Local Runner
A WebdriverIO runner to run tests locally within worker processes
The Local Runner initiates your framework (e.g. Mocha, Jasmine or Cucumber) within worker a process and runs all your test files within your Node.js environment. Every test file is being run in a separate worker process per capability allowing for maximum concurrency. Every worker process uses a single browser instance and therefore runs its own browser session allowing for maximum isolation.
Given every test is run in its own isolated process, it is not possible to share data across test files. There are two ways to work around this:
If nothing else is defined in the wdio.conf.js
the Local Runner is the default runner in WebdriverIO.
Install
To use the Local Runner you can install it via:
npm install --save-dev @wdio/local-runner
Setup
The Local Runner is the default runner in WebdriverIO so there is no need to define it within your wdio.conf.js
. If you want to explicitly set it, you can define it as follows:
export const {
runner: 'local',
}
For more information on WebdriverIO runner, check out the documentation.