- Puppeteer バージョン 23 から Firefox を正式にサポートし、Chrome と Firefox で自動化およびエンドツーエンドテストを簡単に実行できるようになった
const browser = await puppeteer.launch({browser: "firefox"});
- Chrome と同様に、Puppeteer は Firefox の最新安定版をダウンロードして実行できる
- Firefox サポートは、Firefox 専用の自動化プロトコルではなく、現在 Gecko と Chromium に実装されているクロスブラウザープロトコルである WebDriver BiDi を基盤としている
- クロスブラウザープロトコルを使うことで、今後さらに多くのブラウザーを容易にサポートできる
技術的背景
- 最近まで、ブラウザー自動化を望む人には 2 つの主要な選択肢があった
- W3C WebDriver API を使う
- ブラウザーごとの専用 API を使う(Chrome DevTools Protocol、Firefox Remote Debugging Protocol など)
- どちらの選択肢にも大きなトレードオフがある
- 従来の WebDriver API は HTTP ベースで、ブラウザーにコマンドを送り、応答を待つモデルを持つ
- これはページを読み込み、要素が表示されているかを確認するような自動化シナリオにはうまく機能するが、ブラウザーからイベントを受け取ったり、複数のコマンドを同時に実行したりするような高度なユースケースには適していない
- ブラウザーごとの API は通常、ブラウザー内の開発者ツールの複雑なユースケースを支えるよう設計されているため、WebDriver よりはるかに進んだ機能セットを提供する
- そのため、ブラウザー自動化クライアントは、単一のプロトコルを使って複数のブラウザーをサポートしつつ機能セットを限定するか、より豊富な機能セットを提供する代わりに、サポート対象ブラウザーごとに個別実装を行うかを選ばなければならなかった
- これは、優れたクロスブラウザー自動化を実現するためのコストと複雑さを増大させていた
- LSP(Language Server Protocol)が開発される前の状況と似ていた
- WebDriver BiDi は、これまでブラウザー固有のプロトコルに限定されていた自動化機能セットを標準化されたプロトコルへと持ち込み、あらゆるブラウザーと自動化ツールで利用できるようにする
Firefox の実験的な CDP(Chrome DevTools Protocol)サポートの削除
- 初期のクロスブラウザーテスト改善の取り組みの一環として、テスト用途を支えるのに必要ないくつかのコマンドとイベントに限定した CDP の部分実装を提供していた
- しかし、これがクロスブラウザー自動化の進むべき方向ではないことが明らかになり、この取り組みは中止された
- その結果、保守されないままとなり、サイト分離のような現代的な Firefox 機能とも互換性がない
- そのため、2024 年末にサポートが削除される予定
今後の計画
- 依然としてサポートされていない API がいくつかある
- CDP 専用 API
- 追加の標準化作業が必要な API
- 標準はあるが、まだ実装されていない API
- ユーザーのフィードバックを通じて優先順位を決める予定
1件のコメント
Hacker Newsの意見
PuppeteerチームがGoogleを離れてMicrosoftに移り、Playwrightの開発を継続したことは、Googleにとって大きな打撃だった
WebDriver BiDiプロトコルはブラウザを生成するためのプロトコルではないが、ほぼ90%はその役割を果たせそう
Playwrightは、すべての最新レンダリングエンジン(Chromium, WebKit, Firefox)をサポートしている
アクセシビリティツリーについて気になる