enbu 0.1.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/README.md +257 -175
  2. package/dist/main.mjs +18776 -314
  3. package/dist/main.mjs.map +1 -1
  4. package/package.json +11 -12
package/README.md CHANGED
@@ -6,9 +6,11 @@ Webブラウザ向けのシンプルなE2Eテストフレームワーク。YAML
6
6
 
7
7
  ## 特徴
8
8
 
9
- - **YAMLベースのフロー定義** - 人間が読みやすいシンプルな形式でテストを記述
9
+ - **YAMLで読みやすいステップ定義** - 人間が読みやすいシンプルな形式でテストを記述
10
10
  - **セマンティックな要素指定** - テキスト、ARIAロール、ラベル等で要素を特定
11
11
  - **自動待機** - 要素が現れるまで自動的に待機(明示的なsleep不要)
12
+ - **Headless/Headed両対応** - CI/CDでの自動実行も、目視でのデバッグも可能
13
+ - **失敗時のデバッグ継続** - テスト失敗時にブラウザ状態を保持したままデバッグ開始可能(AIに調査を依頼することも可能)
12
14
  - **agent-browser統合** - Rust製の高速ブラウザ自動化エンジンを利用
13
15
 
14
16
  ## 前提条件
@@ -36,25 +38,25 @@ npx enbu
36
38
  npx enbu init
37
39
  ```
38
40
 
39
- これにより `.abflow/` ディレクトリとサンプルフローが作成されます。
41
+ これにより `.enbuflow/` ディレクトリとサンプルフローが作成されます。
40
42
 
41
43
  ### 2. フローの作成
42
44
 
43
- `.abflow/login.enbu.yaml`:
45
+ `.enbuflow/login.enbu.yaml`:
44
46
 
45
47
  ```yaml
46
48
  # ログインフローのテスト
47
49
  steps:
48
50
  - open: https://example.com/login
