[Windows対応]直接ブラウザをインストールしなくてもSafari・Chrome・FireFoxでテストする方法

## はじめに

[Playwright](https://playwright.dev/)というライブラリを使用して、各種ブラウザの起動ができるようになるまでを記載しています。
特に、windowsでsafariが(webkitですが)起動できるようになるのはうれしいです。
Playwright自体はNode.jsのE2Eテストライブラリですが、ブラウザを起動するだけならNode.jsのプロジェクトでなくても大丈夫そうです。

## 前提

サーバーはNuxt3を動かしていますが、適宜ご自身のアプリケーションに置き換えていただければと思います。
WEBアプリケーションでローカルのURLがわかれば大丈夫です。

## インストール方法

https://playwright.dev/docs/intro#installing-playwright
を参考にしながらインストールしていきます。

```
yarn create playwright
```
```
// E2Eテストのディレクトリ。デフォルトのe2eでいいと思います。
Where to put your end-to-end tests? · e2e   
// GitHub Actionのファイルを作成するか
Add a GitHub Actions workflow? (y/N) · false
// ブラウザのインストール。今回は必要なのでtrueで
Install Playwright browsers (can be done manually via 'yarn playwright install')? (Y/n) · true
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165191/c26ae569-79af-6faf-0ad3-f063218bee56.png)

```
e2e/
tests-examples/
playwright.config.ts
```
が生成されていればインストール完了です。

https://playwright.dev/docs/intro#whats-installed

## 起動用テストの追加

ブラウザテストを追加します。
`e2e`ディレクトリ内に`browser.spec.ts`を作成し、以下のコードを記述します。

```javascript:e2e\browser.spec.ts
import { test } from '@playwright/test';

test('test browser', async ({ page }) => {
  // ブラウザが起動した時に表示されるページ
  await page.goto('http://localhost:3000/');

  await page.pause();
});
```

URLは適宜書き換えてください。

`e2eディレクトリ内に``example.spec.ts`がある場合、不要なので削除しても大丈夫です。

## アプリケーションを起動

各アプリケーションを起動しておいてください。
Nuxt3の場合は`yarn dev`で起動します。

## 各ブラウザを起動

`playwright.config.ts`の`projects`を指定して起動します。
各`projects`の`devices`が起動するブラウザになっています。

```
{
  // 省略
  projects: [
    {
      // chromeの起動
      name: 'chromium',
      use: {
        ...devices['Desktop Chrome'],
      },
    },

    {
      // firefoxの起動
      name: 'firefox',
      use: {
        ...devices['Desktop Firefox'],
      },
    },

    {
      // safariの起動
      name: 'webkit',
      use: {
        ...devices['Desktop Safari'],
      },
    },
  // 省略
}
```

コマンドラインのproject引数でプロジェクト名を指定します。
https://playwright.dev/docs/test-cli

起動しているWEBアプリケーションは止めず、別プロセスで以下のコマンドを実行してください。
safariを起動する場合は以下のようになります。

```
npx playwright test --headed --project=webkit
```

headedが無いとブラウザが起動しないので注意してください。
無事にブラウザとデバッグツールが起動すれば成功です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165191/e33fc6e7-6494-fe60-7bbd-fdd4a5219a87.png)


## package.jsonに記載する

コマンドを毎回たたくのは面倒なので、package.jsonのscriptに記載します。

```json:package.json
{
  "scripts": {
    // 省略
    "test:chrome": "npx playwright test --headed --project=chromium",
    "test:firefox": "npx playwright test --headed --project=firefox",
    "test:safari": "npx playwright test --headed --project=webkit"
  }
}
```

```
yarn test:chrome
```

全部実行して並べてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165191/d8188d43-ac5e-1c12-9658-cdf3a2da3860.png)

左からChrome、Firefox、Safariです。


## 最後に

webkitとはいえ、WindowsでSafariのブラウザテストができるのはうれしいですね。Macを買わなくてはいけないのかと思っていたのでかなりありがたいです。
Playwright自体はE2Eテストのライブラリなので本質的なところではないですが、掘り下げていくと面白い機能が見つかりそうです。
また、Node.js以外にもPython・Java・.NET試験にも使えるみたいです。

簡単な説明ではありましたが、ここまでご覧いただきありがとうございました。

## 参考サイト

- [playwright](http://www.cuketest.com/playwright/)
- [Windows で Safari のブラウザテストをする](https://firstlayout.net/browser-testing-safari-on-windows/)