StackMap
Subscribe

browser-use vs e2e

The standard library for letting AI agents drive a real browser — click, type, fill forms and complete tasks from a natural-language goal. 100k+ stars, Python. — versus — Agentic e2e testing for web and mobile: describe a goal, an agent drives the app, locators assert the result. Verified agent steps replay with zero model calls until the UI changes.

The curated verdict

Both put an LLM agent in front of a browser to complete a natural-language goal. browser-use is a general automation library you script yourself; e2e wraps the same loop in a test runner with assertions, a replay cache and PR reporting — and covers mobile too.

browser-usee2e
Stars120k13k
Forks13k693
LanguagePythonTypeScript
LicenseMITApache-2.0
Last activityyesterdayyesterday
Topicsagents, webevals, web
Curated connections173

browser-use — the curator's take

When the task lives behind login walls, forms and JavaScript — 'book this', 'apply to that', 'put these in my cart' — this is the default tool: it feeds the agent a cleaned DOM, executes its clicks/typing, and recovers from the endless weirdness of real websites. Install-as-skill support means Claude Code/Cursor agents pick it up in one prompt. NOT for bulk data extraction — an LLM driving a browser is the slowest, most expensive way to scrape a thousand pages (use a crawler); and treat any agent-with-a-browser as having the keys to whatever it's logged into — sandbox accordingly.

e2e — the curator's take

Pick it when Playwright selectors keep rotting and you want one runner for web (Chromium/Firefox/WebKit) and iOS/Android, with agent steps only where intent beats selectors. The record-then-replay cache is the real feature: once a later assertion verifies an agent step, CI reruns cost no model calls until the app changes. Bring your own key, local model, Claude Code/Codex via ACP, or a decision-model executor (Jev-style) for cheap bounded actions. Skip it if you need a stable API today (pre-1.0, config still moves), if you are testing an LLM's outputs rather than an app (use an eval framework), or if your suite is already deterministic Playwright that never flakes.