Playwrightを使ってみた

# playwrightとは
> Microsoft が開発したブラウザ自動操作テストツール

https://playwright.dev/docs/intro

# 実際にインストールしてみる

https://qiita.com/piggydev/items/076af556ff97e92119b4

# インストール
```bash
npm init playwright@latest
```
#### 選択内容
```bash
Getting started with writing end-to-end tests with Playwright:
Initializing project in '.'
✔ Do you want to use TypeScript or JavaScript? · TypeScript
✔ Where to put your end-to-end tests? · e2e
✔ Add a GitHub Actions workflow? (y/N) · false
✔ Install Playwright browsers (can be done manually via 'npx playwright install')? (Y/n) · true
```

:::note  info
これで終わり！！
:::

# テストを作成してみる
## 手動作成

#### テストの書き方　逆引き集

https://qiita.com/oh_rusty_nail/items/d955e3273994214a0afa

https://zenn.dev/masa5714/articles/9328c553bac649

https://qiita.com/neruneruo/items/2b58be89e52f0d3ae52e

https://qiita.com/yurinzflet/items/f9b67106f2aa462b214c

#### テンプレも作成されるのでそちらも活用できそう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/fd905b56-f9f5-1f44-6354-fe171e9a5808.png)
```typescript:demo-todo-app.spec.ts
import { test, expect, type Page } from '@playwright/test';

test.beforeEach(async ({ page }) => {
  await page.goto('https://demo.playwright.dev/todomvc');
});

const TODO_ITEMS = [
  'buy some cheese',
  'feed the cat',
  'book a doctors appointment'
] as const;

test.describe('New Todo', () => {
  test('should allow me to add todo items', async ({ page }) => {
    // create a new todo locator
    const newTodo = page.getByPlaceholder('What needs to be done?');

    // Create 1st todo.
    await newTodo.fill(TODO_ITEMS[0]);
    await newTodo.press('Enter');
```

## 半自動作成
- コード覚えなくてもポチポチするだけでテストコードを自動作成してくれる

https://qiita.com/piggydev/items/076af556ff97e92119b4#%E3%83%86%E3%82%B9%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E7%94%9F%E6%88%90

```bash
npx playwright codegen <テストコードを生成した対象URL>
```
#### ***<テストコードを生成した対象URL>*** 入力なしの場合
- `await page.goto('about:blank');`となっているのでメンテ必要
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/aec99583-4c89-0de8-39c9-ceb39ad7b1ee.png)

#### ***<テストコードを生成した対象URL>*** 入力ありの場合
- `await page.goto('https://www.google.co.jp/');` となっているのでそのまま使える
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/a02d686f-f0cb-ca5f-a7a2-8566a1357939.png)

### 直感でテストが作成できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/ca4326ee-9ef3-ec19-94e4-2ea3b1a0a35e.png)

#### ボタンの詳細
https://qiita.com/mus0ukun/items/b6ceafb2cd0cabc6a3bb

- Pick locator : 要素の取得方法がわかる
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/c4cd6066-e4d2-36b3-2df4-b2e42ea13a26.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/54357272-07ef-f67b-aa2f-7aa9f1662190.png)

- Assert visibility
     ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/ec15124e-fc0c-81ca-3296-3e9bb2bfd6d3.png)
     ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/bc228c23-a650-516c-2a03-db317da5ad2a.png)

- Assert text
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/35248169-2f73-e6a2-a736-e254ba44a248.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/b3960977-0afb-f496-ae30-fb5e530c95ab.png)

- Assert value
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/05974415-d6d6-c319-340f-aede3b1ae29f.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/c28d9aa3-6c6c-7f28-4ca1-53592d8094c1.png)

# テストを実行してみる
- テストの違いを確認してみる

```json:package.json
  "scripts": {
    "test:e2e": "playwright test",
    "test:e2e:trace": "playwright test --trace on",
    "test:e2e:debug": "playwright test --debug",
    "test:e2e:headed": "playwright test --headed",
    "test:e2e:report": "playwright show-report",
    "test:e2e:ui": "playwright test --ui"
  }
```

## Playwrightの各コマンドの違いについて
以下は各コマンドの違いをわかりやすく説明したものです

### `test:e2e`: `playwright test`
- **説明**: 標準モードでPlaywrightのテストを実行します
- **用途**: 通常のテスト実行に使用します
- **結果**: 下記ファイルが自動作成された
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/3dee5a91-e822-ae1d-448d-ec79a2a22306.png)
    -  ```npx playwright show-report``` メッセージが出たので、実行してみる
        
    - テスト結果が見れる
      ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/af74bc8c-8826-d7bf-042c-cc03679e2fb8.png)

      ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/885b5498-ad70-e60b-3cd7-02dd96c8d495.png)

### `test:e2e:trace`: `playwright test --trace on`
- **説明**: トレースを有効にしてテストを実行します
 トレースを有効にすると、各テストのステップの詳細な記録が取られます
 トレースにはスクリーンショット、ログ、ネットワークリクエストの情報などが含まれます
- **用途**: テストが失敗した場合に、その原因を特定するためのデバッグ情報を提供します
- **結果**: 下記ファイルが自動作成された
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/1ffc0d1e-ac1d-5781-af9f-91433ce9eee2.png)
    -  ```npx playwright show-report``` メッセージが出たので、実行してみる
    - テスト結果が見れる
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/e1379cd8-3860-08ff-6101-789458c29630.png)
    - テストの流れが経過時間で確認できる
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/b54c9460-d1e0-96be-744f-111ab953460a.png)

### `test:e2e:debug`: `playwright test --debug`
- **説明**: デバッグモードでテストを実行します
 Playwright Inspectorが開き、ステップごとにコードを実行しながら、ブレークポイントの設定や変数の検査ができます
- **用途**: テストの詳細なデバッグを行いたい場合に使用します
- **結果**: コードベースで実行可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/858d2f1b-32ed-04f0-b496-57b4871a4ed1.png)


### `test:e2e:headed`: `playwright test --headed`
- **説明**: ブラウザウィンドウを表示してテストを実行します
 通常はヘッドレスモード（ウィンドウなし）で実行されますが、このオプションを使うとウィンドウが表示されます
- **用途**: テストの実行中のブラウザの動作を視覚的に確認したい場合に使用します
- **結果**: テストしている経過を生で確認できる（切り替え早すぎ・・・）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/1ef11400-c1c4-6358-7a9f-739901513a58.png)

### `test:e2e:ui`: `playwright test --ui`
- **説明**: UIモードでテストを実行します
 インタラクティブなユーザーインターフェースを使用してテストを実行・管理できます
- **用途**: 視覚的にテストを管理し、実行したい場合に使用します
- **結果**: テスト単位で視覚的に実行可能
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3329005/89cedfda-7d16-5182-2846-7df44bb8a808.png)

### `test:e2e:report`: `playwright show-report`
- **説明**: テストの実行後に生成されたレポートを表示します レポートには各テストの詳細な結果が含まれます
- **用途**: テスト結果を確認し、分析するために使用します
- **結果**: テスト結果が確認できる（上記で説明済み）

# 認証は一回だけにしたい時

https://zenn.dev/koheii/articles/710e9d378dc8cf

# inteliJ設定

https://pleiades.io/help/idea/playwright.html#modify_run_debug_config

https://www.jetbrains.com/help/idea/ui-test-automation.html#abxrup_45


# 参考サイト
https://qiita.com/miruon/items/579d02eb26834259f034

https://zenn.dev/taichifukumoto/scraps/53203d8b8c73e5