Tech Bytes

短くて分かりやすい技術情報を記事として共有します。みなさんにとって学びになれば幸いです。

Playwrightを使って効率的にテスト

Playwrightとは

Playwrightは、Webブラウザ上での自動テスト、スクレイピング、ユーザーアクションの自動化などを行うためのオープンソースのフレームワークです。
Microsoftによって開発され、主にNode.jsをベースにしていますが、JavaScript、TypeScript、Pythonなどの言語で使用することができます。

Playwrightは、異なるブラウザ(Chromium、Firefox、WebKit)をサポートし、これにより異なるブラウザでの動作を確認できます。
通常のUIテストやスクリプトの自動化のほか、ヘッドレスブラウザを使用したスクレイピングやパフォーマンステストなど、さまざまな用途で利用されます。

主な特徴としては、以下の点が挙げられます。

クロスブラウザ対応:
Chromium、Firefox、WebKitの各ブラウザに対応しています。

ヘッドレスモード:
ブラウザを表示せずに実行できるヘッドレスモードが利用可能です。

複数のブラウザコンテキストのサポート:
複数のブラウザコンテキストを同時に操作でき、それにより異なるタブやウィンドウでの操作が可能です。

自動ウェイト機能:
要素が利用可能になるまでの待機時間を自動で管理します。

デバイスエミュレーション:
デバイスやネットワークのエミュレーションができ、異なる環境でのテストが可能です。
Playwrightは、モダンなウェブアプリケーションのテストやスクレイピングにおいて、柔軟かつ効果的な解決策を提供しています。

Seleniumとの違い

自動テストでよく使用されるツールとしてSeleniumがあります。
PlaywrightとSeleniumは、どちらもWebブラウザの自動化やテストに使用されるツールですが、いくつかの違いがあります。
以下は、PlaywrightとSeleniumの主な違いです。

サポートするブラウザ

Playwright:
Chromium、Firefox、WebKit(ヘッドレスモードも含む)など、複数のブラウザに対応しています。
Selenium:
主にChromium(Google Chrome)、Firefox、Internet Explorerなど、標準的なブラウザをサポートしています。

言語サポート

Playwright:
Node.js、JavaScript、TypeScript、Pythonなど、複数の言語をサポートしています。
Selenium:
主にJava、Python、C#、JavaScript(Node.js)など、複数の言語をサポートしています。

ヘッドレスモード

Playwright:
ヘッドレスモードがサポートされており、ブラウザを表示せずに実行できます。
Selenium:
ヘッドレスモードが利用できますが、ブラウザごとに異なる実装があります。

複数のブラウザコンテキスト

Playwright:
複数のブラウザコンテキストを同時に操作でき、異なるタブやウィンドウでの操作が可能です。
Selenium:
タブやウィンドウの操作もサポートしていますが、Playwrightほど直感的ではない場合があります。

自動ウェイト機能

Playwright:
要素が利用可能になるまでの待機時間を自動で管理します。
Selenium:
ウェイト処理を明示的に記述する必要がありますが、WebDriverWaitなどを使用して待機を実装できます。

デバイスエミュレーション

Playwright:
デバイスエミュレーションが可能で、異なるデバイスやネットワーク条件でのテストができます。
Selenium:
デバイスエミュレーションも可能ですが、Playwrightほど柔軟ではありません。

どちらのツールも一般的なWebテストやスクレイピングに使用できますが、プロジェクトの要件や好みによって選択することが適しています。
最近ではPlaywrightが広く使われるようになっていますが、Seleniumも広く採用されている歴史的なツールであり、プロジェクトの状況によってはどちらも適している場合があります。

Playwrightの実装例

Playwrightの実装例を示します。以下の例は、Playwrightを使用してGoogleの検索エンジンでキーワードを検索する簡単なスクリプトです。この例はNode.jsをベースにしていますが、Playwrightは他の言語でも使用できます(例えば、PythonやTypeScript)。

1. まず、Playwrightをインストールします。Node.jsを使用している場合は、以下のようにコマンドを実行します。

npm install playwright

2. 次に、Playwrightを使用してスクリプトを作成します。以下は、Googleでの検索を行う簡単なNode.jsスクリプトの例です。

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

(async () => {
  // ブラウザの起動
  const browser = await chromium.launch();

  // 新しいページを作成
  const page = await browser.newPage();

  // Googleにアクセス
  await page.goto('https://www.google.com');

  // 検索ボックスにキーワードを入力
  await page.type('input[name="q"]', 'Playwright');

  // Enterキーを押して検索
  await page.press('input[name="q"]', 'Enter');

  // 検索結果の最初のリンクをクリック
  await page.click('h3');

  // ページのロードを待機
  await page.waitForLoadState();

  // スクリーンショットを取得(オプション)
  await page.screenshot({ path: 'playwright_example.png' });

  // ブラウザの終了
  await browser.close();
})();

このスクリプトでは、Playwrightを使用してブラウザを起動し、Googleにアクセスしてキーワードを検索しています。
検索結果の最初のリンクをクリックし、ページのロードを待機しています。最後に、スクリーンショットを取得しています。

このスクリプトは簡単な例であり、実際のプロジェクトではさらに複雑なテストケースやスクリプトを実装することができます。
Playwrightの公式ドキュメントには詳細な情報と例が記載されていますので、必要に応じて参照してください。