49
- - click: "ログイン"
50
- - type:
51
- selector: "メールアドレス"
52
- text: "user@example.com"
53
- - type:
54
- selector: "パスワード"
55
- text: "password123"
56
- - click: "送信"
57
- - assertVisible: "ダッシュボード"
51
+ - click: ログイン
52
+ - fill:
53
+ selector: メールアドレス
54
+ value: user@example.com
55
+ - fill:
56
+ selector: パスワード
57
+ value: password123
58
+ - click: 送信
59
+ - assertVisible: ダッシュボード
58
60
  ```
59
61
 
60
62
  ### 3. テストの実行
@@ -64,7 +66,238 @@ steps:
64
66
  npx enbu
65
67
 
66
68
  # 特定のフローを実行
67
- npx enbu .abflow/login.enbu.yaml
69
+ npx enbu .enbuflow/login.enbu.yaml
70
+ ```
71
+
72
+ ## コマンドリファレンス
73
+
74
+ ### ページを開く
75
+
76
+ ```yaml
77
+ steps:
78
+ - open: https://example.com
79
+ ```
80
+
81
+ ### クリック
82
+
83
+ ```yaml
84
+ steps:
85
+ # セマンティックセレクタ(テキスト、ラベル、ARIAロール等)
86
+ - click: ログイン
87
+
88
+ # CSSセレクタ
89
+ - click: "#submit-button"
90
+ - click: "[data-testid='add-to-cart']"
91
+ ```
92
+
93
+ ### テキスト入力
94
+
95
+ ```yaml
96
+ steps:
97
+ # fill: 入力欄をクリアしてから入力
98
+ - fill:
99
+ selector: ユーザー名
100
+ value: 山田太郎
101
+
102
+ # type: 既存テキストに追記
103
+ - type:
104
+ selector: 検索欄
105
+ value: 追加テキスト
106
+ ```
107
+
108
+ ### キー入力
109
+
110
+ ```yaml
111
+ steps:
112
+ # Enterキーを押す
113
+ - press: Enter
114
+
115
+ # Tabキーを押す
116
+ - press: Tab
117
+ ```
118
+
119
+ ### アサーション
120
+
121
+ ```yaml
122
+ steps:
123
+ # 要素が表示されていることを確認
124
+ - assertVisible: ログイン成功
125
+
126
+ # 要素が表示されていないことを確認
127
+ - assertNotVisible: エラー
128
+
129
+ # 要素が有効であることを確認
130
+ - assertEnabled: 送信ボタン
131
+
132
+ # チェックボックスがチェックされていることを確認
133
+ - assertChecked: 利用規約に同意
134
+
135
+ # チェックボックスがチェックされていないことを確認
136
+ - assertChecked:
137
+ selector: オプション
138
+ checked: false
139
+ ```
140
+
141
+ ### スクリーンショット
142
+
143
+ ```yaml
144
+ steps:
145
+ # 通常のスクリーンショット
146
+ - screenshot: ./screenshots/result.png
147
+
148
+ # フルページスクリーンショット
149
+ - screenshot:
150
+ path: ./screenshots/fullpage.png
151
+ full: true
152
+ ```
153
+
154
+ ### スナップショット(デバッグ用)
155
+
156
+ ```yaml
157
+ steps:
158
+ - snapshot: {}
159
+ ```
160
+
161
+ 現在のページのアクセシビリティツリーを取得します。デバッグ時に要素の確認に使用します。
162
+
163
+ ### スクロール
164
+
165
+ ```yaml
166
+ steps:
167
+ # 方向を指定してスクロール
168
+ - scroll:
169
+ direction: down
170
+ amount: 500
171
+
172
+ # 要素が見えるまでスクロール
173
+ - scrollIntoView: フッター
174
+ ```
175
+
176
+ ### 待機
177
+
178
+ ```yaml
179
+ steps:
180
+ # ミリ秒で待機
181
+ - wait: 2000
182
+
183
+ # 要素が表示されるまで待機
184
+ - wait:
185
+ selector: "#loading-complete"
186
+
187
+ # テキストが表示されるまで待機
188
+ - wait:
189
+ text: 読み込み完了
190
+
191
+ # URLが変わるまで待機
192
+ - wait:
193
+ url: /dashboard
194
+
195
+ # ページ読み込み状態を待機
196
+ - wait:
197
+ load: networkidle
198
+ ```
199
+
200
+ ### JavaScript実行
201
+
202
+ ```yaml
203
+ steps:
204
+ - eval: document.title
205
+
206
+ # 複数行
207
+ - eval: |
208
+ const element = document.querySelector('#result');
209
+ return element.textContent;
210
+ ```
211
+
212
+ ## 環境変数
213
+
214
+ フロー内で環境変数を使用できます:
215
+
216
+ ```yaml
217
+ steps:
218
+ - fill:
219
+ selector: パスワード
220
+ value: ${PASSWORD}
221
+ ```
222
+
223
+ ### 環境変数の指定方法
224
+
225
+ #### CLI引数で指定
226
+
227
+ ```bash
228
+ npx enbu --env PASSWORD=secret123
229
+ ```
230
+
231
+ #### YAML内で定義
232
+
233
+ `.enbuflow/login.enbu.yaml`:
234
+ ```yaml
235
+ env:
236
+ BASE_URL: https://staging.example.com
237
+ steps:
238
+ - open: ${BASE_URL}/login
239
+ ```
240
+
241
+ ## CLI オプション
242
+
243
+ ```bash
244
+ npx enbu [options] [flow-files...]
245
+
246
+ オプション:
247
+ --headed ブラウザを表示して実行(デフォルト: ヘッドレス)
248
+ --env KEY=VALUE 環境変数を設定(複数回指定可)
249
+ --timeout <ms> デフォルトタイムアウト(デフォルト: 30000)
250
+ --screenshot 失敗時にスクリーンショットを保存
251
+ --bail 最初の失敗時にテストを停止
252
+ --session <name> agent-browserのセッション名を指定
253
+ --parallel <N> N個のフローを並列実行
254
+ -v, --verbose 詳細なログを出力
255
+ -h, --help ヘルプを表示
256
+ -V, --version バージョンを表示
257
+ ```
258
+
259
+ ## ディレクトリ構成
260
+
261
+ ```
262
+ your-project/
263
+ ├── .enbuflow/
264
+ │ ├── login.enbu.yaml
265
+ │ ├── checkout.enbu.yaml
266
+ │ └── shared/
267
+ │ └── auth.enbu.yaml
268
+ └── package.json
269
+ ```
270
+
271
+ ## CI/CD統合
272
+
273
+ ### GitHub Actions
274
+
275
+ ```yaml
276
+ name: E2E Tests
277
+
278
+ on: [push, pull_request]
279
+
280
+ jobs:
281
+ test:
282
+ runs-on: ubuntu-latest
283
+ steps:
284
+ - uses: actions/checkout@v4
285
+
286
+ - name: Setup Node.js
287
+ uses: actions/setup-node@v4
288
+ with:
289
+ node-version: '20'
290
+
291
+ - name: Install agent-browser
292
+ run: npm install -g agent-browser
293
+
294
+ - name: Install browsers
295
+ run: agent-browser install --with-deps
296
+
297
+ - name: Run E2E tests
298
+ run: npx enbu
299
+ env:
300
+ PASSWORD: ${{ secrets.TEST_PASSWORD }}
68
301
  ```
