どのボタンを押すかは AI にまかせ、人は目的を書きます。Web とスマホアプリを、TypeScript の同じ書き方でテストできます。
e2e は TesterArmy が作っているオープンソースの E2E テストフレームワークです(npm パッケージ名 e2e、Apache-2.0)。
これまでは 1 手ずつ「どこを押すか」を書いていました。e2e では 「何をしたいか」を書くと、AI が画面を見て操作します。
あいまいな操作や確認は agent(AI)に、正確に確かめたい所は screen / expect(いつものコード)に書きます。書き味は Playwright に近いです。
act は目的に向けて操作、assert は画面が条件を満たすか判定、extract は画面から値を取り出します。
role やテキストで要素を探して確かめる、確定的なチェックです。AI は呼びません。
agent.act の操作は、後のチェックが通ると録画されます。次からは録画を再生するだけなので、AI の呼び出しは 0 回です。
実行結果にはこう出ます: Cache 4 replayed · 1 handed off · 1 missed
キャッシュされるのは act だけです。assert と extract は毎回 AI が判定します。日時入りのメールアドレスのように毎回変わる値は、unique() で包むと再生できます。
プロジェクトのルート(e2e.config.ts がある所)の .e2e/cache/ に、1 ステップ 1 ファイルの JSON で保存されます。
押した要素の特徴(role / name / test id)、入力した文字、終了時の URL と出現・消滅した要素。
ただし Secret 以外の入力値はそのまま入ります。共有する前に中身を確認します。
e2e init が .e2e/cache/ を .gitignore に入れます。CI は read-only(再生だけ)ですが、中身が空なので CI では毎回 AI が動きます。.gitignore から外してコミットし、PR で記録の差分をレビューします。--strict-cache を付けると、再生できない録画があるときに AI に黙って引き継がせず、テストを失敗させます。app.identity を固定します。キャッシュキーに URL が入るためです。cache: { dir: '...' } で変えられます。npx e2e cache ls / stats / clear で一覧・件数・削除。AI に渡すのは、画面の要素の「役割・名前・テキスト」の要約です。HTML や cookie は渡しません。
パスワードは Secret にすると、AI には名前しか渡らず、入力はテストランナー自身が行います。スクリーンショットは、テキストの要約で足りないときだけ使います。
GitHub Actions などで実行し、@e2e-dev/github で結果を PR にコメントします。
API キー、OpenRouter、Vercel AI Gateway、ChatGPT / Copilot / SuperGrok のサブスク、ローカルモデル。
コーディングエージェント用のスキルと e2e mcp サーバーがあります。
Playwright / Cypress / Selenium / Detox / Maestro 向けの移行ガイドがあり、1 ファイルずつ移せます。
セレクタの保守がつらいとき。「購入できる」など業務の流れを確かめたいとき。Web とスマホを同じ書き方に揃えたいとき。
API と設定は変わりえます。AI ステップはトークン代がかかります(assert は毎回)。厳密な値は expect で確かめます。CLI は匿名の利用統計を送ります(E2E_TELEMETRY_DISABLED=1 で停止)。
Node.js 22.12 以上が必要です。init で Web かモバイルか、使うモデルを選ぶと、設定ファイルとサンプルのテストができます。