Jump to content

Connect SuperML | Leeroopedia MCP: Equip your AI agents with best practices, code verification, and debugging knowledge. Powered by Leeroo — building Organizational Superintelligence. Contact us at founders@leeroo.com.

Implementation:Webdriverio Webdriverio BrowserStack Util

From Leeroopedia
Knowledge Sources
Domains BrowserStack, Utilities
Last Updated 2026-02-12 00:00 GMT

Overview

The BrowserStack Util module provides comprehensive utility functions for capabilities management, git metadata retrieval, accessibility scanning, CI detection, API interactions, and general-purpose helpers used across the entire BrowserStack service.

Description

This large utility module (1901 lines) contains functions organized into several categories: (1) Capability helpers like getBrowserDescription, getBrowserCapabilities, isBrowserstackCapability, and isMultiRemoteCaps for extracting and validating browser capabilities; (2) API functions like launchTestSession and stopBuildUpstream for communicating with BrowserStack's Test Reporting and Analytics API; (3) Git metadata via getGitMetaData using git-repo-info and gitconfiglocal; (4) Accessibility helpers like performA11yScan, getA11yResults, getA11yResultsSummary, and validateCapsWithA11y; (5) CI detection through getCiInfo supporting 20+ CI providers; (6) Error handling wrappers like o11yClassErrorHandler and o11yErrorHandler for wrapping classes/functions with crash reporting; (7) String/object utilities like removeAnsiColors, isUndefined, isTrue, mergeDeep, and generateHashCodeFromFields.

Usage

Import individual functions as needed. These utilities are used by virtually every other module in the BrowserStack service package.

Code Reference

Source Location

Signature

// Capability functions
export function getBrowserDescription(cap: WebdriverIO.Capabilities): string
export function getBrowserCapabilities(browser: WebdriverIO.Browser | WebdriverIO.MultiRemoteBrowser, caps?: Capabilities.ResolvedTestrunnerCapabilities, browserName?: string): WebdriverIO.Capabilities
export function isBrowserstackCapability(cap?: WebdriverIO.Capabilities): boolean
export function isBrowserstackSession(browser?: WebdriverIO.Browser | WebdriverIO.MultiRemoteBrowser): boolean
export function isMultiRemoteCaps(capabilities: Capabilities.TestrunnerCapabilities): boolean

// API functions
export const launchTestSession: (options, config, bsConfig, bStackConfig, accessibilityAutomation) => Promise<LaunchResponse | null>
export const stopBuildUpstream: () => Promise<{ status: string; message: string }>

// Git metadata
export async function getGitMetaData(): Promise<GitMetaData | undefined>

// Accessibility
export const performA11yScan: (isAppAutomate, browser, isBrowserStackSession?, isAccessibility?, commandName?) => Promise<Record<string, unknown> | undefined>
export const getA11yResults: (isAppAutomate, browser, isBrowserStackSession?, isAccessibility?) => Promise<Array<Record<string, unknown>>>
export const getA11yResultsSummary: (isAppAutomate, browser, isBrowserStackSession?, isAccessibility?) => Promise<Record<string, unknown>>

// CI detection
export function getCiInfo(): { name: string; build_url: string | null; job_name: string | null; build_number: string | null } | null

// String utilities
export function removeAnsiColors(message: string): string
export function isUndefined(value: unknown): boolean
export function isTrue(value?: unknown): boolean

// Error handling wrappers
export function o11yClassErrorHandler<T extends ClassType>(errorClass: T): T
export function o11yErrorHandler(fn: Function): Function

Import

import {
    getBrowserDescription,
    getBrowserCapabilities,
    isBrowserstackCapability,
    isBrowserstackSession,
    launchTestSession,
    getGitMetaData,
    performA11yScan,
    getA11yResults,
    removeAnsiColors,
    isMultiRemoteCaps,
    o11yClassErrorHandler,
    getCiInfo
} from './util.js'

I/O Contract

Inputs

Name Type Required Description
cap WebdriverIO.Capabilities Varies Browser capabilities for description, validation, or manipulation
browser WebdriverIO.MultiRemoteBrowser Varies Browser instance for session detection and accessibility operations
options BrowserstackConfig & Options.Testrunner Varies Service options for API calls and configuration extraction
config Options.Testrunner Varies WebdriverIO config for user/key extraction and infrastructure detection

Outputs

Name Type Description
Browser description string Human-readable browser string from capabilities (e.g., "chrome 120 Windows 11")
GitMetaData GitMetaData Git repository info including sha, branch, remotes, commit message
LaunchResponse LaunchResponse API response with JWT, build ID, observability/accessibility configs
CI info null Detected CI provider info (Jenkins, GitHub Actions, CircleCI, etc.)
A11y results Record Accessibility scan results or summary from BrowserStack

Usage Examples

Getting browser description

const caps = getBrowserCapabilities(browser, this._caps, browserName)
const browserString = getBrowserDescription(caps)
// Output: "chrome 120 Windows 11"

Launching a test session

const response = await launchTestSession(
    this._options,
    this._config,
    { projectName, buildName, buildTag, bstackServiceVersion, buildIdentifier },
    this.browserStackConfig,
    this._accessibilityAutomation
)

Detecting CI environment

const ciInfo = getCiInfo()
if (ciInfo !== null && ciInfo.build_number) {
    console.log(`Running on ${ciInfo.name}, build #${ciInfo.build_number}`)
}

Related Pages

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment