import type { Hooks, ServiceEntry } from './Services.js';
import type { ReporterEntry } from './Reporters.js';
export type WebDriverLogTypes = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'silent';
export type Method = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'HEAD' | 'DELETE' | 'OPTIONS' | 'TRACE' | 'get' | 'post' | 'put' | 'patch' | 'head' | 'delete' | 'options' | 'trace';
export interface RequestLibResponse
{
statusCode: number;
body?: Body;
rawBody?: Buffer;
}
export interface ShardOptions {
/**
* Total number of shards
*/
total: number;
/**
* Shard index to start from (starts with index 1)
*/
current: number;
}
/**
* WebdriverIO allows to connect to different WebDriver endpoints by capability
* so these connection options need to be part of capabilities
*/
export interface Connection {
/**
* Protocol to use when communicating with the Selenium standalone server (or driver).
*
* @default 'http'
*/
protocol?: string;
/**
* Host of your WebDriver server.
*
* @default 'localhost'
*/
hostname?: string;
/**
* Port your WebDriver server is on.
*/
port?: number;
/**
* Path to WebDriver endpoint or grid server.
*
* @default '/'
*/
path?: string;
/**
* Query parameters that are propagated to the driver server.
*/
queryParams?: {
[name: string]: string;
};
/**
* Your cloud service username (only works for [Sauce Labs](https://saucelabs.com),
* [Browserstack](https://www.browserstack.com), [TestingBot](https://testingbot.com) or
* [LambdaTest](https://www.lambdatest.com) 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.
*/
user?: string;
/**
* Your cloud service access key or secret key (only works for
* [Sauce Labs](https://saucelabs.com), [Browserstack](https://www.browserstack.com),
* [TestingBot](https://testingbot.com) or [LambdaTest](https://www.lambdatest.com) 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?: string;
}
export interface WebDriver extends Connection {
/**
* Level of logging verbosity.
*
* @default 'info'
*/
logLevel?: WebDriverLogTypes;
/**
* Set specific log levels per logger
* use 'silent' level to disable logger
*/
logLevels?: Record;
/**
* Timeout for any WebDriver request to a driver or grid.
*
* @default 120000
*/
connectionRetryTimeout?: number;
/**
* Count of request retries to the Selenium server.
*
* @default 3
*/
connectionRetryCount?: number;
/**
* Specify custom headers to pass into every request.
*/
headers?: {
[name: string]: string;
};
/**
* Function intercepting [HTTP request options](https://github.com/sindresorhus/got#options) before a WebDriver request is made.
*/
transformRequest?: (requestOptions: RequestInit) => RequestInit;
/**
* Function intercepting HTTP response objects after a WebDriver response has arrived.
*/
transformResponse?: (response: RequestLibResponse, requestOptions: RequestInit) => RequestLibResponse;
/**
* Appium direct connect options (see: https://appiumpro.com/editions/86-connecting-directly-to-appium-hosts-in-distributed-environments)
*/
enableDirectConnect?: boolean;
/**
* Whether it requires SSL certificates to be valid in HTTP/s requests
* for an environment which cannot get process environment well.
*
* @default true
*/
strictSSL?: boolean;
/**
* 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.
*/
outputDir?: string;
/**
* 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.
*/
cacheDir?: string;
/**
* Mask sensitive data in logs by replacing matching string or all captured groups for the provided regular expressions as string
* It replaces the matched string or the capture groups with `**MASKED**`
* Useful for masking sensitive data like cloud provider credentials for example with '/--key=([^ ]*)/'
* Use comma separated strings to use multiple patterns.
*/
maskingPatterns?: string;
}
export type SauceRegions = 'us' | 'eu' | 'us-west-1' | 'us-east-4' | 'eu-central-1' | 'staging';
export interface WebdriverIO extends WebDriver, Pick {
/**
* Define the underlying driver package that executes the WebDriver commands.
* @default 'webdriver'
*/
automationProtocol?: string;
/**
* If running on Sauce Labs, you can choose to run tests between different data centers:
* US or EU. To change your region to EU, add region: 'eu' to your config.
*/
region?: SauceRegions;
/**
* Shorten url command calls by setting a base URL.
*/
baseUrl?: string;
/**
* 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.
* @default 5000
*/
waitforTimeout?: number;
/**
* Default interval for all `waitFor*` commands to check if an expected state (e.g.,
* visibility) has been changed.
* @default 500
*/
waitforInterval?: number;
}
export interface Testrunner extends Hooks, WebdriverIO, WebdriverIO.HookFunctionExtension {
/**
* Type of runner
* - local: every spec file group is spawned in its own local process
* running an independant browser session
* - browser: all spec files are run within the browser
*/
runner?: 'local' | 'browser' | ['browser', WebdriverIO.BrowserRunnerOptions] | ['local', never];
/**
* Project root directory path.
*/
rootDir?: string;
/**
* 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.
*/
specs?: (string | string[])[];
/**
* Exclude specs from test execution.
*/
exclude?: string[];
/**
* An object describing various suites, which you can then specify
* with the --suite option on the wdio CLI.
*/
suites?: Record;
/**
* Maximum number of total parallel running workers.
*/
maxInstances?: number;
/**
* Maximum number of total parallel running workers per capability.
*/
maxInstancesPerCapability?: number;
/**
* 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.:
*
* ```ts
* import { browser, $, $$, expect } from '@wdio/globals'
* ```
*
* Note: WebdriverIO doesn't handle injection of test framework specific
* globals.
*
* @default true
*/
injectGlobals?: boolean;
/**
* 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: Please be aware that
* when using a third party test runner (such as Mocha), additional configuration might
* be required.
*/
bail?: number;
/**
* Set to true if you want to update your snapshots.
*/
updateSnapshots?: 'all' | 'new' | 'none';
/**
* Overrides default snapshot path. For example, to store snapshots next to test files.
* @default __snapshots__ stores snapshot files in __snapshots__ directory next to the test file.
*/
resolveSnapshotPath?: (testPath: string, snapExtension: string) => string;
/**
* If set to true, soft assertions will be automatically asserted at the end of each test.
* @default true
*/
autoAssertOnTestEnd?: boolean;
/**
* The number of retry attempts for an entire specfile when it fails as a whole.
*/
specFileRetries?: number;
/**
* Delay in seconds between the spec file retry attempts
*/
specFileRetriesDelay?: number;
/**
* Whether or not retried spec files should be retried immediately or deferred to the end of the queue
*
* @default true
*/
specFileRetriesDeferred?: boolean;
/**
* 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 Test Specs when running in parallel.
* If set to "true" log outputs will be grouped by test files and printed only when the test is completed.
* By default, it is set to "false" so logs are printed in real-time.
*
* @default false
*/
groupLogsByTestSpec?: boolean;
/**
* Services take over a specific job you don't want to take care of. They enhance
* your test setup with almost no effort.
*/
services?: ServiceEntry[];
/**
* Defines the test framework to be used by the WDIO testrunner.
*/
framework?: string;
/**
* List of reporters to use. A reporter can be either a string, or an array of
* `['reporterName', { }]` where the first element is a string
* with the reporter name and the second element an object with reporter options.
*/
reporters?: ReporterEntry[];
/**
* Determines in which interval the reporter should check if they are synchronised
* if they report their logs asynchronously (e.g. if logs are streamed to a 3rd
* party vendor).
*/
reporterSyncInterval?: number;
/**
* Determines the maximum time reporters have to finish uploading all their logs
* until an error is being thrown by the testrunner.
*/
reporterSyncTimeout?: number;
/**
* Node arguments to specify when launching child processes.
*/
execArgv?: string[];
/**
* A set of environment variables to be injected into the worker process.
*/
runnerEnv?: Record;
/**
* Files to watch when running `wdio` with the `--watch` flag.
*/
filesToWatch?: string[];
/**
* List of cucumber features with line numbers (when using [cucumber framework](https://webdriver.io/docs/frameworks.html#using-cucumber)).
* @default []
*/
cucumberFeaturesWithLineNumbers?: string[];
/**
* Toggle watch mode on/off
*/
watch?: boolean;
/**
* Shard tests and execute only the selected shard. Specify in the one-based form like `{ total: 5, current: 2 }`.
*/
shard?: ShardOptions;
/**
* Enable automatic Xvfb initialization in local runner for headless testing on Linux.
* When disabled, tests should manually call xvfb.init() if needed.
* @default true
*/
autoXvfb?: boolean;
/**
* Enable automatic installation of `xvfb-run` on Linux if missing.
* When false, the runner will warn and continue without installing.
* @default false
*/
xvfbAutoInstall?: boolean;
/**
* Mode for automatic installation when xvfbAutoInstall is true.
* - 'root': install only if running as root (no sudo)
* - 'sudo': install if root or via non-interactive sudo (`sudo -n`) if available
* @default 'root'
*/
xvfbAutoInstallMode?: 'root' | 'sudo';
/**
* Custom command to use for installation instead of built-in package manager detection.
* When provided, this command is executed as-is and overrides the built-in installation logic.
*/
xvfbAutoInstallCommand?: string | string[];
/**
* Number of retry attempts for xvfb process failures.
* @default 3
*/
xvfbMaxRetries?: number;
/**
* Base delay between retries in milliseconds for xvfb process failures.
* Progressive delay will be: xvfbRetryDelay * attemptNumber
* @default 1000
*/
xvfbRetryDelay?: number;
/**
* Mocha specific options
*/
mochaOpts?: WebdriverIO.MochaOpts;
/**
* Jasmine specific options
*/
jasmineOpts?: WebdriverIO.JasmineOpts;
/**
* Cucumber specific options
*/
cucumberOpts?: WebdriverIO.CucumberOpts;
/**
* TSX custom TSConfig path
*/
tsConfigPath?: string;
}
export interface TSConfigPathsOptions {
baseUrl: string;
paths: Record;
mainFields?: string[];
addMatchAll?: boolean;
}
export type Definition = {
[k in keyof T]: {
type: 'string' | 'number' | 'object' | 'boolean' | 'function';
default?: T[k];
required?: boolean;
validate?: (option: T[k], keysToKeep?: (keyof T)[]) => void;
match?: RegExp;
};
};
export interface RunnerStart {
cid: string;
specs: string[];
config: Testrunner;
isMultiremote: boolean;
instanceOptions: Record;
sessionId: string;
capabilities: WebdriverIO.Capabilities;
retry?: number;
failures?: number;
retries?: number;
}
export interface RunnerEnd {
failures: number;
cid: string;
retries: number;
error?: string;
}
//# sourceMappingURL=Options.d.ts.map