Implementation:Webdriverio Webdriverio BrowserStack Util
| 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
- Repository: Webdriverio_Webdriverio
- File: packages/wdio-browserstack-service/src/util.ts
- Lines: 1-1901
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}`)
}