
Company News
Meet the Socket Team at RSAC and BSidesSF 2026
Join Socket for live demos, rooftop happy hours, and one-on-one meetings during BSidesSF and RSA 2026 in San Francisco.
Browser automation library with a unified API over Playwright and Selenium WebDriver.
Promod provides a protractor-like lazy element interface — elements are not resolved until an action is performed on them.
npm install promod
Promod requires a browser engine as a peer dependency:
# For Playwright
npm install playwright
# For Selenium WebDriver
npm install selenium-webdriver chromedriver
const { chromium } = require('playwright');
const { playwrightWD } = require('promod');
const { browser, $, $$ } = playwrightWD;
async function main() {
const launched = await chromium.launch({ headless: false });
browser.setClient({ driver: launched });
await browser.get('https://example.com');
const heading = $('h1');
console.log(await heading.getText());
await browser.quitAll();
}
main();
const { Browser, Builder } = require('selenium-webdriver');
require('chromedriver');
const { seleniumWD } = require('promod');
const { browser, $, $$ } = seleniumWD;
async function main() {
const driver = await new Builder().forBrowser(Browser.CHROME).build();
browser.setClient({
driver,
lauchNewInstance: () => new Builder().forBrowser(Browser.CHROME).build(),
});
await browser.get('https://example.com');
const heading = $('h1');
console.log(await heading.getText());
await browser.quit();
}
main();
Promod ships dual builds. Bundlers and Node import will use ESM; require() will use CommonJS.
// ESM
import { playwrightWD, seleniumWD } from 'promod';
// CommonJS
const { playwrightWD, seleniumWD } = require('promod');
All examples work identically with both playwrightWD and seleniumWD.
// CSS (default)
const el = $('.my-class #id a[href*="link"]');
// XPath
const el = $('xpath=.//div[@data-test="id"]/span');
// JavaScript function
const el = $(() => document.querySelector('div > span'));
// Custom selector (query + text filter)
const el = $({ query: 'button', text: 'Submit' });
const el = $({ query: 'button', rg: 'Sub.*' }); // regex filter
| Topic | Link |
|---|---|
| Engine setup | docs/init.md |
| Browser (client) | docs/client.md |
Element ($) | docs/element.md |
Elements ($$) | docs/elements.md |
MIT
FAQs
Library for automation testing
We found that promod demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Join Socket for live demos, rooftop happy hours, and one-on-one meetings during BSidesSF and RSA 2026 in San Francisco.

Research
/Security News
Malicious Packagist packages disguised as Laravel utilities install an encrypted PHP RAT via Composer dependencies, enabling remote access and C2 callbacks.

Research
/Security News
OpenVSX releases of Aqua Trivy 1.8.12 and 1.8.13 contained injected natural-language prompts that abuse local AI coding agents for system inspection and potential data exfiltration.