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.
npm install @selenium/atoms
This is an ES-module-only package and requires Node.js 18 or newer.
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'
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.
This package is released from the Selenium monorepo and shares its version with the selenium-webdriver npm package.
Apache-2.0. See LICENSE and NOTICE.