@wdio/selenium-devtools 0.0.1 → 1.0.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 (56) hide show
  1. package/LICENSE +21 -0
  2. package/package.json +15 -15
  3. package/dist/assertPatcher.d.ts +0 -11
  4. package/dist/assertPatcher.js +0 -123
  5. package/dist/assertPatcher.js.map +0 -1
  6. package/dist/bidi.d.ts +0 -6
  7. package/dist/bidi.js +0 -222
  8. package/dist/bidi.js.map +0 -1
  9. package/dist/constants.d.ts +0 -75
  10. package/dist/constants.js +0 -146
  11. package/dist/constants.js.map +0 -1
  12. package/dist/driverPatcher.d.ts +0 -4
  13. package/dist/driverPatcher.js +0 -256
  14. package/dist/driverPatcher.js.map +0 -1
  15. package/dist/helpers/detachedBackend.d.ts +0 -7
  16. package/dist/helpers/detachedBackend.js +0 -34
  17. package/dist/helpers/detachedBackend.js.map +0 -1
  18. package/dist/helpers/runtime.d.ts +0 -3
  19. package/dist/helpers/runtime.js +0 -47
  20. package/dist/helpers/runtime.js.map +0 -1
  21. package/dist/helpers/suiteManager.d.ts +0 -19
  22. package/dist/helpers/suiteManager.js +0 -131
  23. package/dist/helpers/suiteManager.js.map +0 -1
  24. package/dist/helpers/testManager.d.ts +0 -47
  25. package/dist/helpers/testManager.js +0 -158
  26. package/dist/helpers/testManager.js.map +0 -1
  27. package/dist/helpers/utils.d.ts +0 -26
  28. package/dist/helpers/utils.js +0 -187
  29. package/dist/helpers/utils.js.map +0 -1
  30. package/dist/helpers/videoEncoder.d.ts +0 -2
  31. package/dist/helpers/videoEncoder.js +0 -89
  32. package/dist/helpers/videoEncoder.js.map +0 -1
  33. package/dist/index.d.ts +0 -15
  34. package/dist/index.js +0 -801
  35. package/dist/index.js.map +0 -1
  36. package/dist/reporter.d.ts +0 -18
  37. package/dist/reporter.js +0 -72
  38. package/dist/reporter.js.map +0 -1
  39. package/dist/rerunManager.d.ts +0 -8
  40. package/dist/rerunManager.js +0 -78
  41. package/dist/rerunManager.js.map +0 -1
  42. package/dist/runnerHooks.d.ts +0 -6
  43. package/dist/runnerHooks.js +0 -594
  44. package/dist/runnerHooks.js.map +0 -1
  45. package/dist/screencast.d.ts +0 -11
  46. package/dist/screencast.js +0 -179
  47. package/dist/screencast.js.map +0 -1
  48. package/dist/session.d.ts +0 -48
  49. package/dist/session.js +0 -480
  50. package/dist/session.js.map +0 -1
  51. package/dist/setupConsole.d.ts +0 -1
  52. package/dist/setupConsole.js +0 -13
  53. package/dist/setupConsole.js.map +0 -1
  54. package/dist/types.d.ts +0 -235
  55. package/dist/types.js +0 -5
  56. package/dist/types.js.map +0 -1
