本文へスキップ
MameTechNews
フロントエンド

Playwright 1.65、クラスフィールドとinert属性で操作が失敗しうる

## POINTS

  • ES2022以降では、コンストラクタ引数を参照するクラスフィールドの初期化がTypeErrorになる。
  • inert内の要素へのclickやfillは解除まで待ち、プロキシの認証情報はサイトへ送られない。
  • Node.js 20は対象外。Bunで動かすには `--bun` が必要で、watchやトレースの挙動がNodeと異なる。

MicrosoftのPlaywrightは11月5日、1.65.0を公開した。テストランナーはBunでも動く。bunx --bun playwright test としないと、bunx経由でもNode.jsで実行される。BunがTypeScriptを変換するため、Babelと変換キャッシュは使わない。公式CIが確認しているのはLinuxのBun 1.4.3だけだ。watchは無く、--tsconfig やJSX、カスタムESMローダーは効かない。非同期フレームがスタックから消え、API名は locator.click ではなく click になる。既存スイートに先に効くのは破壊的変更である。クラスフィールドは tsc と同じく useDefineForClassFields に従う。ES2022以降、またはtarget未指定では有効で、コンストラクタ引数をフィールド初期化子が読むと、初期化が先に走りTypeErrorになる。ページオブジェクトでロケータをフィールドの初期値にしていると落ちる。コンストラクタへ移すか、tsconfigでこの設定をfalseにする。

click、check、tap、fill、clear、selectOptionは、対象がinertでなくなるまで待つ。inertのままならタイムアウトする。Cookieの一致はRFC 6265に寄り、URL指定ではホスト専用Cookieをサブドメインへ返さない。プロキシ認証情報はサイトへ送られず、プロキシのチャレンジにだけ使う。サイト認証はhttpCredentialsである。全シャードを通して一致するテストが無い実行は「No tests found」で失敗する。

Node.js 20ではもうテストしていない。系統要件は22、24、26だ。DockerイメージのNode.jsは24から26になる。同梱はChromium 158.0.8127.18、Firefox 159.0、WebKit 27.2。上げる前に、フィールド初期化とinert、Cookieに依存するテストを先に流す。