craftdriver 1.2.0 → 1.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.
- package/CHANGELOG.md +20 -0
- package/README.md +2 -1
- package/dist/cli/dispatcher.d.ts.map +1 -1
- package/dist/cli/dispatcher.js +13 -1
- package/dist/cli/dispatcher.js.map +1 -1
- package/dist/cli/mcp/tools.d.ts +1 -2
- package/dist/cli/mcp/tools.d.ts.map +1 -1
- package/dist/cli/mcp/tools.js +18 -0
- package/dist/cli/mcp/tools.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/browser.d.ts +156 -27
- package/dist/lib/browser.d.ts.map +1 -1
- package/dist/lib/browser.js +474 -212
- package/dist/lib/browser.js.map +1 -1
- package/dist/lib/capabilities.d.ts +35 -0
- package/dist/lib/capabilities.d.ts.map +1 -0
- package/dist/lib/capabilities.js +58 -0
- package/dist/lib/capabilities.js.map +1 -0
- package/dist/lib/chrome.d.ts +7 -2
- package/dist/lib/chrome.d.ts.map +1 -1
- package/dist/lib/chrome.js +10 -1
- package/dist/lib/chrome.js.map +1 -1
- package/dist/lib/driverManager.d.ts +92 -0
- package/dist/lib/driverManager.d.ts.map +1 -1
- package/dist/lib/driverManager.js +229 -10
- package/dist/lib/driverManager.js.map +1 -1
- package/dist/lib/electron.d.ts +60 -0
- package/dist/lib/electron.d.ts.map +1 -0
- package/dist/lib/electron.js +85 -0
- package/dist/lib/electron.js.map +1 -0
- package/dist/lib/electronDeeplink.d.ts +22 -0
- package/dist/lib/electronDeeplink.d.ts.map +1 -0
- package/dist/lib/electronDeeplink.js +118 -0
- package/dist/lib/electronDeeplink.js.map +1 -0
- package/dist/lib/electronDiagnostics.d.ts +49 -0
- package/dist/lib/electronDiagnostics.d.ts.map +1 -0
- package/dist/lib/electronDiagnostics.js +195 -0
- package/dist/lib/electronDiagnostics.js.map +1 -0
- package/dist/lib/electronDialogMock.d.ts +51 -0
- package/dist/lib/electronDialogMock.d.ts.map +1 -0
- package/dist/lib/electronDialogMock.js +106 -0
- package/dist/lib/electronDialogMock.js.map +1 -0
- package/dist/lib/electronFuses.d.ts +13 -0
- package/dist/lib/electronFuses.d.ts.map +1 -0
- package/dist/lib/electronFuses.js +118 -0
- package/dist/lib/electronFuses.js.map +1 -0
- package/dist/lib/electronMainBridge.d.ts +28 -0
- package/dist/lib/electronMainBridge.d.ts.map +1 -0
- package/dist/lib/electronMainBridge.js +270 -0
- package/dist/lib/electronMainBridge.js.map +1 -0
- package/dist/lib/electronMainLogs.d.ts +81 -0
- package/dist/lib/electronMainLogs.d.ts.map +1 -0
- package/dist/lib/electronMainLogs.js +176 -0
- package/dist/lib/electronMainLogs.js.map +1 -0
- package/dist/lib/electronMock.d.ts +52 -0
- package/dist/lib/electronMock.d.ts.map +1 -0
- package/dist/lib/electronMock.js +96 -0
- package/dist/lib/electronMock.js.map +1 -0
- package/dist/lib/electronRemote.d.ts +106 -0
- package/dist/lib/electronRemote.d.ts.map +1 -0
- package/dist/lib/electronRemote.js +406 -0
- package/dist/lib/electronRemote.js.map +1 -0
- package/dist/lib/electronVersions.d.ts +34 -0
- package/dist/lib/electronVersions.d.ts.map +1 -0
- package/dist/lib/electronVersions.js +90 -0
- package/dist/lib/electronVersions.js.map +1 -0
- package/dist/lib/errors.d.ts +27 -0
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +27 -0
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/launchTarget.d.ts +30 -0
- package/dist/lib/launchTarget.d.ts.map +1 -0
- package/dist/lib/launchTarget.js +112 -0
- package/dist/lib/launchTarget.js.map +1 -0
- package/dist/lib/page.d.ts +1 -0
- package/dist/lib/page.d.ts.map +1 -1
- package/dist/lib/page.js +1 -1
- package/dist/lib/page.js.map +1 -1
- package/dist/lib/service.d.ts +21 -0
- package/dist/lib/service.d.ts.map +1 -1
- package/dist/lib/service.js +94 -6
- package/dist/lib/service.js.map +1 -1
- package/dist/lib/tracing.d.ts +20 -4
- package/dist/lib/tracing.d.ts.map +1 -1
- package/dist/lib/tracing.js +38 -3
- package/dist/lib/tracing.js.map +1 -1
- package/dist/lib/vibiumTrace.d.ts +14 -0
- package/dist/lib/vibiumTrace.d.ts.map +1 -0
- package/dist/lib/vibiumTrace.js +372 -0
- package/dist/lib/vibiumTrace.js.map +1 -0
- package/docs/api-reference.md +38 -2
- package/docs/browser-api.md +7 -1
- package/docs/electron.md +419 -0
- package/docs/error-codes.md +5 -0
- package/docs/index.md +4 -0
- package/docs/mcp.md +17 -3
- package/docs/public/recipes/trace-failing-test.html +16 -0
- package/docs/public/recipes/vitest-vibium-trace.html +16 -0
- package/docs/public/traces/vitest-login.zip +0 -0
- package/docs/recipes/debug-failing-tests-with-traces.md +117 -0
- package/docs/recipes/electron-app-from-another-repo.md +136 -0
- package/docs/recipes/electron-deep-link.md +117 -0
- package/docs/recipes/electron-mock-apis.md +88 -0
- package/docs/recipes/electron-native-dialog.md +105 -0
- package/docs/recipes.md +29 -10
- package/docs/tracing.md +102 -24
- package/package.json +8 -8
- package/skills/craftdriver/cheatsheet.md +4 -2
- package/skills/craftdriver/patterns.md +2 -1
- package/docs/recipes/trace-failing-test.md +0 -51
package/dist/lib/tracing.js
CHANGED
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import { mkdirSync, writeFileSync, openSync, writeSync, closeSync } from 'node:fs';
|
|
15
15
|
import { join } from 'node:path';
|
|
16
|
+
import { writeVibiumTraceZip } from './vibiumTrace.js';
|
|
16
17
|
export class Tracer {
|
|
18
|
+
browserName;
|
|
17
19
|
browser;
|
|
18
20
|
conn;
|
|
19
21
|
startedAtMs = 0;
|
|
@@ -26,10 +28,12 @@ export class Tracer {
|
|
|
26
28
|
running = false;
|
|
27
29
|
actionsEnabled = true;
|
|
28
30
|
screenshotMode = 'auto';
|
|
31
|
+
traceTitle;
|
|
29
32
|
actionIndex = 0;
|
|
30
33
|
/** Tracks in-flight screenshot captures so `stop()` can drain them. */
|
|
31
34
|
pendingCaptures = [];
|
|
32
|
-
constructor(browser, conn) {
|
|
35
|
+
constructor(browser, conn, browserName) {
|
|
36
|
+
this.browserName = browserName;
|
|
33
37
|
this.browser = browser;
|
|
34
38
|
this.conn = conn;
|
|
35
39
|
}
|
|
@@ -50,6 +54,7 @@ export class Tracer {
|
|
|
50
54
|
this.screenshotIndex = 0;
|
|
51
55
|
this.screenshotDirEnsured = false;
|
|
52
56
|
this.actionIndex = 0;
|
|
57
|
+
this.traceTitle = opts.title;
|
|
53
58
|
this.pendingCaptures = [];
|
|
54
59
|
this.actionsEnabled = opts.actions ?? true;
|
|
55
60
|
const networkOn = opts.network ?? true;
|
|
@@ -68,6 +73,7 @@ export class Tracer {
|
|
|
68
73
|
network: networkOn,
|
|
69
74
|
console: consoleOn,
|
|
70
75
|
screenshots: this.screenshotMode,
|
|
76
|
+
title: opts.title,
|
|
71
77
|
},
|
|
72
78
|
});
|
|
73
79
|
const wantedSubs = ['browsingContext.navigationStarted'];
|
|
@@ -140,17 +146,33 @@ export class Tracer {
|
|
|
140
146
|
*/
|
|
141
147
|
recordAction(name, args, selector) {
|
|
142
148
|
if (!this.running || !this.actionsEnabled)
|
|
143
|
-
return;
|
|
149
|
+
return undefined;
|
|
144
150
|
const idx = ++this.actionIndex;
|
|
145
151
|
this.writeLine({
|
|
146
152
|
t: Date.now() - this.startedAtMs,
|
|
147
153
|
type: 'action',
|
|
154
|
+
actionIndex: idx,
|
|
148
155
|
name,
|
|
149
156
|
args: args && args.length ? args.map(safeArg) : undefined,
|
|
150
157
|
selector,
|
|
151
158
|
});
|
|
152
159
|
if (this.screenshotMode === 'auto')
|
|
153
160
|
this.scheduleScreenshot('action', idx);
|
|
161
|
+
return idx;
|
|
162
|
+
}
|
|
163
|
+
/** Complete an action marker with its real duration and optional error. */
|
|
164
|
+
recordActionEnd(actionIndex, error) {
|
|
165
|
+
if (!this.running || actionIndex === undefined)
|
|
166
|
+
return;
|
|
167
|
+
const event = {
|
|
168
|
+
t: Date.now() - this.startedAtMs,
|
|
169
|
+
type: 'action-end',
|
|
170
|
+
actionIndex,
|
|
171
|
+
};
|
|
172
|
+
if (error !== undefined) {
|
|
173
|
+
event.error = error instanceof Error ? error.message : String(error);
|
|
174
|
+
}
|
|
175
|
+
this.writeLine(event);
|
|
154
176
|
}
|
|
155
177
|
scheduleScreenshot(reason, actionIndex) {
|
|
156
178
|
const startedAtMs = Date.now();
|
|
@@ -187,10 +209,15 @@ export class Tracer {
|
|
|
187
209
|
* never called, the file is still a valid NDJSON trace — just without
|
|
188
210
|
* the closing marker.
|
|
189
211
|
*/
|
|
190
|
-
async stop() {
|
|
212
|
+
async stop(opts) {
|
|
191
213
|
if (!this.running) {
|
|
192
214
|
throw new Error('stopTrace(): no trace is running. Call startTrace() first.');
|
|
193
215
|
}
|
|
216
|
+
// Capture the state left by the last action/assertion. This is especially
|
|
217
|
+
// useful for keep-on-failure test hooks and removes the need for callers to
|
|
218
|
+
// create a magic `final.png` file themselves.
|
|
219
|
+
if (this.screenshotMode === 'auto')
|
|
220
|
+
this.scheduleScreenshot('final');
|
|
194
221
|
for (const un of this.unsubs)
|
|
195
222
|
un();
|
|
196
223
|
this.unsubs = [];
|
|
@@ -211,6 +238,14 @@ export class Tracer {
|
|
|
211
238
|
this.fd = null;
|
|
212
239
|
}
|
|
213
240
|
this.running = false;
|
|
241
|
+
if (opts) {
|
|
242
|
+
await writeVibiumTraceZip({
|
|
243
|
+
sourceDir: this.outDir,
|
|
244
|
+
path: opts.path,
|
|
245
|
+
browserName: this.browserName,
|
|
246
|
+
title: this.traceTitle,
|
|
247
|
+
});
|
|
248
|
+
}
|
|
214
249
|
}
|
|
215
250
|
/** Close the file without writing an end marker. Used by `Browser.quit()`. */
|
|
216
251
|
abort() {
|
package/dist/lib/tracing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../src/lib/tracing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../src/lib/tracing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Export Craftdriver's crash-resilient trace directory as the
|
|
3
|
+
* Playwright-compatible recording layout consumed by Vibium Player.
|
|
4
|
+
*/
|
|
5
|
+
interface VibiumExportOptions {
|
|
6
|
+
sourceDir: string;
|
|
7
|
+
path: string;
|
|
8
|
+
browserName: 'chrome' | 'chromium' | 'firefox';
|
|
9
|
+
title?: string;
|
|
10
|
+
}
|
|
11
|
+
/** Write a Vibium/Playwright-compatible trace zip from a stopped raw trace. */
|
|
12
|
+
export declare function writeVibiumTraceZip(opts: VibiumExportOptions): Promise<void>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=vibiumTrace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vibiumTrace.d.ts","sourceRoot":"","sources":["../../src/lib/vibiumTrace.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,UAAU,mBAAmB;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA+CD,+EAA+E;AAC/E,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4KlF"}
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Export Craftdriver's crash-resilient trace directory as the
|
|
3
|
+
* Playwright-compatible recording layout consumed by Vibium Player.
|
|
4
|
+
*/
|
|
5
|
+
import { createWriteStream, existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
6
|
+
import { createRequire } from 'node:module';
|
|
7
|
+
import { dirname, join } from 'node:path';
|
|
8
|
+
import { randomBytes } from 'node:crypto';
|
|
9
|
+
import yazl from 'yazl';
|
|
10
|
+
const require = createRequire(import.meta.url);
|
|
11
|
+
const pkg = require('../../package.json');
|
|
12
|
+
const ACTIONS = {
|
|
13
|
+
navigateTo: { class: 'Page', method: 'navigate' },
|
|
14
|
+
goBack: { class: 'Page', method: 'goBack' },
|
|
15
|
+
goForward: { class: 'Page', method: 'goForward' },
|
|
16
|
+
reload: { class: 'Page', method: 'reload' },
|
|
17
|
+
setContent: { class: 'Page', method: 'setContent' },
|
|
18
|
+
click: { class: 'Element', method: 'click' },
|
|
19
|
+
fill: { class: 'Element', method: 'fill' },
|
|
20
|
+
clear: { class: 'Element', method: 'clear' },
|
|
21
|
+
acceptDialog: { class: 'Dialog', method: 'accept' },
|
|
22
|
+
dismissDialog: { class: 'Dialog', method: 'dismiss' },
|
|
23
|
+
};
|
|
24
|
+
/** Write a Vibium/Playwright-compatible trace zip from a stopped raw trace. */
|
|
25
|
+
export async function writeVibiumTraceZip(opts) {
|
|
26
|
+
if (!opts.path)
|
|
27
|
+
throw new Error('stopTrace({ path }) requires a non-empty zip path.');
|
|
28
|
+
const raw = readRawTrace(join(opts.sourceDir, 'trace.ndjson'));
|
|
29
|
+
const started = raw.find((event) => event.type === 'meta' && typeof event.startedAt === 'string');
|
|
30
|
+
const startWallTime = started?.startedAt ? Date.parse(started.startedAt) : Date.now();
|
|
31
|
+
const id = randomBytes(6).toString('hex');
|
|
32
|
+
const contextId = `context@${id}`;
|
|
33
|
+
const pageId = `page@${id}`;
|
|
34
|
+
const resources = [];
|
|
35
|
+
const ordered = [];
|
|
36
|
+
const exportedActions = [];
|
|
37
|
+
let sequence = 0;
|
|
38
|
+
let callCounter = 0;
|
|
39
|
+
const screenshots = raw.filter((event) => event.type === 'screenshot');
|
|
40
|
+
const firstScreenshot = screenshots.find((event) => existsSync(join(opts.sourceDir, event.file)));
|
|
41
|
+
const viewport = firstScreenshot
|
|
42
|
+
? readPngSize(readFileSync(join(opts.sourceDir, firstScreenshot.file)))
|
|
43
|
+
: { width: 1280, height: 720 };
|
|
44
|
+
const actionTimes = [];
|
|
45
|
+
const actionEnds = new Map(raw.filter((event) => event.type === 'action-end').map((event) => [event.actionIndex, event]));
|
|
46
|
+
for (const event of raw) {
|
|
47
|
+
if (event.type !== 'action')
|
|
48
|
+
continue;
|
|
49
|
+
const callId = `call@${++callCounter}`;
|
|
50
|
+
const actionIndex = event.actionIndex ?? callCounter;
|
|
51
|
+
const completed = actionEnds.get(actionIndex);
|
|
52
|
+
const endTime = Math.max(event.t + 1, completed?.t ?? event.t + 1);
|
|
53
|
+
const mapping = ACTIONS[event.name] ?? { class: 'Browser', method: event.name };
|
|
54
|
+
const params = actionParams(event);
|
|
55
|
+
actionTimes.push(event.t);
|
|
56
|
+
const before = {
|
|
57
|
+
type: 'before',
|
|
58
|
+
callId,
|
|
59
|
+
startTime: event.t,
|
|
60
|
+
class: mapping.class,
|
|
61
|
+
method: mapping.method,
|
|
62
|
+
pageId,
|
|
63
|
+
params,
|
|
64
|
+
title: actionTitle(mapping, params),
|
|
65
|
+
};
|
|
66
|
+
const after = { type: 'after', callId, endTime };
|
|
67
|
+
if (completed?.error) {
|
|
68
|
+
after.error = { name: 'Error', message: completed.error };
|
|
69
|
+
}
|
|
70
|
+
exportedActions.push({ callId, before, after });
|
|
71
|
+
ordered.push({
|
|
72
|
+
time: event.t,
|
|
73
|
+
order: 3,
|
|
74
|
+
sequence: sequence++,
|
|
75
|
+
value: before,
|
|
76
|
+
});
|
|
77
|
+
// Older raw traces have no completion marker. Use WDIO's conservative
|
|
78
|
+
// 1 ms minimum for those; current traces carry the real end timestamp.
|
|
79
|
+
ordered.push({
|
|
80
|
+
time: endTime,
|
|
81
|
+
order: 1,
|
|
82
|
+
sequence: sequence++,
|
|
83
|
+
value: after,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
const usedResourceNames = new Set();
|
|
87
|
+
const addFrame = (sourcePath, frameTime) => {
|
|
88
|
+
if (!existsSync(sourcePath))
|
|
89
|
+
return undefined;
|
|
90
|
+
const data = readFileSync(sourcePath);
|
|
91
|
+
const size = readPngSize(data);
|
|
92
|
+
let wallTime = startWallTime + Math.max(0, Math.floor(frameTime));
|
|
93
|
+
let resourceName = `${pageId}-${wallTime}.png`;
|
|
94
|
+
while (usedResourceNames.has(resourceName)) {
|
|
95
|
+
resourceName = `${pageId}-${++wallTime}.png`;
|
|
96
|
+
}
|
|
97
|
+
usedResourceNames.add(resourceName);
|
|
98
|
+
resources.push({ sourcePath, name: resourceName });
|
|
99
|
+
ordered.push({
|
|
100
|
+
time: frameTime,
|
|
101
|
+
order: 2,
|
|
102
|
+
sequence: sequence++,
|
|
103
|
+
value: {
|
|
104
|
+
type: 'screencast-frame',
|
|
105
|
+
pageId,
|
|
106
|
+
sha1: resourceName,
|
|
107
|
+
width: size.width,
|
|
108
|
+
height: size.height,
|
|
109
|
+
timestamp: frameTime,
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
return {
|
|
113
|
+
time: frameTime,
|
|
114
|
+
name: resourceName,
|
|
115
|
+
width: size.width,
|
|
116
|
+
height: size.height,
|
|
117
|
+
dataUri: `data:image/png;base64,${data.toString('base64')}`,
|
|
118
|
+
url: pageUrlAt(raw, frameTime),
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
const actionFrames = new Map();
|
|
122
|
+
let finalFrame;
|
|
123
|
+
for (const event of screenshots) {
|
|
124
|
+
const frameTime = event.actionIndex
|
|
125
|
+
? (actionTimes[event.actionIndex - 1] ?? event.t)
|
|
126
|
+
: event.t;
|
|
127
|
+
const frame = addFrame(join(opts.sourceDir, event.file), frameTime);
|
|
128
|
+
if (!frame)
|
|
129
|
+
continue;
|
|
130
|
+
if (event.actionIndex !== undefined)
|
|
131
|
+
actionFrames.set(event.actionIndex, frame);
|
|
132
|
+
if (event.reason === 'final')
|
|
133
|
+
finalFrame = frame;
|
|
134
|
+
}
|
|
135
|
+
// Backwards compatibility for traces produced by the first recipe draft.
|
|
136
|
+
const finalScreenshot = join(opts.sourceDir, 'final.png');
|
|
137
|
+
if (!finalFrame && existsSync(finalScreenshot)) {
|
|
138
|
+
const finalTime = Math.max(0, ...raw.map((event) => event.t)) + 1;
|
|
139
|
+
finalFrame = addFrame(finalScreenshot, finalTime);
|
|
140
|
+
}
|
|
141
|
+
// Vibium uses a minimal HTML document containing the screenshot as its
|
|
142
|
+
// Playwright-compatible frame snapshot. This makes the main viewer panel
|
|
143
|
+
// useful without pretending Craftdriver captured a restorable page DOM.
|
|
144
|
+
for (let index = 0; index < exportedActions.length; index++) {
|
|
145
|
+
const action = exportedActions[index];
|
|
146
|
+
const beforeFrame = actionFrames.get(index + 1);
|
|
147
|
+
const afterFrame = actionFrames.get(index + 2) ?? finalFrame;
|
|
148
|
+
if (beforeFrame) {
|
|
149
|
+
const name = `before@${action.callId}`;
|
|
150
|
+
action.before.beforeSnapshot = name;
|
|
151
|
+
addFrameSnapshot(ordered, action.callId, name, pageId, beforeFrame, sequence++);
|
|
152
|
+
}
|
|
153
|
+
if (afterFrame) {
|
|
154
|
+
const name = `after@${action.callId}`;
|
|
155
|
+
action.after.afterSnapshot = name;
|
|
156
|
+
addFrameSnapshot(ordered, action.callId, name, pageId, afterFrame, sequence++);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
for (const event of raw) {
|
|
160
|
+
const value = bidiEvent(event);
|
|
161
|
+
if (!value)
|
|
162
|
+
continue;
|
|
163
|
+
ordered.push({ time: event.t, order: 2, sequence: sequence++, value });
|
|
164
|
+
}
|
|
165
|
+
ordered.sort((a, b) => a.time - b.time || a.order - b.order || a.sequence - b.sequence);
|
|
166
|
+
const contextOptions = {
|
|
167
|
+
version: 8,
|
|
168
|
+
type: 'context-options',
|
|
169
|
+
origin: 'library',
|
|
170
|
+
libraryName: 'craftdriver',
|
|
171
|
+
libraryVersion: pkg.version,
|
|
172
|
+
browserName: opts.browserName === 'chrome' ? 'chromium' : opts.browserName,
|
|
173
|
+
platform: process.platform === 'darwin' ? 'darwin' : process.platform === 'win32' ? 'windows' : 'linux',
|
|
174
|
+
wallTime: startWallTime,
|
|
175
|
+
monotonicTime: 0,
|
|
176
|
+
sdkLanguage: 'javascript',
|
|
177
|
+
title: opts.title ?? 'Craftdriver trace',
|
|
178
|
+
contextId,
|
|
179
|
+
options: { viewport },
|
|
180
|
+
};
|
|
181
|
+
const traceText = [contextOptions, ...ordered.map((event) => event.value)]
|
|
182
|
+
.map((event) => JSON.stringify(event))
|
|
183
|
+
.join('\n');
|
|
184
|
+
const networkText = buildNetworkTrace(raw, startWallTime, pageId);
|
|
185
|
+
mkdirSync(dirname(opts.path), { recursive: true });
|
|
186
|
+
await writeZip(opts.path, traceText, networkText, resources);
|
|
187
|
+
}
|
|
188
|
+
function addFrameSnapshot(ordered, callId, snapshotName, pageId, frame, sequence) {
|
|
189
|
+
ordered.push({
|
|
190
|
+
time: frame.time,
|
|
191
|
+
order: 2.5,
|
|
192
|
+
sequence,
|
|
193
|
+
value: {
|
|
194
|
+
type: 'frame-snapshot',
|
|
195
|
+
snapshot: {
|
|
196
|
+
callId,
|
|
197
|
+
snapshotName,
|
|
198
|
+
pageId,
|
|
199
|
+
frameId: pageId,
|
|
200
|
+
frameUrl: frame.url,
|
|
201
|
+
doctype: 'html',
|
|
202
|
+
html: [
|
|
203
|
+
'HTML', {},
|
|
204
|
+
['HEAD', {}],
|
|
205
|
+
['BODY', { style: 'margin:0;overflow:hidden' }, [
|
|
206
|
+
'IMG', { src: frame.dataUri, style: 'width:100%' },
|
|
207
|
+
]],
|
|
208
|
+
],
|
|
209
|
+
viewport: { width: frame.width, height: frame.height },
|
|
210
|
+
timestamp: frame.time,
|
|
211
|
+
wallTime: frame.time,
|
|
212
|
+
resourceOverrides: [{ url: frame.dataUri, sha1: frame.name }],
|
|
213
|
+
isMainFrame: true,
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
function pageUrlAt(events, time) {
|
|
219
|
+
let url = 'about:blank';
|
|
220
|
+
for (const event of events) {
|
|
221
|
+
if (event.t > time)
|
|
222
|
+
continue;
|
|
223
|
+
if (event.type === 'navigation' && event.url)
|
|
224
|
+
url = event.url;
|
|
225
|
+
}
|
|
226
|
+
return url;
|
|
227
|
+
}
|
|
228
|
+
function readRawTrace(path) {
|
|
229
|
+
return readFileSync(path, 'utf8')
|
|
230
|
+
.split('\n')
|
|
231
|
+
.filter(Boolean)
|
|
232
|
+
.flatMap((line) => {
|
|
233
|
+
try {
|
|
234
|
+
return [JSON.parse(line)];
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
return [];
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
function actionParams(event) {
|
|
242
|
+
if (event.name === 'navigateTo')
|
|
243
|
+
return { url: event.selector ?? event.args?.[0] };
|
|
244
|
+
if (event.name === 'fill')
|
|
245
|
+
return { selector: event.selector, value: event.args?.[0] };
|
|
246
|
+
if (event.selector)
|
|
247
|
+
return { selector: event.selector };
|
|
248
|
+
if (event.name === 'acceptDialog' && event.args?.length)
|
|
249
|
+
return { text: event.args[0] };
|
|
250
|
+
if (event.args?.length)
|
|
251
|
+
return { args: event.args };
|
|
252
|
+
return {};
|
|
253
|
+
}
|
|
254
|
+
function actionTitle(mapping, params) {
|
|
255
|
+
const label = params.selector ?? params.url ?? params.text;
|
|
256
|
+
if (label === undefined)
|
|
257
|
+
return `${mapping.class}.${mapping.method}()`;
|
|
258
|
+
return `${mapping.class}.${mapping.method}("${String(label).slice(0, 80)}")`;
|
|
259
|
+
}
|
|
260
|
+
function bidiEvent(event) {
|
|
261
|
+
if (event.type === 'console') {
|
|
262
|
+
return {
|
|
263
|
+
type: 'event',
|
|
264
|
+
method: 'log.entryAdded',
|
|
265
|
+
params: { type: 'console', level: event.level, text: event.text },
|
|
266
|
+
time: event.t,
|
|
267
|
+
class: 'BrowserContext',
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
if (event.type === 'error') {
|
|
271
|
+
return {
|
|
272
|
+
type: 'event',
|
|
273
|
+
method: 'log.entryAdded',
|
|
274
|
+
params: { type: 'javascript', level: 'error', text: event.text },
|
|
275
|
+
time: event.t,
|
|
276
|
+
class: 'BrowserContext',
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
if (event.type === 'navigation') {
|
|
280
|
+
return {
|
|
281
|
+
type: 'event',
|
|
282
|
+
method: 'browsingContext.navigationStarted',
|
|
283
|
+
params: { url: event.url, context: event.context },
|
|
284
|
+
time: event.t,
|
|
285
|
+
class: 'BrowserContext',
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
return null;
|
|
289
|
+
}
|
|
290
|
+
function buildNetworkTrace(events, startWallTime, pageId) {
|
|
291
|
+
const requests = events
|
|
292
|
+
.filter((event) => event.type === 'request')
|
|
293
|
+
.map((event) => ({ ...event }));
|
|
294
|
+
const snapshots = [];
|
|
295
|
+
for (const response of events) {
|
|
296
|
+
if (response.type !== 'response')
|
|
297
|
+
continue;
|
|
298
|
+
const request = requests.find((candidate) => !candidate.used && ((response.requestId !== undefined && candidate.requestId === response.requestId) ||
|
|
299
|
+
(response.requestId === undefined && candidate.url === response.url)));
|
|
300
|
+
if (!request)
|
|
301
|
+
continue;
|
|
302
|
+
request.used = true;
|
|
303
|
+
const duration = Math.max(0, response.t - request.t);
|
|
304
|
+
const contentTypeHeaders = response.mimeType
|
|
305
|
+
? [{ name: 'Content-Type', value: response.mimeType }]
|
|
306
|
+
: [];
|
|
307
|
+
snapshots.push({
|
|
308
|
+
type: 'resource-snapshot',
|
|
309
|
+
snapshot: {
|
|
310
|
+
startedDateTime: new Date(startWallTime + request.t).toISOString(),
|
|
311
|
+
time: duration,
|
|
312
|
+
request: {
|
|
313
|
+
method: request.method,
|
|
314
|
+
url: request.url,
|
|
315
|
+
httpVersion: 'HTTP/1.1',
|
|
316
|
+
cookies: [],
|
|
317
|
+
headers: [],
|
|
318
|
+
queryString: queryString(request.url),
|
|
319
|
+
headersSize: -1,
|
|
320
|
+
bodySize: -1,
|
|
321
|
+
},
|
|
322
|
+
response: {
|
|
323
|
+
status: response.status,
|
|
324
|
+
statusText: '',
|
|
325
|
+
httpVersion: 'HTTP/1.1',
|
|
326
|
+
cookies: [],
|
|
327
|
+
headers: contentTypeHeaders,
|
|
328
|
+
content: { size: 0, mimeType: response.mimeType ?? '' },
|
|
329
|
+
redirectURL: '',
|
|
330
|
+
headersSize: -1,
|
|
331
|
+
bodySize: -1,
|
|
332
|
+
},
|
|
333
|
+
cache: response.fromCache ? { _fromCache: true } : {},
|
|
334
|
+
timings: { send: -1, wait: duration, receive: -1 },
|
|
335
|
+
_monotonicTime: request.t,
|
|
336
|
+
_frameref: pageId,
|
|
337
|
+
},
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
return snapshots.map((snapshot) => JSON.stringify(snapshot)).join('\n');
|
|
341
|
+
}
|
|
342
|
+
function queryString(url) {
|
|
343
|
+
try {
|
|
344
|
+
return [...new URL(url).searchParams].map(([name, value]) => ({ name, value }));
|
|
345
|
+
}
|
|
346
|
+
catch {
|
|
347
|
+
return [];
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
function readPngSize(data) {
|
|
351
|
+
const isPng = data.length >= 24 && data.subarray(0, 8).equals(Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]));
|
|
352
|
+
if (!isPng)
|
|
353
|
+
return { width: 1280, height: 720 };
|
|
354
|
+
return { width: data.readUInt32BE(16), height: data.readUInt32BE(20) };
|
|
355
|
+
}
|
|
356
|
+
function writeZip(path, traceText, networkText, resources) {
|
|
357
|
+
return new Promise((resolve, reject) => {
|
|
358
|
+
const zip = new yazl.ZipFile();
|
|
359
|
+
zip.addBuffer(Buffer.from(traceText, 'utf8'), 'trace.trace');
|
|
360
|
+
zip.addBuffer(Buffer.from(networkText, 'utf8'), 'trace.network');
|
|
361
|
+
for (const resource of resources) {
|
|
362
|
+
zip.addFile(resource.sourcePath, `resources/${resource.name}`);
|
|
363
|
+
}
|
|
364
|
+
const output = createWriteStream(path);
|
|
365
|
+
zip.outputStream.on('error', reject);
|
|
366
|
+
output.on('error', reject);
|
|
367
|
+
output.on('close', resolve);
|
|
368
|
+
zip.outputStream.pipe(output);
|
|
369
|
+
zip.end();
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
//# sourceMappingURL=vibiumTrace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vibiumTrace.js","sourceRoot":"","sources":["../../src/lib/vibiumTrace.ts"],"names":[],"mappings":"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"}
|
package/docs/api-reference.md
CHANGED
|
@@ -14,7 +14,7 @@ Launch browsers, move between pages and frames, handle dialogs, and wait for nav
|
|
|
14
14
|
| Symbol | Kind | Summary | Docs |
|
|
15
15
|
|---|---|---|---|
|
|
16
16
|
| `Browser` | class | — | [browser-api](browser-api.md) |
|
|
17
|
-
| `LaunchOptions` | type |
|
|
17
|
+
| `LaunchOptions` | type | Mutually-exclusive browser and Electron renderer launch configurations. | [browser-api](browser-api.md) |
|
|
18
18
|
| `LoadState` | type | When to consider a navigation complete. - `'load'` — page `load` event has fired (default) - `'domcontentloaded'` — `DOMContentLoaded` has fired (faster, no waiting for images/fonts) - `'networkidle'` — `load` + no in-flight requests for 500 ms - `'none'` — do not wait; return as soon as the navigation is initiated | [browser-api](browser-api.md) |
|
|
19
19
|
| `Page` | class | — | [browser-api](browser-api.md) |
|
|
20
20
|
| `Frame` | class | — | [browser-api](browser-api.md) |
|
|
@@ -82,6 +82,7 @@ Capture console output, JavaScript errors, and trace artifacts.
|
|
|
82
82
|
| `JavaScriptError` | type | — | [browser-logs](browser-logs.md) |
|
|
83
83
|
| `LogMessage` | type | — | [browser-logs](browser-logs.md) |
|
|
84
84
|
| `TraceStartOptions` | type | — | [tracing](tracing.md) |
|
|
85
|
+
| `TraceStopOptions` | type | — | [tracing](tracing.md) |
|
|
85
86
|
| `TraceScreenshotMode` | type | Screenshot mode for tracing. | [tracing](tracing.md) |
|
|
86
87
|
| `TraceEvent` | type | — | [tracing](tracing.md) |
|
|
87
88
|
|
|
@@ -100,6 +101,29 @@ Configure devices, emulation overrides, and deterministic browser time.
|
|
|
100
101
|
| `ClockInstallOptions` | type | Options for {@link Clock.install}. | [clock](clock.md) |
|
|
101
102
|
| `ClockTime` | type | Accepted forms for a point in time. | [clock](clock.md) |
|
|
102
103
|
|
|
104
|
+
## Electron Automation
|
|
105
|
+
|
|
106
|
+
Launch packaged Electron applications, drive their renderer, and opt in to main-process testing.
|
|
107
|
+
|
|
108
|
+
| Symbol | Kind | Summary | Docs |
|
|
109
|
+
|---|---|---|---|
|
|
110
|
+
| `ElectronLaunchOptions` | type | Options for driving an Electron application (see `LaunchOptions.electron`). | [electron](electron.md) |
|
|
111
|
+
| `ElectronService` | class | Driver service for automating an Electron application renderer. It uses the chromedriver protocol like ChromeService, but resolves the driver only from Electron-specific configuration, never from system Chrome. | [electron](electron.md) |
|
|
112
|
+
| `ElectronServiceOptions` | type | Driver-process configuration for {@link ElectronService}. | [electron](electron.md) |
|
|
113
|
+
| `ElectronRemote` | class | Run code in the Electron main process via `browser.electron.executeMain`. Named `executeMain` (not WDIO's `execute`) so the process boundary is loud: `browser.evaluate()` is the renderer, `executeMain()` the main process. | [electron](electron.md) |
|
|
114
|
+
| `MainProcessCallback` | type | A function evaluated in the Electron main process; receives the `electron` module. | [electron](electron.md) |
|
|
115
|
+
| `ElectronDialogMock` | type | A native-dialog replacement returned by `browser.electron.mockDialog()`. | [electron](electron.md) |
|
|
116
|
+
| `ElectronDialogMethod` | type | — | [electron](electron.md) |
|
|
117
|
+
| `ElectronDialogCall` | type | One native-dialog invocation. `options` excludes the optional parent window. | [electron](electron.md) |
|
|
118
|
+
| `ElectronDialogResult` | type | — | [electron](electron.md) |
|
|
119
|
+
| `ElectronOpenDialogResult` | type | Scripted result for Electron's asynchronous `dialog.showOpenDialog()`. | [electron](electron.md) |
|
|
120
|
+
| `ElectronSaveDialogResult` | type | Scripted result for Electron's asynchronous `dialog.showSaveDialog()`. | [electron](electron.md) |
|
|
121
|
+
| `ElectronMessageBoxResult` | type | Scripted result for Electron's asynchronous `dialog.showMessageBox()`. | [electron](electron.md) |
|
|
122
|
+
| `ElectronMainLogMonitor` | class | Buffers and dispatches main-process log entries. Reachable via `browser.electron.mainLogs`; its public surface mirrors the renderer {@link LogMonitor } so console monitoring reads the same in both processes. | [electron](electron.md) |
|
|
123
|
+
| `ElectronMainLog` | type | — | [electron](electron.md) |
|
|
124
|
+
| `ElectronMainLogHandler` | type | — | [electron](electron.md) |
|
|
125
|
+
| `ElectronMainLogLevel` | type | Normalized level for a main-process log entry. | [electron](electron.md) |
|
|
126
|
+
|
|
103
127
|
## Accessibility
|
|
104
128
|
|
|
105
129
|
Run axe-core accessibility checks and inspect violation details.
|
|
@@ -130,4 +154,16 @@ Handle stable CraftDriver errors or customize browser driver services.
|
|
|
130
154
|
| `FirefoxService` | class | — | [getting-started](getting-started.md) |
|
|
131
155
|
| `FirefoxServiceOptions` | type | — | [getting-started](getting-started.md) |
|
|
132
156
|
|
|
133
|
-
|
|
157
|
+
## Other Exports
|
|
158
|
+
|
|
159
|
+
Exports that are public but not yet assigned to a feature group.
|
|
160
|
+
|
|
161
|
+
| Symbol | Kind | Summary | Docs |
|
|
162
|
+
|---|---|---|---|
|
|
163
|
+
| `ElectronMainConnectInfo` | type | — | [electron](electron.md) |
|
|
164
|
+
| `ElectronMock` | type | A replacement for a single `electron.<api>.<fn>` main-process method, returned by `browser.electron.mock()`. Records every call, returns a scripted value, and restores the original method on `restore()` or `browser.quit()`. | — |
|
|
165
|
+
| `ElectronMockCall` | type | One recorded invocation of a mocked Electron main-process method. | — |
|
|
166
|
+
| `ElectronRemoteOptions` | type | Extra context ElectronRemote needs beyond the inspector endpoint. | [electron](electron.md) |
|
|
167
|
+
| `PageMatcher` | type | Selects a top-level page by `url` and/or `title` for {@link Browser.waitForPage}. A string matches as a substring; a `RegExp` is tested. When both fields are given, both must match. | [browser-api](browser-api.md) |
|
|
168
|
+
|
|
169
|
+
Total exports: **82**.
|
package/docs/browser-api.md
CHANGED
|
@@ -28,11 +28,17 @@ const browser = await Browser.launch({
|
|
|
28
28
|
| Option | Type | Default | Description |
|
|
29
29
|
|--------|------|---------|-------------|
|
|
30
30
|
| `browserName` | `'chrome' \| 'chromium' \| 'firefox'` | `'chrome'` | Browser to launch |
|
|
31
|
-
| `enableBiDi` | `boolean` | `true` | Use WebDriver BiDi.
|
|
31
|
+
| `enableBiDi` | `boolean` | browsers: `true`; Electron: `false` | Use WebDriver BiDi. Electron requires an explicit opt-in because negotiation resets its initial renderer to `about:blank`. |
|
|
32
32
|
| `storageState` | `string` | — | Path to a session-state JSON file to load on startup |
|
|
33
33
|
| `mobileEmulation` | `MobileEmulation \| DeviceName` | — | Mobile device emulation settings (Chrome/Chromium only) |
|
|
34
34
|
| `downloadsDir` | `string` | temp dir | Directory where downloaded files are saved |
|
|
35
35
|
| `browserPath` | `string` | — | Custom browser binary to launch (Chrome/Chromium/Firefox) — see [Driver Configuration → Browser Binary Configuration](./driver-configuration.md#browser-binary-configuration) |
|
|
36
|
+
| `electron` | `ElectronLaunchOptions` | — | Launch a packaged Electron application renderer instead of a browser. Mutually exclusive with browser-only options; see [Testing Electron Apps](./electron.md). |
|
|
37
|
+
| `electronService` | `ElectronService` | automatic | Customize the Electron-specific chromedriver service. Valid only with `electron`. |
|
|
38
|
+
|
|
39
|
+
The TypeScript surface is a discriminated union: browser options and Electron
|
|
40
|
+
options cannot be mixed. The same validation runs at runtime for JavaScript and
|
|
41
|
+
JSON-driven callers.
|
|
36
42
|
|
|
37
43
|
## Navigation
|
|
38
44
|
|