11# Playwright
22
3+ ## --- Getting Started ---
4+
35## Installation
46
57- Playwright は E2E テストのためのツール
810 - マルチ OS
911 - マルチ環境(Local or CI)
1012 - ヘッドレス or ヘッドフル
11- - 基本コマンド
12- - ` yarn create playwright ` 初める
13- - ` npx playwright test ` テストの実行
14- - ` npx playwright show-report ` HTML レポートの生成
13+ - チートシート
14+ - ` yarn create playwright `
15+ - Playwright の導入時に一回だけ叩くコマンド
16+ - ` npx playwright test `
17+ - テストの実行
18+ - ` npx playwright test --debug `
19+ - デバッグモードでテストを実行
20+ - ワーカーが 1 つだけになったうえ、Playwrite inspector を用いた 1 ステップごとの実行になる
21+ - ` npx playwright test --trace on `
22+ - Trace を記録しつつテストを実行
23+ - ` npx playwright show-report `
24+ - HTML レポートの生成
25+ - ` npx playwright codegen http://localhost:3000 `
26+ - テストコードの自動生成
27+ - localhost の部分は任意のフロントエンドの URL に変更可能
1528
1629## Writing Tests
1730
@@ -89,18 +102,17 @@ npx playwright landing-page.ts --project=chromium
89102
90103### Debugging
91104
92- - デバッグの方法
93- - console .log
94- - VSCode Extension
95- - Playwright Inspector
105+ - デバッグの方法はいくつかある
106+ - ` console.log ` でデバッグする方法
107+ - VSCode Extension を使って VSCode 上でデバッグする方法
108+ - Playwright Inspector を使う方法
109+ - ` --debug ` で起動できる
96110 - Playwright API コールのステップ実行、デバッグログの表示、ロケータの探索
97111
98112` ` ` sh
99- # デバッグする
113+ # Playwright Inspectorでデバッグする方法詳細
100114npx playwright test --debug
101115npx playwright test some.spec.ts --debug
102-
103- # 特定の行からデバッグする
104116npx playwright test some.spec.ts:10 --debug
105117` ` `
106118
@@ -121,6 +133,9 @@ npx playwright test some.spec.ts:10 --debug
121133## Test Generator
122134
123135- Playwright にはテストを自動生成する機能が備わっている
136+ - ` ` ` sh
137+ npx playwright codegen http://localhost:3000
138+ ` ` `
124139- イメージ的には Excel の「マクロ記録」みたいなもの
125140- 2 つのウィンドウを使いながらテストを書いていく
126141 - 1 つ目はブラウザウィンドウ
@@ -138,11 +153,11 @@ https://user-images.githubusercontent.com/13063165/197979804-c4fa3347-8fab-4526-
138153
139154### Recording a Trace
140155
141- - Trace File は` trace.zip ` という名前で保存される
142- - デフォルトでは以下の設定になっている
143- - 任意のテストが失敗したのち、1 回目の再試行時に Trace が作成される( ` on-first-retry ` )、 2 回目以降では作成されない
156+ - Trace ( File ) は` trace.zip ` という名前で保存される
157+ - デフォルトでは Trace は「 CI 上での 1 回目のリトライ時」にのみ生成される。より詳細な設定内容は以下のとおり。
158+ - 任意のテストが失敗したのち、1 回目の再試行時に Trace が作成されるよう ` on-first-retry ` という設定になっている。 2 回目以降では作成されない。
144159 - リトライは CI では 2 回、ローカルでは 0 回行う
145- - Trace の作成は通常はデフォルトでは CI で行われるが、ローカルでも実行したい際には以下のようにする
160+ - ローカルで Trace を生成したい際には以下のようにする
146161 - ` ` ` sh
147162 npx playwright test --trace on
148163 ` ` `
@@ -174,18 +189,57 @@ https://user-images.githubusercontent.com/13063165/197979804-c4fa3347-8fab-4526-
174189
175190## VSCode
176191
177- VSCode に Playwright を使うための拡張機能を入れておくと色々と便利
192+ Playwright の機能は全て CLI から実行できるものの、 VSCode に Playwright を使うための拡張機能を入れておくとさらに便利になる。
178193
179- ### テストの実行
194+ ### Running Tests
180195
181196- テストタブやテストファイルの左側に表示される三角ボタンから実行できる
182197
183- ### デバッグ
198+ ### Debugging Tests
184199
185- - エラー発生時には、期待と実際の差分と、コールスタックが表示される
200+ - エラー発生時には、期待と実際の差分と、コールスタックが VSCode 上に表示される
186201- ライブデバッグ
187202 - ` Show Browser ` オプションを有効にした状態でテストを終えると、コード上のロケータをクリックした際に、ブラウザ上にそれがハイライト表示される
188203- デバッグモード
189204 - 三角ボタンを右クリックして` Debug Test ` を選択すると、デバッグモードでテストが実行される
190205 - ブレークポイントを使用して 1 ステップずつ画面を確認しながらテストを実行することができる
191- - ライブデバッグとデバッグモードを組み合わせると最強
206+ - ライブデバッグとデバッグモードを組み合わせると、ステップごとに視覚的に確認ができるので最強
207+ - 異なる種類のブラウザを使ったテストを UI からポチッと実行できる
208+
209+ ### Generating tests
210+
211+ - ` Record new ` (新規)または` Record at cursor ` (既存テストへの追記)ボタンを押下してから操作するだけでテストを自動生成できる
212+ - サクッとテストを書くのに便利
213+ - [参考動画](https :// user-images.githubusercontent.com/13063165/197721416-e525dd60-51a6-4740-ad8b-0f56f4d20045.mp4)
214+ - frontend ,backend のサーバは手動で立ち上げておく必要がある
215+ - 初回の画面遷移も手動で行う必要がある
216+ - Viewport のサイズは特定の値で固定されている
217+ - Mock API を行いながらテスト生成を行うことはできないっぽい
218+ - ` Pick locator ` をクリックするとブラウザが開き、ホバーした要素の Locator が画面上に表示されるので便利。
219+
220+ ## -- - Guide -- -
221+
222+ ## Mock APIs
223+
224+ API をモックするには以下のようにする。この際、実際のエンドポイントにリクエストは送られない。
225+
226+ ` ` ` ts
227+ await page.route('https://dog.ceo/api/breeds/list/all', async (route) => {
228+ const json = {
229+ message: { test_breed: [] },
230+ };
231+ await route.fulfill({ json });
232+ });
233+ ` ` `
234+
235+ リクエストは実際に実行しつつ、内容を少しだけ変更したい場合は以下のようにする
236+
237+ ` ` ` ts
238+ await page.route('https://dog.ceo/api/breeds/list/all', async (route) => {
239+ const response = await route.fetch();
240+ const json = await response.json();
241+ json.message['big_red_dog'] = [];
242+ // repoponseオブジェクトは実際のものを使いつつ、jsonだけを上書きする
243+ await route.fulfill({ response, json });
244+ });
245+ ` ` `
0 commit comments