仕事で大量のテストデータをブラウザ経由でつくりたいと思ったのがきっかけ。
Puppeteer を使おうと思ったが、職場でちょっと話題になってたのもあり Playwright を触ってみることにした。

前提

  • README を起点にちょこちょこ動かしてみる
  • Playwright の version は 1.10.0

特徴

  • Node.js Library
  • Chromium, Firefox, WebKit を統一されたAPIで自動操作できる
  • ヘッドレス対応
  • JS/TS のほか、Python/Java/C# もサポートしてる

機能

SPAやPWAにも対応できるようにつくられている

  • 複数ページ、ドメイン、iframe をまたぐシナリオ
  • DOM要素の出現を自動で待つ
  • ネットワーク通信への介入
  • スマホ・geolocation・Permissionのエミュレート
  • shadow-piercing selectors(?) による web components のサポート
  • マウス・キーボードによる入力の再現
  • ファイルのupload/download

インストール

$ npm i -D playwright

browser binaries のインストールされるので注意。 パスは変更可。

Example

画面を開いて、スクショ撮るだけのコード。

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  const context = await browser.newContext();
  const page = await context.newPage();
  await page.goto('https://blog.bakunyo.com/');
  await page.screenshot({ path: 'bakunyo.png' });
  await browser.close();
})();

これまでも書いてきたかのような馴染みある感じのAPIでGood 👍

Default Headless mode

ヘッドレスモードはデフォルトONなのは良いと思った。画面で動く感じを見たければOFFにする。

chromium.launch({ headless: false, slowMo: 100 });

headless: false で動かしてみた様子

Record scripts

$ npx playwright codegen wikipedia.org

ドキュメントにこれしか書いてなくて何かと思ったが、画面を直接操作したらそれをコードに起こしてくれるやつ。
正直これ系のコードをコツコツ書いていくのは面倒なので、codegen でざっくりつくって必要な分修正すれば良いのは楽だと思った。

別ウィンドウで表示される Playwright Inspector にコードが記録される。
出力されるコードは各サポート言語の中から選べる。

この Inspector は Playwright 実行中も起動していて、実行の一時停止/再開やDOM要素の検出にも利用できる。

他のすごそうな機能

https://playwright.dev/docs/core-concepts#browser-contexts
context を生成する時のオプションでデバイスやgeolocation、カラースキームなどの指定が可能。

https://playwright.dev/docs/debug#visual-studio-code-debugger-nodejs
https://playwright.dev/docs/debug#run-in-debug-mode
Debug 系も充実。

感想

まだがっつり使ったわけではないが、大分良さそうということがわかった。
導入も簡単だし、CI環境でのE2Eテストに限らずローカルでの面倒な作業の自動化とかにもサクっと使えそうだった。