@selenium/atoms

Browser injection atoms for Selenium WebDriver, published as TypeScript-typed ES modules.

Atoms are small, self-contained functions that run inside the page under automation. They encode the browser-compatibility behaviour that the W3C WebDriver specification leaves to implementations — what “displayed” means, how getAttribute reconciles attributes with IDL properties, and how a locator resolves to elements. Selenium‘s own language bindings inject the same logic, compiled to an IIFE; this package exposes it to other JavaScript tooling that needs to match Selenium’s behaviour exactly.

Installation

npm install @selenium/atoms

This is an ES-module-only package and requires Node.js 18 or newer.

Usage

import { getAttribute, findElements, isDisplayed } from '@selenium/atoms'

Each atom is also available as its own subpath export, so a bundler can tree shake down to just the one you need:

import getAttribute from '@selenium/atoms/get-attribute'
import findElements from '@selenium/atoms/find-elements'
import isDisplayed from '@selenium/atoms/is-displayed'

API

getAttribute(element: Element, attribute: string): string | null
findElements(target: Record<string, unknown>, root?: Document | Element | ShadowRoot): Element[]
isDisplayed(element: Element, ignoreOpacity?: boolean): boolean

findElements takes a locator object keyed by strategy, matching the WebDriver wire format:

findElements({ css: '.result' })
findElements({ 'link text': 'Continue' }, shadowRoot)

The atoms operate on the DOM of the document they are evaluated in, so they must run in the page rather than in the driver process — for example via Runtime.evaluate over CDP, script.callFunction over WebDriver BiDi, or Selenium's own executeScript.

Versioning

This package is released from the Selenium monorepo and shares its version with the selenium-webdriver npm package.

License

Apache-2.0. See LICENSE and NOTICE.