@browserflow-ai/generator 0.0.6

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 (41) hide show
  1. package/dist/config-emit.d.ts +41 -0
  2. package/dist/config-emit.d.ts.map +1 -0
  3. package/dist/config-emit.js +191 -0
  4. package/dist/config-emit.js.map +1 -0
  5. package/dist/index.d.ts +16 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +15 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/locator-emit.d.ts +76 -0
  10. package/dist/locator-emit.d.ts.map +1 -0
  11. package/dist/locator-emit.js +239 -0
  12. package/dist/locator-emit.js.map +1 -0
  13. package/dist/locator-emit.test.d.ts +6 -0
  14. package/dist/locator-emit.test.d.ts.map +1 -0
  15. package/dist/locator-emit.test.js +425 -0
  16. package/dist/locator-emit.test.js.map +1 -0
  17. package/dist/playwright-ts.d.ts +97 -0
  18. package/dist/playwright-ts.d.ts.map +1 -0
  19. package/dist/playwright-ts.js +373 -0
  20. package/dist/playwright-ts.js.map +1 -0
  21. package/dist/playwright-ts.test.d.ts +6 -0
  22. package/dist/playwright-ts.test.d.ts.map +1 -0
  23. package/dist/playwright-ts.test.js +548 -0
  24. package/dist/playwright-ts.test.js.map +1 -0
  25. package/dist/visual-checks.d.ts +76 -0
  26. package/dist/visual-checks.d.ts.map +1 -0
  27. package/dist/visual-checks.js +195 -0
  28. package/dist/visual-checks.js.map +1 -0
  29. package/dist/visual-checks.test.d.ts +6 -0
  30. package/dist/visual-checks.test.d.ts.map +1 -0
  31. package/dist/visual-checks.test.js +188 -0
  32. package/dist/visual-checks.test.js.map +1 -0
  33. package/package.json +34 -0
  34. package/src/config-emit.ts +253 -0
  35. package/src/index.ts +57 -0
  36. package/src/locator-emit.test.ts +533 -0
  37. package/src/locator-emit.ts +310 -0
  38. package/src/playwright-ts.test.ts +704 -0
  39. package/src/playwright-ts.ts +519 -0
  40. package/src/visual-checks.test.ts +232 -0
  41. package/src/visual-checks.ts +294 -0