69
302
 
70
303
  ## agent-browser コマンド対応表
@@ -79,8 +312,8 @@ npx enbu .abflow/login.enbu.yaml
79
312
  | `click <selector>` | ✅ | `- click: <selector>` |
80
313
  | `dblclick <selector>` | ❌ | - |
81
314
  | `focus <selector>` | ❌ | - |
82
- | `type <selector> <text>` | ✅ | `- type: { selector: <selector>, value: <text> }` |
83
- | `fill <selector> <text>` | ✅ | `- fill: { selector: <selector>, value: <text> }` |
315
+ | `type <selector> <text>` | ✅ | `- type: { selector: <selector>, value: <value> }` |
316
+ | `fill <selector> <text>` | ✅ | `- fill: { selector: <selector>, value: <value> }` |
84
317
  | `press <key>` | ✅ | `- press: <key>` |
85
318
  | `keydown <key>` | ❌ | - |
86
319
  | `keyup <key>` | ❌ | - |
@@ -92,9 +325,9 @@ npx enbu .abflow/login.enbu.yaml
92
325
  | `scrollintoview <selector>` | ✅ | `- scrollIntoView: <selector>` |
93
326
  | `drag <source> <target>` | ❌ | - |
94
327
  | `upload <selector> <files>` | ❌ | - |
95
- | `screenshot [path]` | ✅ | `- screenshot: <path>` |
328
+ | `screenshot [path]` | ✅ | `- screenshot: <path>` または `{ path: <path>, full: true }` |
96
329
  | `pdf <path>` | ❌ | - |
97
- | `snapshot` | ✅ | `- snapshot` |
330
+ | `snapshot` | ✅ | `- snapshot: {}` |
98
331
  | `eval <js>` | ✅ | `- eval: <script>` |
99
332
  | `close` | ❌ | - |
100
333
 
@@ -123,13 +356,13 @@ npx enbu .abflow/login.enbu.yaml
123
356
 
124
357
  | agent-browser | 対応 | YAML記法 |
125
358
  |---------------|:----:|----------|
126
- | `find role <role> <action> [value]` | | セレクタ文字列として利用可能 |
127
- | `find text <text> <action>` | | セレクタ文字列として利用可能 |
128
- | `find label <label> <action> [value]` | | セレクタ文字列として利用可能 |
129
- | `find placeholder <placeholder> <action> [value]` | | セレクタ文字列として利用可能 |
130
- | `find alt <text> <action>` | | セレクタ文字列として利用可能 |
131
- | `find title <text> <action>` | | セレクタ文字列として利用可能 |
132
- | `find testid <id> <action> [value]` | | セレクタ文字列として利用可能 |
359
+ | `find role <role> <action> [value]` | | - |
360
+ | `find text <text> <action>` | | - |
361
+ | `find label <label> <action> [value]` | | - |
362
+ | `find placeholder <placeholder> <action> [value]` | | - |
363
+ | `find alt <text> <action>` | | - |
364
+ | `find title <text> <action>` | | - |
365
+ | `find testid <id> <action> [value]` | | - |
133
366
  | `find first <selector> <action> [value]` | ❌ | - |
134
367
  | `find last <selector> <action> [value]` | ❌ | - |
135
368
  | `find nth <n> <selector> <action> [value]` | ❌ | - |
