🏡 index : quine-global/webdriverio.git

import { UNICODE_CHARACTERS, HOOK_DEFINITION } from '@wdio/utils'
import type { Options, Capabilities } from '@wdio/types'

import type { RestoreMap } from './types.js'

export const WDIO_DEFAULTS: Options.Definition<Capabilities.WebdriverIOConfig> = {
    /**
     * allows to specify automation protocol
     */
    automationProtocol: {
        type: 'string',
        default: 'webdriver',
        validate: (param: string) => {
            /**
             * path when proxy is used for browser testing
             */
            if (typeof param !== 'string') {
                throw new Error('automationProtocol should be a string')
            }

            /**
             * skip following check if user uses Node.js v20.5 or below
             */
            if (typeof import.meta.resolve !== 'function') {
                return
            }

            try {
                import.meta.resolve(param)
            } catch (err) {
                const error = err instanceof Error ? err : new Error('unknown error')
                throw new Error(`Couldn't find automation protocol "${param}": ${error.message}`)
            }
        }
    },
    /**
     * capabilities of WebDriver sessions
     */
    capabilities: {
        type: 'object',
        validate: (param: Capabilities.WebdriverIOConfig['capabilities']) => {
            /**
             * should be an object
             */
            if (typeof param === 'object') {
                return true
            }

            throw new Error('the "capabilities" options needs to be an object or a list of objects')
        },
        required: true
    },
    /**
     * Shorten navigateTo command calls by setting a base url
     */
    baseUrl: {
        type: 'string'
    },
    /**
     * Default interval for all waitFor* commands
     */
    waitforInterval: {
        type: 'number',
        default: 100
    },
    /**
     * Default timeout for all waitFor* commands
     */
    waitforTimeout: {
        type: 'number',
        default: 5000
    },
    /**
     * Hooks
     */
    onReload: HOOK_DEFINITION,
    beforeCommand: HOOK_DEFINITION,
    afterCommand: HOOK_DEFINITION
}

export const W3C_SELECTOR_STRATEGIES = ['css selector', 'link text', 'partial link text', 'tag name', 'xpath']

export const DRIVER_DEFAULT_ENDPOINT = {
    method: 'GET',
    host: 'localhost',
    port: 4444,
    path: '/status'
}

export const FF_REMOTE_DEBUG_ARG = '-remote-debugging-port'
export const DEEP_SELECTOR = '>>>'
export const ARIA_SELECTOR = 'aria/'

export const ERROR_REASON = [
    'Failed', 'Aborted', 'TimedOut', 'AccessDenied', 'ConnectionClosed',
    'ConnectionReset', 'ConnectionRefused', 'ConnectionAborted',
    'ConnectionFailed', 'NameNotResolved', 'InternetDisconnected',
    'AddressUnreachable', 'BlockedByClient', 'BlockedByResponse'
]

/**
 * store all preload scripts in a map (per instance) so that we can easily remove them
 */
export const restoreFunctions = new Map<WebdriverIO.Browser, RestoreMap>()

/**
 * Special Characters
 */
export const Key = {
    /**
     * Special control key that works cross browser for Mac, where it's the command key, and for
     * Windows or Linux, where it is the control key.
     */
    Ctrl: 'WDIO_CONTROL',
    NULL: UNICODE_CHARACTERS.NULL,
    Cancel: UNICODE_CHARACTERS.Cancel,
    Help: UNICODE_CHARACTERS.Help,
    Backspace: UNICODE_CHARACTERS.Backspace,
    Tab: UNICODE_CHARACTERS.Tab,
    Clear: UNICODE_CHARACTERS.Clear,
    Return: UNICODE_CHARACTERS.Return,
    Enter: UNICODE_CHARACTERS.Enter,
    Shift: UNICODE_CHARACTERS.Shift,
    Control: UNICODE_CHARACTERS.Control,
    Alt: UNICODE_CHARACTERS.Alt,
    Pause: UNICODE_CHARACTERS.Pause,
    Escape: UNICODE_CHARACTERS.Escape,
    Space: UNICODE_CHARACTERS.Space,
    PageUp: UNICODE_CHARACTERS.PageUp,
    PageDown: UNICODE_CHARACTERS.PageDown,
    End: UNICODE_CHARACTERS.End,
    Home: UNICODE_CHARACTERS.Home,
    ArrowLeft: UNICODE_CHARACTERS.ArrowLeft,
    ArrowUp: UNICODE_CHARACTERS.ArrowUp,
    ArrowRight: UNICODE_CHARACTERS.ArrowRight,
    ArrowDown: UNICODE_CHARACTERS.ArrowDown,
    Insert: UNICODE_CHARACTERS.Insert,
    Delete: UNICODE_CHARACTERS.Delete,
    Semicolon: UNICODE_CHARACTERS.Semicolon,
    Equals: UNICODE_CHARACTERS.Equals,
    Numpad0: UNICODE_CHARACTERS['Numpad 0'],
    Numpad1: UNICODE_CHARACTERS['Numpad 1'],
    Numpad2: UNICODE_CHARACTERS['Numpad 2'],
    Numpad3: UNICODE_CHARACTERS['Numpad 3'],
    Numpad4: UNICODE_CHARACTERS['Numpad 4'],
    Numpad5: UNICODE_CHARACTERS['Numpad 5'],
    Numpad6: UNICODE_CHARACTERS['Numpad 6'],
    Numpad7: UNICODE_CHARACTERS['Numpad 7'],
    Numpad8: UNICODE_CHARACTERS['Numpad 8'],
    Numpad9: UNICODE_CHARACTERS['Numpad 9'],
    Multiply: UNICODE_CHARACTERS.Multiply,
    Add: UNICODE_CHARACTERS.Add,
    Separator: UNICODE_CHARACTERS.Separator,
    Subtract: UNICODE_CHARACTERS.Subtract,
    Decimal: UNICODE_CHARACTERS.Decimal,
    Divide: UNICODE_CHARACTERS.Divide,
    F1: UNICODE_CHARACTERS.F1,
    F2: UNICODE_CHARACTERS.F2,
    F3: UNICODE_CHARACTERS.F3,
    F4: UNICODE_CHARACTERS.F4,
    F5: UNICODE_CHARACTERS.F5,
    F6: UNICODE_CHARACTERS.F6,
    F7: UNICODE_CHARACTERS.F7,
    F8: UNICODE_CHARACTERS.F8,
    F9: UNICODE_CHARACTERS.F9,
    F10: UNICODE_CHARACTERS.F10,
    F11: UNICODE_CHARACTERS.F11,
    F12: UNICODE_CHARACTERS.F12,
    Command: UNICODE_CHARACTERS.Command,
    ZenkakuHankaku: UNICODE_CHARACTERS.ZenkakuHankaku
} as const