Implementation:Webdriverio Webdriverio EnvDetector
| Knowledge Sources | |
|---|---|
| Domains | Environment_Detection, Protocol_Support |
| Last Updated | 2026-02-12 00:00 GMT |
Overview
Detects WebDriver session environment characteristics such as protocol compliance, browser type, mobile platform, and vendor-specific features based on session capabilities.
Description
The EnvDetector module inspects capability objects returned from WebDriver sessions to determine the runtime environment. It provides functions like isW3C to check W3C protocol compliance, isBidi to detect WebDriver BiDi support via the presence of a webSocketUrl capability, and composite detectors that return a full environment flags object. Internal helpers detect specific browsers (Chrome, Firefox, Edge), mobile platforms (iOS, Android), automation names (Windows, Mac), and cloud providers (Sauce Labs with extended debugging). The module distinguishes between pre-session detection (capabilitiesEnvironmentDetector) and post-session detection (sessionEnvironmentDetector), where the latter can additionally determine Selenium Standalone and W3C compliance.
Usage
Use capabilitiesEnvironmentDetector before session creation to determine browser and platform characteristics from user-provided capabilities. Use sessionEnvironmentDetector after the session is created to inspect the resolved capabilities returned by the driver, including W3C compliance and Selenium Standalone detection.
Code Reference
Source Location
- Repository: Webdriverio_Webdriverio
- File: packages/wdio-utils/src/envDetector.ts
- Lines: 15-366
Signature
export function isW3C(capabilities?: WebdriverIO.Capabilities): boolean
export function isBidi(capabilities: WebdriverIO.Capabilities): boolean
export function capabilitiesEnvironmentDetector(capabilities: WebdriverIO.Capabilities): {
isChrome: boolean;
isFirefox: boolean;
isMobile: boolean;
isIOS: boolean;
isAndroid: boolean;
isSauce: boolean;
isBidi: boolean;
isChromium: boolean;
isWindowsApp: boolean;
isMacApp: boolean;
}
export function sessionEnvironmentDetector(params: {
capabilities: WebdriverIO.Capabilities;
requestedCapabilities: Capabilities.RequestedStandaloneCapabilities;
}): {
isW3C: boolean;
isChrome: boolean;
isFirefox: boolean;
isMobile: boolean;
isIOS: boolean;
isAndroid: boolean;
isSauce: boolean;
isSeleniumStandalone: boolean;
isBidi: boolean;
isChromium: boolean;
isWindowsApp: boolean;
isMacApp: boolean;
}
Import
import { sessionEnvironmentDetector, capabilitiesEnvironmentDetector } from '@wdio/utils'
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| capabilities | WebdriverIO.Capabilities | Yes (optional for isW3C) | The resolved or requested session capabilities object containing browser name, platform, vendor extensions, etc. |
| requestedCapabilities | Capabilities.RequestedStandaloneCapabilities | Yes (sessionEnvironmentDetector only) | The original capabilities sent in the session request, used to detect Sauce Labs extended debugging. |
Outputs
| Name | Type | Description |
|---|---|---|
| isW3C | boolean | True if the session follows the W3C WebDriver protocol. |
| isChrome | boolean | True if the session is running Chrome (has goog:chromeOptions). |
| isFirefox | boolean | True if the session is running Firefox (has moz: capabilities). |
| isMobile | boolean | True if the session is on a mobile device (iOS/Android platform or mobile-specific capabilities). |
| isIOS | boolean | True if the session is running on an iOS device. |
| isAndroid | boolean | True if the session is running on an Android device. |
| isSauce | boolean | True if Sauce Labs extended debugging is enabled. |
| isSeleniumStandalone | boolean | True if the session uses Selenium Standalone server (session-level only). |
| isBidi | boolean | True if the session supports WebDriver BiDi (webSocketUrl present). |
| isChromium | boolean | True if the session is a Chromium-based browser (Chrome or Edge). |
| isWindowsApp | boolean | True if automationName matches "windows". |
| isMacApp | boolean | True if automationName matches "mac2". |
Usage Examples
import { sessionEnvironmentDetector, capabilitiesEnvironmentDetector } from '@wdio/utils'
// Before session creation
const preSessionFlags = capabilitiesEnvironmentDetector({
browserName: 'chrome',
'goog:chromeOptions': {}
})
console.log(preSessionFlags.isChrome) // true
console.log(preSessionFlags.isMobile) // false
// After session creation with resolved capabilities
const postSessionFlags = sessionEnvironmentDetector({
capabilities: {
browserName: 'chrome',
browserVersion: '120.0.6099.71',
platformName: 'linux',
'goog:chromeOptions': { debuggerAddress: 'localhost:9222' },
setWindowRect: true,
webSocketUrl: 'ws://localhost:9222/session/abc123'
},
requestedCapabilities: {
browserName: 'chrome'
}
})
console.log(postSessionFlags.isW3C) // true
console.log(postSessionFlags.isBidi) // true
console.log(postSessionFlags.isChrome) // true