@@ -1,179 +0,0 @@
1
- import logger from '@wdio/logger';
2
- import { BLANK_FRAME_THRESHOLD_BYTES, SCREENCAST_DEFAULTS } from './constants.js';
3
- import { getDriverOriginals } from './driverPatcher.js';
4
- const log = logger('@wdio/selenium-devtools:ScreencastRecorder');
5
- // Two strategies:
6
- // 1. CDP push (Chromium): listens to `Page.screencastFrame` events.
7
- // 2. Polling fallback: calls unwrapped `takeScreenshot()` at pollIntervalMs.
8
- // Frames buffer in memory and encode to WebM at stop().
9
- export class ScreencastRecorder {
10
- #frames = [];
11
- #cdp = undefined;
12
- #cdpFrameListener;
13
- #pollTimer;
14
- #isRecording = false;
15
- #options;
16
- #startIndex = 0;
17
- #startMarkerSet = false;
18
- constructor(options = {}) {
19
- this.#options = { ...SCREENCAST_DEFAULTS, ...options };
20
- }
21
- async start(driver) {
22
- if (this.#isRecording) {
23
- return;
24
- }
25
- const cdpOk = await this.#startCdp(driver);
26
- if (!cdpOk) {
27
- await this.#startPolling(driver);
28
- }
29
- }
30
- async stop() {
31
- if (!this.#isRecording) {
32
- return;
33
- }
34
- if (this.#cdp) {
35
- await this.#stopCdp();
36
- }
37
- else if (this.#pollTimer !== undefined) {
38
- this.#stopPolling();
39
- }
40
- this.#isRecording = false;
41
- }
42
- setStartMarker() {
43
- if (!this.#startMarkerSet) {
44
- this.#startMarkerSet = true;
45
- this.#startIndex = this.#frames.length;
46
- }
47
- }
48
- get frames() {
49
- return this.#frames.slice(this.#startIndex);
50
- }
51
- get duration() {
52
- const f = this.frames;
53
- if (f.length < 2) {
54
- return 0;
55
- }
56
- return f[f.length - 1].timestamp - f[0].timestamp;
57
- }
58
- get isRecording() {
59
- return this.#isRecording;
60
- }
61
- // ─── CDP path (Chromium) ─────────────────────────────────────────────────
62
- async #startCdp(driver) {
63
- if (typeof driver.createCDPConnection !== 'function') {
64
- return false;
65
- }
66
- try {
67
- const cdp = await driver.createCDPConnection('page');
68
- this.#cdp = cdp;
69
- // Listen for frames on the underlying WebSocket. Each CDP event arrives
70
- // as a JSON message with method='Page.screencastFrame' and embedded
71
- // params. We push to the frame buffer and ack so Chrome keeps streaming.
72
- const ws = cdp._wsConnection;
73
- if (!ws || typeof ws.on !== 'function') {
74
- log.warn('CDP connection has no underlying WebSocket — falling back');
75
- return false;
76
- }
77
- const onMessage = (raw) => {
78
- try {
79
- const payload = JSON.parse(raw.toString());
80
- if (payload.method !== 'Page.screencastFrame') {
81
- return;
82
- }
83
- const params = payload.params || {};
84
- const ts = params.metadata?.timestamp !== undefined &&
85
- params.metadata?.timestamp !== null
86
- ? Math.round(params.metadata.timestamp * 1000)
87
- : Date.now();
88
- this.#frames.push({ data: params.data, timestamp: ts });
89
- // Anchor frame 0 at the first content-bearing frame to trim the
90
- // leading about:blank dead-air.
91
- if (!this.#startMarkerSet) {
92
- const decodedSize = Math.floor((params.data?.length ?? 0) * 0.75);
93
- if (decodedSize >= BLANK_FRAME_THRESHOLD_BYTES) {
94
- this.#startIndex = Math.max(0, this.#frames.length - 1);
95
- this.#startMarkerSet = true;
96
- }
97
- }
98
- if (params.sessionId !== undefined) {
99
- cdp.execute('Page.screencastFrameAck', {
100
- sessionId: params.sessionId
101
- });
102
- }
103
- }
104
- catch {
105
- // ignore non-JSON / non-screencast messages
106
- }
107
- };
108
- this.#cdpFrameListener = onMessage;
109
- ws.on('message', onMessage);
110
- cdp.execute('Page.startScreencast', {
111
- format: this.#options.captureFormat,
112
- quality: this.#options.quality,
113
- maxWidth: this.#options.maxWidth,
114
- maxHeight: this.#options.maxHeight
115
- });
116
- this.#isRecording = true;
117
- log.info('✓ Screencast recording started (CDP mode)');
118
- return true;
119
- }
120
- catch (err) {
121
- log.info(`CDP screencast unavailable (${err.message}); will try polling`);
122
- return false;
123
- }
124
- }
125
- async #stopCdp() {
126
- try {
127
- this.#cdp.execute('Page.stopScreencast');
128
- }
129
- catch (err) {
130
- log.warn(`Screencast: error stopping CDP — ${err.message}`);
131
- }
132
- try {
133
- if (this.#cdpFrameListener && this.#cdp?._wsConnection?.off) {
134
- this.#cdp._wsConnection.off('message', this.#cdpFrameListener);
135
- }
136
- }
137
- catch {
138
- // detach best-effort
139
- }
140
- log.info(`✓ Screencast stopped — ${this.#frames.length} frame(s) collected`);
141
- this.#cdp = undefined;
142
- this.#cdpFrameListener = undefined;
143
- }
144
- // ─── Polling fallback (any browser) ──────────────────────────────────────
145
- async #startPolling(driver) {
146
- const takeShot = getDriverOriginals().takeScreenshot;
147
- if (!takeShot) {
148
- log.warn('Screencast unavailable — driver lacks takeScreenshot');
149
- return;
150
- }
151
- try {
152
- const first = await takeShot(driver);
153
- this.#frames.push({ data: first, timestamp: Date.now() });
154
- const intervalMs = this.#options.pollIntervalMs;
155
- this.#pollTimer = setInterval(async () => {
156
- try {
157
- const data = await takeShot(driver);
158
- this.#frames.push({ data, timestamp: Date.now() });
159
- }
160
- catch {
161
- this.#stopPolling();
162
- }
163
- }, intervalMs);
164
- this.#isRecording = true;
165
- log.info(`✓ Screencast recording started (polling mode, ${intervalMs} ms interval)`);
166
- }
167
- catch (err) {
168
- log.warn(`Screencast unavailable (${err.message}). Recording skipped.`);
169
- }
170
- }
171
- #stopPolling() {
172
- if (this.#pollTimer !== undefined) {
173
- clearInterval(this.#pollTimer);
174
- this.#pollTimer = undefined;
175
- log.info(`✓ Screencast stopped — ${this.#frames.length} frame(s) collected`);
176
- }
177
- }
178
- }
179
- //# sourceMappingURL=screencast.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"screencast.js","sourceRoot":"","sources":["../src/screencast.ts"],"names":[],"mappings":"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"}
package/dist/session.d.ts DELETED
@@ -1,48 +0,0 @@
1
- import type { CommandLog, ConsoleLog, SeleniumDriverLike } from './types.js';
2
- export declare class SessionCapturer {
3
- #private;
4
- bidiActive: boolean;
5
- commandsLog: CommandLog[];
6
- sources: Map<string, string>;
7
- consoleLogs: ConsoleLog[];
8
- mutations: any[];
9
- traceLogs: string[];
10
- networkRequests: any[];
11
- metadata?: any;
12
- constructor(devtoolsOptions?: {
13
- hostname?: string;
14
- port?: number;
15
- }, driver?: SeleniumDriverLike);
16
- setDriver(driver: SeleniumDriverLike): void;
17
- awaitClientConnected(): Promise<void>;
18
- setClientDisconnectedHandler(fn: () => void): void;
19
- cleanup(): void;
20
- get isReportingUpstream(): boolean;
21
- isConnected(): boolean;
22
- waitForConnection(timeoutMs?: number): Promise<boolean>;
23
- closeWebSocket(): Promise<void>;
24
- sendUpstream(event: string, data: any): void;
25
- captureCommand(command: string, args: any[], result: any, error: Error | undefined, testUid?: string, callSource?: string, timestamp?: number): Promise<CommandLog & {
26
- _id?: number;
27
- }>;
28
- sendCommand(command: CommandLog & {
29
- _id?: number;
30
- }): void;
31
- sendReplaceCommand(oldTimestamp: number, command: CommandLog & {
32
- _id?: number;
33
- }): void;
34
- /** Update an existing entry in place (matched by `_id`) for retry coalesce. */
35
- replaceCommand(oldId: number, command: string, args: any[], result: any, error: Error | undefined, testUid?: string, callSource?: string, timestamp?: number): {
36
- entry: CommandLog & {
37
- _id?: number;
38
- };
39
- oldTimestamp: number;
40
- };
41
- takeScreenshot(): Promise<string | null>;
42
- captureSource(filePath: string): Promise<void>;
43
- injectScript(): Promise<void>;
44
- captureTrace(): Promise<void>;
45
- /** Pulls Chrome browser logs (requires `goog:loggingPrefs: { browser: 'ALL' }`). */
46
- captureBrowserLogs(): Promise<void>;
47
- isNavigationCommand(command: string): boolean;
48
- }