🏡 index : quine-global/webdriverio.git

import type { Capabilities, Options, Frameworks } from '@wdio/types'
import type { Options as BSOptions } from 'browserstack-local'

export type MultiRemoteAction = (sessionId: string, browserName?: string) => Promise<unknown>

export type AppConfig = {
    id?: string,
    path?: string,
    custom_id?: string,
    shareable_id?: string
}

export interface AppUploadResponse {
    app_url?: string,
    custom_id?: string,
    shareable_id?: string
}

export interface App {
    app?: string,
    customId?: string
}

export interface TestObservabilityOptions {
    buildName?: string,
    projectName?: string,
    buildTag?: string[],
    user?: string,
    key?: string,
    /**
     * When set to true, hook failures will not influence the test status.
     * Tests will be marked as "passed" if all test steps pass, even if hooks fail.
     * When set to false or not set (default), hook failures will mark tests as "failed".
     * @default false
     */
    ignoreHooksStatus?: boolean
}

export interface BrowserstackOptions extends Options.Testrunner {
    selfHeal?: boolean;
}

export interface BrowserstackConfig {
    /**
     *`buildIdentifier` is a unique id to differentiate every execution that gets appended to
     * buildName. Choose your buildIdentifier format from the available expressions:
     * ${BUILD_NUMBER} (Default): Generates an incremental counter with every execution
     * ${DATE_TIME}: Generates a Timestamp with every execution. Eg. 05-Nov-19:30
     */
    buildIdentifier?: string;
    /**
     * Set this to true to enable BrowserStack Test Observability which will collect test related data
     * (name, hierarchy, status, error stack trace, file name and hierarchy), test commands, etc.
     * and show all the data in a meaningful manner in BrowserStack Test Observability dashboards for faster test debugging and better insights.
     * @default true
     */
    testObservability?: boolean;
    /**
     * Set the Test Observability related config options under this key.
     * For e.g. buildName, projectName, BrowserStack access credentials, etc.
     */
    testObservabilityOptions?: TestObservabilityOptions;
    /**
     * Set this to true to enable BrowserStack Percy which will take screenshots
     * and snapshots for your tests run on Browserstack
     * @default false
     */
    percy?: boolean;
    /**
     * Accepts mode as a string to auto capture screenshots at different execution points
     * Accepted values are auto, click, testcase, screenshot & manual
     */
    percyCaptureMode?: string;
    /**
     * Set the Percy related config options under this key.
    */
    percyOptions?: {
        version?: string,
    };
    /**
    * Set this to true to enable BrowserStack Accessibility Automation which will
    * automically conduct accessibility testing on your pre-existing test builds
    * and generate health reports which can be viewed in the Accessibility dashboard.
    * @default false
    */
    accessibility?: boolean;
    /**
    * Customise the Accessibility-related config options under this key.
    * For e.g. wcagVersion, bestPractice issues, needsReview issues etc.
    */
    accessibilityOptions?: { [key: string]: unknown; };
    /**
     * Set this with app file path present locally on your device or
     * app hashed id returned after uploading app to BrowserStack or
     * custom_id, sharable_id of the uploaded app
     * @default undefined
     */
    app?: string | AppConfig;
    /**
     * Enable routing connections from BrowserStack cloud through your computer.
     * You will also need to set `browserstack.local` to true in browser capabilities.
     * @default false
     */
    browserstackLocal?: boolean;
    /**
     * Kill the BrowserStack Local process on complete, without waiting for the
     * BrowserStack Local stop callback to be called.
     *
     * __This is experimental and should not be used by all.__
     * @default false
     */
    forcedStop?: boolean;
    /**
     * BrowserStack Local options. For more details check out the
     * [`browserstack-local`](https://www.npmjs.com/package/browserstack-local#arguments) docs.
     *
     * @example
     * ```js
     * {
     *   localIdentifier: 'some-identifier'
     * }
     * ```
     * @default {}
     */
    opts?: Partial<BSOptions>
    /**
     * Cucumber only. Set the BrowserStack Automate session name to the Scenario name if only a single Scenario ran.
     * Useful when running in parallel with [wdio-cucumber-parallel-execution](https://github.com/SimitTomar/wdio-cucumber-parallel-execution).
     * @default false
     */
    preferScenarioName?: boolean;
    /**
     * Customize the BrowserStack Automate session name format.
     * @default undefined
     */
    sessionNameFormat?: (
        config: Options.Testrunner,
        capabilities: Capabilities.ResolvedTestrunnerCapabilities,
        suiteTitle: string,
        testTitle?: string
    ) => string
    /**
     * Mocha only. Do not append the test title to the BrowserStack Automate session name.
     * @default false
     */
    sessionNameOmitTestTitle?: boolean;
    /**
     * Mocha only. Prepend the top level suite title to the BrowserStack Automate session name.
     * @default false
     */
    sessionNamePrependTopLevelSuiteTitle?: boolean;
    /**
     * Automatically set the BrowserStack Automate session name.
     * @default true
     */
    setSessionName?: boolean
    /**
     * Automatically set the BrowserStack Automate session status (passed/failed).
     * @default true
     */
    setSessionStatus?: boolean
    /**
     * Set this to true while running tests on the automation grid created using BrowserStack Automate TurboScale
     * to automatically set the session name and status for quick debugging.
     * @default false
    */
    turboScale?: boolean;
    selfHeal?: boolean;
}

