import type { Testrunner as TestrunnerOptions, WebdriverIO as WebdriverIOOptions } from './Options.js'; import type { RequestedStandaloneCapabilities, RequestedMultiremoteCapabilities, TestrunnerCapabilities, ResolvedTestrunnerCapabilities } from './Capabilities.js'; import type { Suite, Test, TestResult } from './Frameworks.js'; import type { Worker } from './Workers.js'; export interface RunnerInstance { initialize(): Promise; shutdown(): Promise; closeSession?: (cid: number) => Promise; getWorkerCount(): number; run(args: any): Worker; workerPool: any; browserPool: any; } export interface RunnerClass { new (options: WebdriverIO.BrowserRunnerOptions, config: Omit): RunnerInstance; } export interface RunnerPlugin extends RunnerClass { default: RunnerClass; launcher?: RunnerClass; } export interface ServiceOption { [key: string]: any; } export interface ServiceClass { new (options: WebdriverIO.ServiceOption, capabilities: ResolvedTestrunnerCapabilities, config: WebdriverIOOptions): ServiceInstance; } export interface ServicePlugin extends ServiceClass { default: ServiceClass; launcher?: ServiceClass; } export interface ServiceInstance extends HookFunctions { options?: Record; capabilities?: WebdriverIO.Capabilities; config?: TestrunnerOptions; } interface AssertionHookParams { /** * name of the matcher, e.g. `toHaveText` or `toBeClickable` */ matcherName: string; /** * Value that the user has passed in * * @example * ``` * expect(el).toBeClickable() // expectedValue is undefined * expect(el).toHaveText('foo') // expectedValue is `'foo'` * expect(el).toHaveAttribute('attr', 'value', { ... }) // expectedValue is `['attr', 'value]` * ``` */ expectedValue?: any; /** * Options that the user has passed in, e.g. `expect(el).toHaveText('foo', { ignoreCase: true })` -> `{ ignoreCase: true }` */ options: object; } interface AfterAssertionHookParams extends AssertionHookParams { result: { message: () => string; result: boolean; }; } export type ServiceEntry = ( /** * e.g. `services: ['@wdio/sauce-service']` */ string | /** * e.g. `services: [{ onPrepare: () => { ... } }]` */ HookFunctions | /** * e.g. `services: [CustomClass]` */ ServiceClass | /** * e.g. `services: [['@wdio/sauce-service', { ... }]]` * * Note: we use `WebdriverIO.ServiceOptions` rather than referencing the * interface directly to allow other services to extend the service option * with theirs */ [ string, WebdriverIO.ServiceOption ] | /** * e.g. `services: [[CustomClass, { ... }]]` * * Note: we use `WebdriverIO.ServiceOptions` rather than referencing the * interface directly to allow other services to extend the service option * with theirs */ [ ServiceClass, WebdriverIO.ServiceOption ]); export type Hooks = { [k in keyof HookFunctions]: HookFunctions[k] | NonNullable[]; }; export interface HookFunctions { /** * Gets executed once before all workers get launched. * @param config wdio configuration object * @param capabilities list of capabilities details */ onPrepare?(config: TestrunnerOptions, capabilities: TestrunnerCapabilities): unknown | Promise; /** * 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. * @param exitCode runner exit code: 0 - success, 1 - fail * @param config wdio configuration object * @param capabilities list of capabilities details * @param results test results */ onComplete?(exitCode: number, config: Omit, capabilities: TestrunnerCapabilities, results: any): unknown | Promise; /** * 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. * @param cid capability id (e.g 0-0) * @param capabilities object containing capabilities for session that will be spawn in the worker * @param specs specs to be run in the worker process * @param args object that will be merged with the main configuration once worker is initialized * @param execArgv list of string arguments passed to the worker process */ onWorkerStart?(cid: string, capabilities: WebdriverIO.Capabilities, specs: string[], args: TestrunnerOptions, execArgv: string[]): unknown | Promise; /** * Gets executed just after a worker process has exited. * @param {string} cid capability id (e.g 0-0) * @param {number} exitCode 0 - success, 1 - fail * @param {object} specs specs to be run in the worker process * @param {number} retries number of retries used */ onWorkerEnd?(cid: string, exitCode: number, specs: string[], retries: number): unknown | Promise; /** * 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. * @param capabilities list of capabilities details * @param specs specs to be run in the worker process * @param browser instance of created browser/device session */ before?(capabilities: RequestedStandaloneCapabilities | RequestedMultiremoteCapabilities, specs: string[], browser: any): unknown | Promise; /** * Gets executed after all tests are done. You still have access to all global variables from * the test. * @param result number of total failing tests * @param capabilities list of capabilities details * @param specs list of spec file paths that are to be run */ after?(result: number, capabilities: RequestedStandaloneCapabilities | RequestedMultiremoteCapabilities, specs: string[]): unknown | Promise; /** * Gets executed just before initialising the webdriver session and test framework. It allows you * to manipulate configurations depending on the capability or spec. * @param config wdio configuration object * @param capabilities list of capabilities details * @param specs list of spec file paths that are to be run * @param cid worker id (e.g. 0-0) */ beforeSession?(config: Omit, capabilities: RequestedStandaloneCapabilities | RequestedMultiremoteCapabilities, specs: string[], cid: string): unknown | Promise; /** * Gets executed right after terminating the webdriver session. * @param config wdio configuration object * @param capabilities list of capabilities details * @param specs list of spec file paths that are to be run */ afterSession?(config: TestrunnerOptions, capabilities: WebdriverIO.Capabilities, specs: string[]): unknown | Promise; /** * Gets executed when a refresh happens. * @param oldSessionId session id of old session * @param newSessionId session id of new session */ onReload?(oldSessionId: string, newSessionId: string): unknown | Promise; /** * Hook that gets executed before the suite starts. * @param suite suite details */ beforeSuite?(suite: Suite): unknown | Promise; /** * Hook that gets executed after the suite has ended * @param suite suite details */ afterSuite?(suite: Suite): unknown | Promise; /** * Function to be executed before a test (in Mocha/Jasmine only) * @param {object} test test object * @param {object} context scope object the test was executed with */ beforeTest?(test: Test, context: any): unknown | Promise; /** * Function to be executed after a test (in Mocha/Jasmine only) * @param {object} test test object * @param {object} context scope object the test was executed with * @param {Error} result.error error object in case the test fails, otherwise `undefined` * @param {*} result.result return object of test function * @param {number} result.duration duration of test * @param {boolean} result.passed true if test has passed, otherwise false * @param {object} result.retries information about spec related retries, e.g. `{ attempts: 0, limit: 0 }` */ afterTest?(test: Test, context: any, result: TestResult): unknown | Promise; /** * Hook that gets executed _before_ a hook within the suite starts (e.g. runs before calling * beforeEach in Mocha). `stepData` and `world` are Cucumber framework specific properties. * @param test details to current running test (represents step in Cucumber) * @param context context to current running test (represents World object in Cucumber) * @param hookName name of the hook */ beforeHook?(test: any, context: any, hookName: string): unknown | Promise; /** * Hook that gets executed _after_ a hook within the suite ends (e.g. runs after calling * afterEach in Mocha). `stepData` and `world` are Cucumber framework specific. * @param test details to current running test (represents step in Cucumber) * @param context context to current running test (represents World object in Cucumber) * @param result test result * @param hookName name of the hook */ afterHook?(test: Test, context: any, result: TestResult, hookName: string): unknown | Promise; /** * Runs before a WebdriverIO command gets executed. * @param commandName command name * @param args arguments that command would receive */ beforeCommand?(commandName: string, args: any[]): unknown | Promise; /** * Runs after a WebdriverIO command gets executed * @param commandName command name * @param args arguments that command would receive * @param result result of the command * @param error error in case something went wrong */ afterCommand?(commandName: string, args: any[], result: any, error?: Error): unknown | Promise; /** * Runs before a WebdriverIO assertion library makes an assertion. * @param commandName command name * @param args arguments that command would receive */ beforeAssertion?(params: AssertionHookParams): unknown | Promise; /** * Runs after a WebdriverIO command gets executed * @param commandName command name * @param args arguments that command would receive * @param result result of the command * @param error error in case something went wrong */ afterAssertion?(params: AfterAssertionHookParams): unknown | Promise; } export {}; //# sourceMappingURL=Services.d.ts.map