@@ -245,157 +478,6 @@ npx enbu .abflow/login.enbu.yaml
245
478
  |----------|----------|
246
479
  | assertNotVisible | `- assertNotVisible: <selector>` |
247
480
 
248
- ## コマンドリファレンス
249
-
250
- ### ページを開く
251
-
252
- ```yaml
253
- steps:
254
- - open: https://example.com
255
- ```
256
-
257
- ### クリック
258
-
259
- ```yaml
260
- steps:
261
- # セマンティックセレクタ(テキスト、ラベル、ARIAロール等)
262
- - click: "ログイン"
263
-
264
- # CSSセレクタ
265
- - click:
266
- selector: "#submit-button"
267
- ```
268
-
269
- ### テキスト入力
270
-
271
- ```yaml
272
- steps:
273
- - type:
274
- selector: "ユーザー名"
275
- text: "山田太郎"
276
- ```
277
-
278
- ### アサーション
279
-
280
- ```yaml
281
- steps:
282
- # 要素が表示されていることを確認
283
- - assertVisible: "ログイン成功"
284
-
285
- # 要素が表示されていないことを確認
286
- - assertNotVisible: "エラー"
287
- ```
288
-
289
- ### スクリーンショット
290
-
291
- ```yaml
292
- steps:
293
- - screenshot: ./screenshots/result.png
294
- ```
295
-
296
- ### スナップショット(デバッグ用)
297
-
298
- ```yaml
299
- steps:
300
- - snapshot
301
- ```
302
-
303
- 現在のページのアクセシビリティツリーを取得します。デバッグ時に要素の確認に使用します。
304
-
305
- ### JavaScript実行
306
-
307
- ```yaml
308
- steps:
309
- - eval: "document.title"
310
-
311
- # 複数行
312
- - eval: |
313
- const element = document.querySelector('#result');
314
- return element.textContent;
315
- ```
316
-
317
- ## 環境変数
318
-
319
- フロー内で環境変数を使用できます:
320
-
321
- ```yaml
322
- steps:
323
- - type:
324
- selector: "パスワード"
325
- text: ${PASSWORD}
326
- ```
327
-
328
- ### 環境変数の指定方法
329
-
330
- #### CLI引数で指定
331
-
332
- ```bash
333
- npx enbu --env PASSWORD=secret123
334
- ```
335
-
336
- #### YAML内で定義
337
-
338
- `.abflow/login.enbu.yaml`:
339
- ```yaml
340
- env:
341
- BASE_URL: https://staging.example.com
342
- steps:
343
- - open: ${BASE_URL}/login
344
- ```
345
-
346
- ## CLI オプション
347
-
348
- ```bash
349
- npx enbu [options] [flow-files...]
350
-
351
- オプション:
352
- --headed ブラウザを表示して実行(デフォルト: ヘッドレス)
353
- --env KEY=VALUE 環境変数を設定
354
- --timeout <ms> デフォルトタイムアウト(デフォルト: 30000)
355
- --screenshot 失敗時にスクリーンショットを保存
356
- -v, --verbose 詳細なログを出力
357
- -h, --help ヘルプを表示
358
- --version バージョンを表示
359
- ```
360
-
361
- ## ディレクトリ構成
362
-
363
- ```
364
- your-project/
365
- ├── .abflow/
366
- │ ├── login.enbu.yaml
367
- │ ├── checkout.enbu.yaml
368
- │ └── shared/
369
- │ └── auth.enbu.yaml
370
- └── package.json
371
- ```
372
-
373
- ## CI/CD統合
374
-
375
- ### GitHub Actions
376
-
377
- ```yaml
378
- name: E2E Tests
379
-
380
- on: [push, pull_request]
381
-
382
- jobs:
383
- test:
384
- runs-on: ubuntu-latest
385
- steps:
386
- - uses: actions/checkout@v4
387
-
388
- - name: Setup Node.js
389
- uses: actions/setup-node@v4
390
- with:
391
- node-version: '20'
392
-
393
- - name: Run E2E tests
394
- run: npx enbu
395
- env:
396
- PASSWORD: ${{ secrets.TEST_PASSWORD }}
397
- ```
398
-
399
481
  ## ライセンス
400
482
 
401
483
  MIT