@@ -0,0 +1,373 @@
1
+ /**
2
+ * playwright-ts.ts
3
+ * Main TypeScript test generator for Playwright.
4
+ */
5
+ import Handlebars from 'handlebars';
6
+ import { resolveLocatorCode, escapeString } from './locator-emit.js';
7
+ import { generateScreenshotAssertion, generateWaitForAnimations, generateMaskSetupCode, } from './visual-checks.js';
8
+ /**
9
+ * Default test file template.
10
+ */
11
+ const DEFAULT_TEST_TEMPLATE = `import { test, expect } from '@playwright/test';
12
+
13
+ /**
14
+ * BrowserFlow Generated Test: {{specName}}
15
+ * ═══════════════════════════════════════════════════════════════════════════
16
+ * Spec: {{specPath}}
17
+ * Exploration: {{explorationId}}
18
+ * {{#if reviewer}}Approved by: {{reviewer}} @ {{reviewedAt}}{{/if}}
19
+ * Generated: {{generatedAt}}
20
+ *
21
+ * This test was generated from an approved exploration. Do not edit manually.
22
+ * To update, re-run exploration and get new approval.
23
+ * ═══════════════════════════════════════════════════════════════════════════
24
+ */
25
+
26
+ test.describe('{{specName}}', () => {
27
+ test('{{testDescription}}', async ({ page }) => {
28
+ {{#each steps}}
29
+ {{{code}}}
30
+
31
+ {{/each}}
32
+ {{#if outcomeChecks}}
33
+ // Final outcome verifications
34
+ {{#each outcomeChecks}}
35
+ {{{code}}}
36
+ {{/each}}
37
+ {{/if}}
38
+ });
39
+ });
40
+ `;
41
+ /**
42
+ * PlaywrightGenerator - Converts exploration lockfiles to Playwright tests.
43
+ */
44
+ export class PlaywrightGenerator {
45
+ options;
46
+ template;
47
+ constructor(options = {}) {
48
+ this.options = {
49
+ includeVisualChecks: true,
50
+ includeComments: true,
51
+ timeout: 30000,
52
+ ...options,
53
+ };
54
+ const templateSource = options.template ?? DEFAULT_TEST_TEMPLATE;
55
+ this.template = Handlebars.compile(templateSource);
56
+ }
57
+ /**
58
+ * Generates a Playwright test file from an exploration lockfile.
59
+ */
60
+ generate(lockfile, review) {
61
+ const steps = this.generateSteps(lockfile);
62
+ const outcomeChecks = this.generateOutcomeChecks(lockfile);
63
+ const content = this.template({
64
+ specName: lockfile.spec,
65
+ specPath: lockfile.spec_path,
66
+ explorationId: lockfile.exploration_id,
67
+ reviewer: review?.reviewer,
68
+ reviewedAt: review?.submitted_at,
69
+ generatedAt: new Date().toISOString(),
70
+ testDescription: this.generateTestDescription(lockfile),
71
+ steps,
72
+ outcomeChecks: outcomeChecks.length > 0 ? outcomeChecks : undefined,
73
+ });
74
+ return {
75
+ path: `e2e/tests/${lockfile.spec}.spec.ts`,
76
+ content,
77
+ specName: lockfile.spec,
78
+ explorationId: lockfile.exploration_id,
79
+ generatedAt: new Date().toISOString(),
80
+ };
81
+ }
82
+ /**
83
+ * Generates a test description from the spec name.
84
+ */
85
+ generateTestDescription(lockfile) {
86
+ // Convert kebab-case to readable description
87
+ return lockfile.spec
88
+ .split('-')
89
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
90
+ .join(' ');
91
+ }
92
+ /**
93
+ * Generates code for all steps.
94
+ */
95
+ generateSteps(lockfile) {
96
+ return lockfile.steps.map((step, index) => {
97
+ const code = this.generateStepCode(step, index);
98
+ return { code };
99
+ });
100
+ }
101
+ /**
102
+ * Generates code for a single step wrapped in test.step().
103
+ */
104
+ generateStepCode(step, index) {
105
+ const lines = [];
106
+ const indent = ' '; // 4 spaces for inside test block
107
+ const innerIndent = ' '; // 6 spaces for inside test.step block
108
+ // Determine step name: use description if available, otherwise step_{index}
109
+ const stepName = step.spec_action.description ?? `step_${index}`;
110
+ // Generate action-specific code
111
+ const actionCode = this.generateActionCode(step);
112
+ // Start test.step() wrapper
113
+ lines.push(`${indent}await test.step('${escapeString(stepName)}', async () => {`);
114
+ // Add step comment inside the test.step block
115
+ if (this.options.includeComments) {
116
+ lines.push(`${innerIndent}// ─────────────────────────────────────────────────────────────────────────`);
117
+ lines.push(`${innerIndent}// Step ${index}: ${this.describeAction(step.spec_action)}`);
118
+ if (step.execution.method) {
119
+ lines.push(`${innerIndent}// Found via: ${step.execution.method}`);
120
+ }
121
+ lines.push(`${innerIndent}// ─────────────────────────────────────────────────────────────────────────`);
122
+ }
123
+ // Add action code inside the test.step block
124
+ lines.push(...actionCode.map((line) => `${innerIndent}${line}`));
125
+ // Close test.step() wrapper
126
+ lines.push(`${indent}});`);
127
+ return lines.join('\n');
128
+ }
129
+ /**
130
+ * Describes an action for comments.
131
+ */
132
+ describeAction(action) {
133
+ switch (action.action) {
134
+ case 'click':
135
+ return `Click: ${action.query ?? action.selector ?? 'element'}`;
136
+ case 'navigate':
137
+ return `Navigate to: ${action.to}`;
138
+ case 'fill':
139
+ return `Fill: ${action.query ?? action.selector ?? 'input'}`;
140
+ case 'type':
141
+ return `Type: ${action.query ?? action.selector ?? 'input'}`;
142
+ case 'wait':
143
+ return `Wait for: ${action.for ?? 'condition'}`;
144
+ case 'screenshot':
145
+ return `Screenshot: ${action.name ?? 'unnamed'}`;
146
+ case 'verify_state':
147
+ return 'Verify state';
148
+ case 'select':
149
+ return `Select: ${action.option ?? 'option'}`;
150
+ case 'check':
151
+ return `Checkbox: ${action.checked ? 'check' : 'uncheck'}`;
152
+ default:
153
+ return action.action;
154
+ }
155
+ }
156
+ /**
157
+ * Generates code for a specific action.
158
+ */
159
+ generateActionCode(step) {
160
+ const { spec_action: action, execution } = step;
161
+ const lines = [];
162
+ switch (action.action) {
163
+ case 'click':
164
+ lines.push(...this.generateClickCode(step));
165
+ break;
166
+ case 'navigate':
167
+ lines.push(...this.generateNavigateCode(action));
168
+ break;
169
+ case 'fill':
170
+ lines.push(...this.generateFillCode(step));
171
+ break;
172
+ case 'type':
173
+ lines.push(...this.generateTypeCode(step));
174
+ break;
175
+ case 'wait':
176
+ lines.push(...this.generateWaitCode(action, execution.duration_ms));
177
+ break;
178
+ case 'screenshot':
179
+ lines.push(...this.generateScreenshotCode(action));
180
+ break;
181
+ case 'verify_state':
182
+ lines.push(...this.generateVerifyCode(action));
183
+ break;
184
+ case 'select':
185
+ lines.push(...this.generateSelectCode(step));
186
+ break;
187
+ case 'check':
188
+ lines.push(...this.generateCheckCode(step));
189
+ break;
190
+ case 'back':
191
+ lines.push('await page.goBack();');
192
+ break;
193
+ case 'forward':
194
+ lines.push('await page.goForward();');
195
+ break;
196
+ case 'refresh':
197
+ lines.push('await page.reload();');
198
+ break;
199
+ default:
200
+ lines.push(`// TODO: Unsupported action: ${action.action}`);
201
+ }
202
+ return lines;
203
+ }
204
+ /**
205
+ * Generates click action code.
206
+ */
207
+ generateClickCode(step) {
208
+ const locatorCode = resolveLocatorCode(step.execution.locator, step.execution.selector_used);
209
+ return [`await ${locatorCode}.click();`];
210
+ }
211
+ /**
212
+ * Generates navigate action code.
213
+ */
214
+ generateNavigateCode(action) {
215
+ // Support both v2 (url) and legacy (to) field names
216
+ const url = action.url ?? action.to ?? '/';
217
+ return [`await page.goto('${escapeString(url)}');`];
218
+ }
219
+ /**
220
+ * Generates fill action code.
221
+ */
222
+ generateFillCode(step) {
223
+ const locatorCode = resolveLocatorCode(step.execution.locator, step.execution.selector_used);
224
+ const value = step.execution.value_used ?? step.spec_action.value ?? '';
225
+ return [`await ${locatorCode}.fill('${escapeString(value)}');`];
226
+ }
227
+ /**
228
+ * Generates type action code.
229
+ */
230
+ generateTypeCode(step) {
231
+ const lines = [];
232
+ const locatorCode = resolveLocatorCode(step.execution.locator, step.execution.selector_used);
233
+ const value = step.execution.value_used ?? step.spec_action.value ?? '';
234
+ lines.push(`await ${locatorCode}.pressSequentially('${escapeString(value)}');`);
235
+ if (step.spec_action.pressEnter) {
236
+ lines.push(`await ${locatorCode}.press('Enter');`);
237
+ }
238
+ return lines;
239
+ }
240
+ /**
241
+ * Generates wait action code.
242
+ */
243
+ generateWaitCode(action, actualDuration) {
244
+ const lines = [];
245
+ const timeout = action.timeout ?? this.options.timeout ?? 30000;
246
+ switch (action.for) {
247
+ case 'element':
248
+ if (action.selector) {
249
+ lines.push(`await page.locator('${escapeString(action.selector)}').waitFor({ timeout: ${timeout} });`);
250
+ }
251
+ break;
252
+ case 'text':
253
+ if (action.text) {
254
+ lines.push(`await page.getByText('${escapeString(action.text)}').waitFor({ timeout: ${timeout} });`);
255
+ }
256
+ break;
257
+ case 'url':
258
+ if (action.contains) {
259
+ lines.push(`await page.waitForURL(url => url.href.includes('${escapeString(action.contains)}'), { timeout: ${timeout} });`);
260
+ }
261
+ break;
262
+ case 'time':
263
+ const duration = action.duration ?? actualDuration ?? 1000;
264
+ lines.push(`await page.waitForTimeout(${duration});`);
265
+ break;
266
+ default:
267
+ lines.push(`await page.waitForLoadState('networkidle');`);
268
+ }
269
+ return lines;
270
+ }
271
+ /**
272
+ * Generates screenshot action code.
273
+ */
274
+ generateScreenshotCode(action) {
275
+ const lines = [];
276
+ const name = action.name ?? 'screenshot';
277
+ if (this.options.includeVisualChecks) {
278
+ // Add wait for animations before screenshot
279
+ lines.push(generateWaitForAnimations());
280
+ lines.push('');
281
+ // Inject mask overlay elements if there are region-based masks
282
+ if (action.mask && action.mask.length > 0) {
283
+ const maskSetupCode = generateMaskSetupCode(action.mask);
284
+ if (maskSetupCode) {
285
+ lines.push(maskSetupCode);
286
+ lines.push('');
287
+ }
288
+ }
289
+ // Generate screenshot assertion
290
+ const assertion = generateScreenshotAssertion({
291
+ name,
292
+ mask: action.mask,
293
+ animations: 'disabled',
294
+ }, { includeComments: this.options.includeComments });
295
+ lines.push(assertion);
296
+ }
297
+ else {
298
+ // Just capture screenshot without assertion
299
+ lines.push(`await page.screenshot({ path: 'screenshots/${escapeString(name)}.png' });`);
300
+ }
301
+ return lines;
302
+ }
303
+ /**
304
+ * Generates verify_state action code.
305
+ */
306
+ generateVerifyCode(action) {
307
+ const lines = [];
308
+ for (const check of action.checks ?? []) {
309
+ if (check.element_visible) {
310
+ lines.push(`await expect(page.locator('${escapeString(check.element_visible)}')).toBeVisible();`);
311
+ }
312
+ if (check.element_not_visible) {
313
+ lines.push(`await expect(page.locator('${escapeString(check.element_not_visible)}')).not.toBeVisible();`);
314
+ }
315
+ if (check.text_contains) {
316
+ lines.push(`await expect(page.getByText('${escapeString(check.text_contains)}')).toBeVisible();`);
317
+ }
318
+ if (check.text_not_contains) {
319
+ lines.push(`await expect(page.getByText('${escapeString(check.text_not_contains)}')).not.toBeVisible();`);
320
+ }
321
+ if (check.url_contains) {
322
+ lines.push(`await expect(page).toHaveURL(new RegExp('${escapeString(check.url_contains)}'));`);
323
+ }
324
+ if (check.element_count) {
325
+ lines.push(`await expect(page.locator('${escapeString(check.element_count.selector)}')).toHaveCount(${check.element_count.expected});`);
326
+ }
327
+ if (check.attribute) {
328
+ lines.push(`await expect(page.locator('${escapeString(check.attribute.selector)}')).toHaveAttribute('${escapeString(check.attribute.attribute)}', '${escapeString(check.attribute.equals)}');`);
329
+ }
330
+ }
331
+ return lines;
332
+ }
333
+ /**
334
+ * Generates select action code.
335
+ */
336
+ generateSelectCode(step) {
337
+ const locatorCode = resolveLocatorCode(step.execution.locator, step.execution.selector_used);
338
+ const option = step.spec_action.option ?? '';
339
+ return [`await ${locatorCode}.selectOption('${escapeString(option)}');`];
340
+ }
341
+ /**
342
+ * Generates check/uncheck action code.
343
+ */
344
+ generateCheckCode(step) {
345
+ const locatorCode = resolveLocatorCode(step.execution.locator, step.execution.selector_used);
346
+ const checked = step.spec_action.checked ?? true;
347
+ if (checked) {
348
+ return [`await ${locatorCode}.check();`];
349
+ }
350
+ else {
351
+ return [`await ${locatorCode}.uncheck();`];
352
+ }
353
+ }
354
+ /**
355
+ * Generates code for outcome checks.
356
+ */
357
+ generateOutcomeChecks(lockfile) {
358
+ return lockfile.outcome_checks
359
+ .filter((check) => check.passed)
360
+ .map((check) => {
361
+ const code = ` // Outcome: ${check.check} = ${String(check.expected)}`;
362
+ return { code };
363
+ });
364
+ }
365
+ }
366
+ /**
367
+ * Convenience function to generate a test from a lockfile.
368
+ */
369
+ export function generateTest(lockfile, options, review) {
370
+ const generator = new PlaywrightGenerator(options);
371
+ return generator.generate(lockfile, review);
372
+ }
373
+ //# sourceMappingURL=playwright-ts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright-ts.js","sourceRoot":"","sources":["../src/playwright-ts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * playwright-ts.test.ts
3
+ * Tests for the Playwright test generator.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=playwright-ts.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright-ts.test.d.ts","sourceRoot":"","sources":["../src/playwright-ts.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}