/**
 * Observability types
 */
export interface PlatformMeta {
    sessionId?: string,
    browserName?: string,
    browserVersion?: string,
    platformName?: string,
    caps?: WebdriverIO.Capabilities,
    product?: string
}

export interface TestMeta {
    uuid?: string,
    startedAt?: string,
    finishedAt?: string,
    steps?: StepData[],
    feature?: { name: string, path?: string, description: string | null },
    scenario?: { name: string },
    examples?: string[],
    hookType?: string,
    testRunId?: string
}

export interface CurrentRunInfo {
    uuid?: string,
    name?: string,
    test?: Frameworks.Test,
    finished?: boolean
}

export interface TestData {
    uuid?: string,
    type?: string,
    name?: string,
    scope?: string,
    scopes?: string[],
    identifier?: string,
    file_name?: string,
    vc_filepath?: string,
    location?: string,
    started_at?: string,
    finished_at?: string,
    framework?: string,
    body?: TestCodeBody,
    result?: string,
    failure?: Failure[],
    failure_reason?: string,
    failure_type?: string | null,
    retries?: { limit: number, attempts: number },
    duration_in_ms?: number,
    integrations?: { [index: string]: IntegrationObject },
    hook_type?: string,
    hooks?: string[],
    meta?: TestMeta,
    tags?: string[],
    test_run_id?: string,
    product_map?: {}
}

export interface UserConfig {
    buildName?: string,
    projectName?: string,
    buildTag?: string,
    bstackServiceVersion?: string,
    buildIdentifier?: string,
    accessibilityOptions?: { [key: string]: unknown; }
}

export interface UploadType {
    event_type: string,
    hook_run?: TestData,
    test_run?: TestData|CBTData,
    logs?: LogData[]
}

export interface LogData {
    timestamp: string
    kind: 'TEST_LOG'|'TEST_STEP'|'HTTP'|'TEST_SCREENSHOT'
    test_run_uuid?: string
    hook_run_uuid?: string
    message?: string
    level?: string
    http_response?: unknown
}

export interface StdLog extends LogData {
    kind: 'TEST_LOG'
}

export interface ScreenshotLog extends LogData {
    kind: 'TEST_SCREENSHOT'
}

export interface LaunchResponse {
    jwt: string,
    build_hashed_id: string,
    observability?: {
        success: boolean;
        options: {
            allow_screenshots?: boolean;
        },
        errors?: {
            key: string;
            message: string;
        }[];
    },
    accessibility?: {
        success: boolean;
        errors?: {
            key: string;
            message: string;
        }[];
        options: {
            status: string;
            commandsToWrap: {
                scriptsToRun: string[];
                commands: unknown[];
            };
            scripts: {
                name: string;
                command: string;
            }[];
            capabilities: {
                name: string,
                value: unknown
            }[];
        }
    };
}

export interface UserConfigforReporting {
    framework?: string,
    services?: unknown[],
    capabilities?: WebdriverIO.Capabilities,
    env?: {
        'BROWSERSTACK_BUILD': string | undefined,
        'BROWSERSTACK_BUILD_NAME': string | undefined,
        'BUILD_TAG': string | undefined,
    }
}

export interface CredentialsForCrashReportUpload {
    username?: string,
    password?: string
}

export interface IntegrationObject {
    capabilities?: WebdriverIO.Capabilities,
    session_id?: string
    browser?: string
    browser_version?: string
    platform?: string
    product?: string
    platform_version?: string
}

interface TestCodeBody {
    lang: string,
    code?: string | null
}

interface StepData {
    id?: string,
    text?: string,
    keyword?: string,
    started_at?: string,
    finished_at?: string,
    result?: string,
    duration?: number,
    failure?: string
}

interface Failure {
    backtrace: string[]
}

export interface FeatureStatsOverview {
    triggeredCount: number
    sentCount: number
    failedCount: number
}

export interface CBTData {
    uuid: string
    integrations: { [index: string]: IntegrationObject }
}

export interface TOUsageStats {
    enabled: boolean
    manuallySet: boolean
    buildHashedId?: string
    events?: unknown
}

export interface EventProperties {
    sdkRunId: string
    testhub_uuid?: string
    language_framework: string
    referrer: string
    language: string
    languageVersion: string
    buildName: string
    buildIdentifier: string
    os: string
    hostname: string
    productMap: { [key: string]: boolean }
    product: string[]
    framework?: string
    pollingTimeout?: string,
    productUsage?: {
        testObservability: {
            events: {
                buildEvents: {
                    finished: {
                        status: string
                        error?: string
                        stoppedFrom: string
                    }
                }
            }
        }
    }
}

export interface FunnelData {
    userName?: string
    accessKey?: string
    event_type?: string,
    detectedFramework?: string,
    event_properties: EventProperties
}