Browsers and E2E

Chekhov drives real Chromium, Firefox, and WebKit. Install matching browser binaries for the pinned Playwright npm version, then opt into live suites with an E2E gate.

Install browsers

From the Chekhov repo (or any consumer that has scripts/install-browsers.sh):

./scripts/install-browsers.sh          # or: sbt pwInstall / npm run playwright:install

Locally, browsers land in Playwright’s OS cache (~/.cache/ms-playwright on Linux, ~/Library/Caches/ms-playwright on macOS). The install script clears Cursor sandbox PLAYWRIGHT_BROWSERS_PATH overrides so install and run agree.

zipx CI sets PLAYWRIGHT_BROWSERS_PATH to target/ms-playwright so browsers ride the LocalDir sbt actions/cache key (same epoch / run_id restore chain as compile products).

The E2E gate

Many suites skip unless you ask for live browsers:

export CHEKHOV_E2E=1
# or: sbt -Dchekhov.e2e=1 …

Without the gate, sbt test / testFull stay green on machines without browsers (unit and protocol coverage still run). With the gate, driver dogfood, JSEnv smoke, and chekhov-dom live suites execute.

This repo’s Verify job already exports CHEKHOV_E2E=1.

Pick an engine

Defaults come from ChekhovConfig (-Dchekhov.browser / CHEKHOV_BROWSER, headless flags, artifactsDir under target/chekhov):

ChekhovConfig(browser = ChekhovBrowser.Firefox, headless = true)

sbt-chekhov mirrors that with chekhovBrowser / chekhovHeadless settings. Multi-engine suites can fan out with ChekhovSuite.forBrowsers(ChekhovBrowser.Chromium, …).

(
  ChekhovBrowser.fromString("chromium"),
  ChekhovBrowser.fromString("firefox"),
  ChekhovBrowser.fromString("webkit"),
  ChekhovBrowser.fromString("netscape"),
)
(Some(Chromium),Some(Firefox),Some(WebKit),None)