Configuration
Based on the setup type (e.g. using the raw protocol bindings, WebdriverIO as standalone package or the WDIO testrunner) there is a different set of options available to control the environment.
WebDriver Optionsโ
The following options are defined when using the webdriver protocol package:
protocolโ
- Type
String- Default
http
Protocol to use when communicating with the driver server.
hostnameโ
- Type
String- Default
0.0.0.0
Host of your driver server.
portโ
- Type
Number- Default
undefined
Port your driver server is on.
pathโ
- Type
String- Default
/
Path to driver server endpoint.
queryParamsโ
- Type
Object- Default
undefined
Query parameters that are propagated to the driver server.
userโ
- Type
String- Default
undefined
Your cloud service username (only works for Sauce Labs, Browserstack, TestingBot or TestMu AI accounts). If set, WebdriverIO will automatically set connection options for you. If you don't use a cloud provider this can be used to authenticate any other WebDriver backend.
keyโ
- Type
String- Default
undefined
Your cloud service access key or secret key (only works for Sauce Labs, Browserstack, TestingBot or TestMu AI accounts). If set, WebdriverIO will automatically set connection options for you. If you don't use a cloud provider this can be used to authenticate any other WebDriver backend.
capabilitiesโ
- Type
Object- Default
null
Defines the capabilities you want to run in your WebDriver session. Check out the WebDriver Protocol for more details.
Next to the WebDriver based capabilities you can apply browser and vendor specific options that allow deeper configuration to the remote browser or device. These are documented in the corresponding vendor docs, e.g.:
goog:chromeOptions: for Google Chromemoz:firefoxOptions: for Mozilla Firefoxms:edgeOptions: for Microsoft Edgesauce:options: for Sauce Labsbstack:options: for BrowserStackselenoid:options: for Selenoid
Additionally, a useful utility is the Sauce Labs Automated Test Configurator, which helps you create this object by clicking together your desired capabilities.
Example:
{
browserName: 'chrome', // options: `chrome`, `edge`, `firefox`, `safari`
browserVersion: '27.0', // browser version
platformName: 'Windows 10' // OS platform
}
If youโre running web or native tests on mobile devices, capabilities differs from the WebDriver protocol. See the Appium Docs for more details.
logLevelโ
- Type
String- Default
info- Values
trace | debug | info | warn | error | silent
Level of logging verbosity.
outputDirโ
- Type
String- Default
null
Directory to store all testrunner log files (including reporter logs and wdio logs). If not set, all logs are streamed to stdout. Since most reporters are made to log to stdout, it is recommended to only use this option for specific reporters where it makes more sense to push report into a file (like the junit reporter, for example).
When running in standalone mode, the only log generated by WebdriverIO will be the wdio log.
connectionRetryTimeoutโ
- Type
Number- Default
120000
Timeout for any WebDriver request to a driver or grid.
connectionRetryCountโ
- Type
Number- Default
3
Maximum count of request retries to the Selenium server.
bidiResponseTimeoutโ
- Type
Number- Default
180000
Timeout (in ms) for a WebDriver Bidi command to receive a response from the browser. Increase this if you run commands, e.g. execute, that legitimately take longer than the default to resolve, otherwise WebdriverIO gives up waiting before the browser is done.
agentโ
- Type
Object- Default
{ http: new http.Agent({ keepAlive: true }), https: new https.Agent({ keepAlive: true }) }
Allows you to use a custom http/https/http2 agent to make requests.
headersโ
- Type
Object- Default
{}
Specify custom headers to pass into every WebDriver request. If your Selenium Grid requires Basic Authentification we recommend to pass in an Authorization header through this option to authenticate your WebDriver requests, e.g.:
import { Buffer } from 'buffer';
// Read the username and password from environment variables
const username = process.env.SELENIUM_GRID_USERNAME;
const password = process.env.SELENIUM_GRID_PASSWORD;
// Combine the username and password with a colon separator
const credentials = `${username}:${password}`;
// Encode the credentials using Base64
const encodedCredentials = Buffer.from(credentials).toString('base64');
export const config: WebdriverIO.Config = {
// ...
headers: {
Authorization: `Basic ${encodedCredentials}`
}
// ...
}
transformRequestโ
- Type
(RequestOptions) => RequestOptions- Default
none
Function intercepting HTTP request options before a WebDriver request is made
transformResponseโ
- Type
(Response, RequestOptions) => Response- Default
none
Function intercepting HTTP response objects after a WebDriver response has arrived. The function is passed the original response object as the first and the corresponding RequestOptions as the second argument.
strictSSLโ
- Type
Boolean- Default
true
Whether it does not require SSL certificate to be valid.
It can be set via an environment variables as STRICT_SSL or strict_ssl.
enableDirectConnectโ
- Type
Boolean- Default
true
Whether enable Appium direct connection feature. It does nothing if the response did not have proper keys while the flag is enabled.
cacheDirโ
- Type
String- Default
process.env.WEBDRIVER_CACHE_DIR || os.tmpdir()
The path to the root of the cache directory. This directory is used to store all drivers that are downloaded when attempting to start a session.
maskingPatternsโ
- Type
String- Default
undefined
For more secure logging, regular expressions set with maskingPatterns can obfuscate sensitive information from the log.
- The string format is a regular expression with or without flags (e.g.
/.../i) and comma-separated for multiple regular expressions. - For more details on masking patterns, see the Masking Patterns section in the WDIO Logger README.
Example:
{
maskingPatterns: '/--key=([^ ]*)/i,/RESULT (.*)/'
}
WebdriverIOโ
The following options (including the ones listed above) can be used with WebdriverIO in standalone:
automationProtocolโ
- Type
String- Default
webdriver
Define the protocol you want to use for your browser automation. Currently only webdriver is supported, as it is the main browser automation technology WebdriverIO uses.
If you want to automate the browser using a different automation technology, make you set this property to a path that resolves to a module that adheres to the following interface:
import type { Capabilities } from '@wdio/types';
import type { Client, AttachOptions } from 'webdriver';
export default class YourAutomationLibrary {
/**
* Start a automation session and return a WebdriverIO [monad](https://github.com/webdriverio/webdriverio/blob/940cd30939864bdbdacb2e94ee6e8ada9b1cc74c/packages/wdio-utils/src/monad.ts)
* with respective automation commands. See the [webdriver](https://www.npmjs.com/package/webdriver) package
* as a reference implementation
*
* @param {Capabilities.RemoteConfig} options WebdriverIO options
* @param {Function} hook that allows to modify the client before it gets released from the function
* @param {PropertyDescriptorMap} userPrototype allows user to add custom protocol commands
* @param {Function} customCommandWrapper allows to modify the command execution
* @returns a WebdriverIO compatible client instance
*/
static newSession(
options: Capabilities.RemoteConfig,
modifier?: (...args: any[]) => any,
userPrototype?: PropertyDescriptorMap,
customCommandWrapper?: (...args: any[]) => any
): Promise<Client>;
/**
* allows user to attach to existing sessions
* @optional
*/
static attachToSession(
options?: AttachOptions,
modifier?: (...args: any[]) => any, userPrototype?: {},
commandWrapper?: (...args: any[]) => any
): Client;
/**
* Changes The instance session id and browser capabilities for the new session
* directly into the passed in browser object
*
* @optional
* @param {object} instance the object we get from a new browser session.
* @returns {string} the new session id of the browser
*/
static reloadSession(
instance: Client,
newCapabilities?: WebdriverIO.Capabilitie
): Promise<string>;
}
baseUrlโ
- Type
String- Default
null
Shorten url command calls by setting a base URL.
- If your
urlparameter starts with/, thenbaseUrlis prepended (except thebaseUrlpath, if it has one). - If your
urlparameter starts without a scheme or/(likesome/path), then the fullbaseUrlis prepended directly.
waitforTimeoutโ
- Type
Number- Default
5000
Default timeout for all waitFor* commands. (Note the lowercase f in the option name.) This timeout only affects commands starting with waitFor* and their default wait time.
To increase the timeout for a test, please see the framework docs.
waitforIntervalโ
- Type
Number- Default
100
Default interval for all waitFor* commands to check if an expected state (e.g., visibility) has been changed.
strictSelectorsโ
- Type
Boolean- Default
true
Makes the $ command throw a StrictSelectorError when the given selector resolves to more than one element, instead of silently using the first match. $$ is unaffected.
You can opt out for a single query by passing { strict: false } as second argument, e.g. $('button', { strict: false }).
See the Selectors guide for details.
maxSpyCollectedBodySizeโ
- Type
Number- Default
10485760 (10MB)
Maximum size of the response body (in bytes) that can be returned when using the mock command. Use 0 to disable data collection of the spied payload.
regionโ
- Type
String- Default
us- Values
us | eu | us-west-1 | eu-central-1 | us-east-4 | staging
If running on Sauce Labs, you can choose to run tests between different data centers.
Use short region handles us (default, maps to us-west-1) or eu (maps to eu-central-1), or the full region names directly.
Note: This only has an effect if you provide user and key options that are connected to your Sauce Labs account.
(only for vm and or em/simulators)
Testrunner Optionsโ
The following options (including the ones listed above) are defined only for running WebdriverIO with the WDIO testrunner:
specsโ
- Type
(String | String[])[]- Default
[]
Define specs for test execution. You can either specify a glob pattern to match multiple files at once or wrap a glob or set of paths into an array to run them within a single worker process. All paths are seen as relative from the config file path.
excludeโ
- Type
String[]- Default
[]
Exclude specs from test execution. All paths are seen as relative from the config file path.
suitesโ
- Type
Object- Default
{}
An object describing various suites, which you can then specify with the --suite option on the wdio CLI.
capabilitiesโ
- Type
Object|Object[]- Default
[{ 'wdio:maxInstances': 5, browserName: 'firefox' }]
The same as the capabilities section described above, except with the option to specify either a multi-remote object, or multiple WebDriver sessions in an array for parallel execution.
You can apply the same vendor and browser specific capabilities as defined above.
maxInstancesโ
- Type
Number- Default
100
Maximum number of total parallel running workers.
Note: that it may be a number as high as 100, when the tests are being performed on some external vendors such as Sauce Labs's machines. There, the tests are not tested on a single machine, but rather, on multiple VMs. If the tests are to be run on a local development machine, use a number that is more reasonable, such as 3, 4, or 5. Essentially, this is the number of browsers that will be concurrently started and running your tests at the same time, so it depends on how much RAM there is on your machine, and how many other apps are running on your machine.
You can also apply maxInstances within your capability objects using the wdio:maxInstances capability. This will limit the amount of parallel sessions for that particular capability.
maxInstancesPerCapabilityโ
- Type
Number- Default
100
Maximum number of total parallel running workers per capability.
injectGlobalsโ
- Type
Boolean- Default
true
Inserts WebdriverIO's globals (e.g. browser, $ and $$) into the global environment.
If you set to false, you should import from @wdio/globals, e.g.:
import { browser, $, $$, expect } from '@wdio/globals'
Note: WebdriverIO doesn't handle injection of test framework specific globals.
bailโ
- Type
Number- Default
0 (don't bail; run all tests)
If you want your test run to stop after a specific number of test failures, use bail.
(It defaults to 0, which runs all tests no matter what.) Note: A test in this context are all tests within a single spec file (when using Mocha or Jasmine) or all steps within a feature file (when using Cucumber). If you want to control the bail behavior within tests of a single test file, take a look at the available framework options.
specFileRetriesโ
- Type
Number- Default
0
The number of times to retry an entire specfile when it fails as a whole.
specFileRetriesDelayโ
- Type
Number- Default
0
Delay in seconds between the spec file retry attempts
specFileRetriesDeferredโ
- Type
Boolean- Default
true
Whether or not retried spec files should be retried immediately or deferred to the end of the queue.
groupLogsByTestSpecโ
- Type
Boolean- Default
false
Choose the log output view.
If set to false logs from different test files will be printed in real-time. Please note that this may result in the mixing of log outputs from different files when running in parallel.
If set to true log outputs will be grouped by Test Spec and printed only when the Test Spec is completed.
By default, it is set to false so logs are printed in real-time.
autoAssertOnTestEndโ
- Type
Boolean- Default
true
Controls whether WebdriverIO automatically asserts all soft assertions at the end of each test. When set to true, any accumulated soft assertions will be automatically checked and cause the test to fail if any assertions failed. When set to false, you must manually call the assert method to check soft assertions.
servicesโ
- Type
String[]|Object[]- Default
[]
Services take over a specific job you don't want to take care of. They enhance your test setup with almost no effort.
frameworkโ
- Type
String- Default
mocha- Values
mocha | jasmine | cucumber
Defines the test framework to be used by the WDIO testrunner.
mochaOpts, jasmineOpts and cucumberOptsโ
- Type
Object- Default
{ timeout: 10000 }
Specific framework-related options. See the framework adapter documentation on which options are available. Read more on this in Frameworks.
cucumberFeaturesWithLineNumbersโ
- Type
String[]- Default
[]
List of cucumber features with line numbers (when using cucumber framework).
reportersโ
- Type
String[]|Object[]- Default
[]
List of reporters to use. A reporter can be either a string, or an array of
['reporterName', { /* reporter options */}] where the first element is a string with the reporter name and the second element an object with reporter options.
Example:
reporters: [
'dot',
'spec'
['junit', {
outputDir: `${__dirname}/reports`,
otherOption: 'foobar'
}]
]
reporterSyncIntervalโ
- Type
Number- Default
100 (ms)
Determines in which interval the reporter should check if they are synchronized if they report their logs asynchronously (e.g. if logs are streamed to a 3rd party vendor).
reporterSyncTimeoutโ
- Type
Number- Default
5000 (ms)
Determines the maximum time reporters have to finish uploading all their logs until an error is being thrown by the testrunner.
execArgvโ
- Type
String[]- Default
null
Node arguments to specify when launching child processes.
cpuProfโ
- Type
Boolean- Default
false
Enable CPU profiling for the worker process. The profile will be generated automatically when the worker process exits.
heapProfโ
- Type
Boolean- Default
false
Enable Heap profiling for the worker process. The snapshot will be generated automatically when the worker process exits (uses sampling heap profiler).
profileOutputDirโ
- Type
String- Default
./profiles
Directory where the CPU profiles (.cpuprofile) and Heap profiles (.heapprofile) will be saved.
filesToWatchโ
- Type
String[]- Default
[]
A list of glob supporting string patterns that tell the testrunner to have it additionally watch other files, e.g. application files, when running it with the --watch flag. By default the testrunner already watches all spec files.
updateSnapshotsโ
- Type
'new' | 'all' | 'none'- Default
none if not provided and tests run in CI, new if not provided, otherwise what's been provided
Set to true if you want to update your snapshots. Ideally used as part of a CLI parameter, e.g. wdio run wdio.conf.js --s.
resolveSnapshotPathโ
- Type
(testPath: string, snapExtension: string) => string- Default
stores snapshot files in __snapshots__ directory next to test file
Overrides default snapshot path. For example, to store snapshots next to test files.
export const config: WebdriverIO.Config = {
resolveSnapshotPath: (testPath, snapExtension) => testPath + snapExtension,
}
tsConfigPathโ
- Type
String- Default
null
WDIO uses tsx to compile TypeScript files. Your TSConfig is automatically detected from the current working directory but you can specify a custom path here or by setting the TSX_TSCONFIG_PATH environment variable.
See the tsx docs: https://tsx.is/dev-api/node-cli#custom-tsconfig-json-path
displayServerEnabledโ
- Type
Boolean- Default
true
Start a virtual display for the run on Linux when neither DISPLAY nor WAYLAND_DISPLAY is set. Set to false when you run headless or only on a cloud service or remote grid. It only controls whether a display server starts: with only WAYLAND_DISPLAY set, the testrunner still sets XDG_SESSION_TYPE, GDK_BACKEND and ELECTRON_OZONE_PLATFORM_HINT to wayland for the run. See Headless & Display Servers.
displayServerโ
- Type
String- Default
auto- Values
auto | wayland | xvfb
Which display server to start. auto tries Weston and falls back to Xvfb when Weston is missing or fails to start. wayland and xvfb only try that server.
displayServerAutoInstallโ
- Type
Boolean- Default
false
Install a missing display server with the system package manager when no installed one starts.
displayServerAutoInstallModeโ
- Type
String- Default
sudo- Values
root | sudo
How the built-in install runs: root installs only when running as root, sudo uses non-interactive sudo -n when not root, or installs without it when sudo isn't installed.
displayServerAutoInstallCommandโ
- Type
String | String[]
A command to run instead of the built-in install, as-is and without sudo. It only runs with displayServerAutoInstall: true. A string runs in a shell, an array runs without one. With auto, it runs for Weston first, and again for Xvfb only if Weston still isn't available or fails to start, and Xvfb is still missing. Set displayServer to the server it installs to skip the other server's attempt.
displayServerWidthโ
- Type
Number- Default
1920
Screen width of the virtual display in pixels.
displayServerHeightโ
- Type
Number- Default
1080
Screen height of the virtual display in pixels.
displayServerDepthโ
- Type
Number- Default
24
Color depth of the virtual display. Xvfb only.
Hooksโ
The WDIO testrunner allows you to set hooks to be triggered at specific times of the test lifecycle. This allows custom actions (e.g. take screenshot if a test fails).
Every hook has as parameter specific information about the lifecycle (e.g. information about the test suite or test). Read more about all hook properties in our example config.
Note: Some hooks (onPrepare, onWorkerStart, onWorkerEnd and onComplete) are executed in a different process and therefore can not share any global data with the other hooks that live in the worker process.
onPrepareโ
Gets executed once before all workers get launched.
Parameters:
config(object): WebdriverIO configuration objectparam(object[]): list of capabilities details
onWorkerStartโ
Gets executed before a worker process is spawned and can be used to initialize specific service for that worker as well as modify runtime environments in an async fashion.
Parameters:
cid(string): capability id (e.g 0-0)caps(object): containing capabilities for session that will be spawn in the workerspecs(string[]): specs to be run in the worker processargs(object): object that will be merged with the main configuration once worker is initializedexecArgv(string[]): list of string arguments passed to the worker process
onWorkerEndโ
Gets executed just after a worker process has exited.
Parameters:
cid(string): capability id (e.g 0-0)exitCode(number): 0 - success, 1 - fail. A worker that was terminated by a signal reports128+ the signal number instead, e.g.139for aSIGSEGVspecs(string[]): specs to be run in the worker processretries(number): number of spec level retries used as defined in "Add retries on a per-specfile basis"signal(string): signal that terminated the worker, e.g.SIGSEGV, ornullif it exited on its own
beforeSessionโ
Gets executed just before initializing the webdriver session and test framework. It allows you to manipulate configurations depending on the capability or spec.
Parameters:
config(object): WebdriverIO configuration objectcaps(object): containing capabilities for session that will be spawn in the workerspecs(string[]): specs to be run in the worker process
beforeโ
Gets executed before test execution begins. At this point you can access to all global variables like browser. It is the perfect place to define custom commands.
Parameters:
caps(object): containing capabilities for session that will be spawn in the workerspecs(string[]): specs to be run in the worker processbrowser(object): instance of created browser/device session
beforeSuiteโ
Hook that gets executed before the suite starts (in Mocha/Jasmine only)
Parameters:
suite(object): suite details
beforeHookโ
Hook that gets executed before a hook within the suite starts (e.g. runs before calling beforeEach in Mocha)
Parameters:
test(object): test detailscontext(object): test context (represents World object in Cucumber)
afterHookโ
Hook that gets executed after a hook within the suite ends (e.g. runs after calling afterEach in Mocha)
Parameters:
test(object): test detailscontext(object): test context (represents World object in Cucumber)result(object): hook result (containserror,result,duration,passed,retriesproperties)
beforeTestโ
Function to be executed before a test (in Mocha/Jasmine only).
Parameters:
test(object): test detailscontext(object): scope object the test was executed with
beforeCommandโ
Runs before a WebdriverIO command gets executed.
Parameters:
commandName(string): command nameargs(*): arguments that command would receive
afterCommandโ
Runs after a WebdriverIO command gets executed.
Parameters:
commandName(string): command nameargs(*): arguments that command would receiveresult(*): result of the commanderror(Error): error object if any
afterTestโ
Function to be executed after a test (in Mocha/Jasmine) ends.
Parameters:
test(object): test detailscontext(object): scope object the test was executed withresult.error(Error): error object in case the test fails, otherwiseundefinedresult.result(Any): return object of test functionresult.duration(Number): duration of testresult.passed(Boolean): true if test has passed, otherwise falseresult.retries(Object): information about single test related retries as defined for Mocha and Jasmine as well as Cucumber, e.g.{ attempts: 0, limit: 0 }, seeresult(object): hook result (containserror,result,duration,passed,retriesproperties)
afterSuiteโ
Hook that gets executed after the suite has ended (in Mocha/Jasmine only)
Parameters:
suite(object): suite details
afterโ
Gets executed after all tests are done. You still have access to all global variables from the test.
Parameters:
result(number): 0 - test pass, 1 - test failcaps(object): containing capabilities for session that will be spawn in the workerspecs(string[]): specs to be run in the worker process
afterSessionโ
Gets executed right after terminating the webdriver session.
Parameters:
config(object): WebdriverIO configuration objectcaps(object): containing capabilities for session that will be spawn in the workerspecs(string[]): specs to be run in the worker process
onCompleteโ
Gets executed after all workers got shut down and the process is about to exit. An error thrown in the onComplete hook will result in the test run failing.
Parameters:
exitCode(number): 0 - success, 1 - failconfig(object): WebdriverIO configuration objectcaps(object): containing capabilities for session that will be spawn in the workerresult(object): results object containing test results
onReloadโ
Gets executed when a refresh happens.
Parameters:
oldSessionId(string): session ID of the old sessionnewSessionId(string): session ID of the new session
beforeFeatureโ
Runs before a Cucumber Feature.
Parameters:
uri(string): path to feature filefeature(GherkinDocument.IFeature): Cucumber feature object
afterFeatureโ
Runs after a Cucumber Feature.
Parameters:
uri(string): path to feature filefeature(GherkinDocument.IFeature): Cucumber feature object
beforeScenarioโ
Runs before a Cucumber Scenario.
Parameters:
world(ITestCaseHookParameter): world object containing information on pickle and test stepcontext(object): Cucumber World object
afterScenarioโ
Runs after a Cucumber Scenario.
Parameters:
world(ITestCaseHookParameter): world object containing information on pickle and test stepresult(object): results object containing scenario resultsresult.passed(boolean): true if scenario has passedresult.error(string): error stack if scenario failedresult.duration(number): duration of scenario in millisecondscontext(object): Cucumber World object
beforeStepโ
Runs before a Cucumber Step.
Parameters:
step(Pickle.IPickleStep): Cucumber step objectscenario(IPickle): Cucumber scenario objectcontext(object): Cucumber World object
afterStepโ
Runs after a Cucumber Step.
Parameters:
step(Pickle.IPickleStep): Cucumber step objectscenario(IPickle): Cucumber scenario objectresult: (object): results object containing step resultsresult.passed(boolean): true if scenario has passedresult.error(string): error stack if scenario failedresult.duration(number): duration of scenario in millisecondscontext(object): Cucumber World object
beforeAssertionโ
Hook that gets executed before a WebdriverIO assertion happens.
Parameters:
params: assertion informationparams.matcherName(string): name of the matcher that the test called (e.g.toHaveTitle). For an alias, it is the name of the alias (e.g.toBeExisting, nottoExist).params.expectedValue: value that is passed into the matcherparams.options: assertion options
afterAssertionโ
Hook that gets executed after a WebdriverIO assertion happened.
Parameters:
params: assertion informationparams.matcherName(string): name of the matcher that the test called (e.g.toHaveTitle). For an alias, it is the name of the alias (e.g.toBeExisting, nottoExist).params.expectedValue: value that is passed into the matcherparams.options: assertion optionsparams.result(object): result of the matcher, withpass(boolean) andmessage().passistruewhen the value matches the expected value, also with.not: with.not, the assertion passes whenpassisfalse.