doc-detective 4.24.0 → 4.25.1
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/dist/common/src/schemas/schemas.json +2272 -242
- package/dist/common/src/types/generated/record_v3.d.ts +38 -5
- package/dist/common/src/types/generated/record_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/step_v3.d.ts +106 -73
- package/dist/common/src/types/generated/step_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/test_v3.d.ts +266 -200
- package/dist/common/src/types/generated/test_v3.d.ts.map +1 -1
- package/dist/core/tests/appSurface.d.ts.map +1 -1
- package/dist/core/tests/appSurface.js +52 -13
- package/dist/core/tests/appSurface.js.map +1 -1
- package/dist/core/tests/ffmpegRecorder.d.ts +29 -2
- package/dist/core/tests/ffmpegRecorder.d.ts.map +1 -1
- package/dist/core/tests/ffmpegRecorder.js +154 -8
- package/dist/core/tests/ffmpegRecorder.js.map +1 -1
- package/dist/core/tests/startRecording.d.ts +9 -1
- package/dist/core/tests/startRecording.d.ts.map +1 -1
- package/dist/core/tests/startRecording.js +187 -19
- package/dist/core/tests/startRecording.js.map +1 -1
- package/dist/core/tests/stopRecording.d.ts +8 -1
- package/dist/core/tests/stopRecording.d.ts.map +1 -1
- package/dist/core/tests/stopRecording.js +108 -3
- package/dist/core/tests/stopRecording.js.map +1 -1
- package/dist/core/tests.d.ts +2 -1
- package/dist/core/tests.d.ts.map +1 -1
- package/dist/core/tests.js +152 -16
- package/dist/core/tests.js.map +1 -1
- package/dist/hints/hints.d.ts.map +1 -1
- package/dist/hints/hints.js +7 -2
- package/dist/hints/hints.js.map +1 -1
- package/dist/index.cjs +2623 -283
- package/package.json +1 -1
|
@@ -2,11 +2,15 @@ import { validate } from "../../common/src/validate.js";
|
|
|
2
2
|
import { log } from "../utils.js";
|
|
3
3
|
import { syncHandles } from "./browserSurface.js";
|
|
4
4
|
import { spawn } from "node:child_process";
|
|
5
|
+
import { randomUUID } from "node:crypto";
|
|
5
6
|
import path from "node:path";
|
|
6
7
|
import fs from "node:fs";
|
|
7
|
-
import
|
|
8
|
+
import os from "node:os";
|
|
9
|
+
import { getFfmpegPath, selectRecordingToStop, stopRecordTargetName, deriveCropScale, detectDisplayPointSize, } from "./ffmpegRecorder.js";
|
|
8
10
|
export { stopRecording };
|
|
9
|
-
|
|
11
|
+
// `deps` is a test seam for the pending-scale crop derivation (platform +
|
|
12
|
+
// display probe); production callers omit it.
|
|
13
|
+
async function stopRecording({ config, step, driver, deps = {}, }) {
|
|
10
14
|
let result = {
|
|
11
15
|
status: "PASS",
|
|
12
16
|
description: "Stopped recording.",
|
|
@@ -84,6 +88,23 @@ async function stopRecording({ config, step, driver }) {
|
|
|
84
88
|
if (idx !== -1)
|
|
85
89
|
recordings.splice(idx, 1);
|
|
86
90
|
};
|
|
91
|
+
// A pending device recording never actually started. If the late-start
|
|
92
|
+
// attempt errored, surface that as the FAIL; otherwise no app surface ever
|
|
93
|
+
// opened a device session — there's nothing to save.
|
|
94
|
+
if (recording.type === "appium-pending") {
|
|
95
|
+
dropHandle();
|
|
96
|
+
if (recording.startError) {
|
|
97
|
+
// An environment gap (missing host ffmpeg) is a gated SKIP; anything
|
|
98
|
+
// else is a real start failure.
|
|
99
|
+
result.status = recording.startSkip ? "SKIPPED" : "FAIL";
|
|
100
|
+
result.description = recording.startError;
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
result.status = "SKIPPED";
|
|
104
|
+
result.description =
|
|
105
|
+
"The device recording never started (no app surface opened a device session), so there is nothing to save.";
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
87
108
|
try {
|
|
88
109
|
if (recording.type === "MediaRecorder") {
|
|
89
110
|
// Browser engine.
|
|
@@ -202,15 +223,99 @@ async function stopRecording({ config, step, driver }) {
|
|
|
202
223
|
finish();
|
|
203
224
|
});
|
|
204
225
|
});
|
|
226
|
+
// Pending-scale crops (app windows, phase A7): the rect is in native
|
|
227
|
+
// driver units; scale it to capture pixels using the frame size parsed
|
|
228
|
+
// from the capture's stderr over the display's size in points. Any
|
|
229
|
+
// missing input degrades to scale 1 — correct on scale-1 displays, and
|
|
230
|
+
// the transcode's min/max expressions clamp the rest.
|
|
231
|
+
let crop = recording.crop ?? null;
|
|
232
|
+
if (!crop && recording.cropRect && recording.cropPendingScale) {
|
|
233
|
+
const platform = deps.platform ?? process.platform;
|
|
234
|
+
let scale = 1;
|
|
235
|
+
try {
|
|
236
|
+
const displayPointSize = platform === "darwin"
|
|
237
|
+
? await (deps.detectDisplayPointSize ?? detectDisplayPointSize)()
|
|
238
|
+
: null;
|
|
239
|
+
scale = deriveCropScale({
|
|
240
|
+
platform,
|
|
241
|
+
frameSize: recording.captureInfo?.frameSize ?? null,
|
|
242
|
+
displayPointSize,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
catch {
|
|
246
|
+
// A probe failure keeps the initial scale of 1 — today's behavior,
|
|
247
|
+
// correct on scale-1 displays.
|
|
248
|
+
}
|
|
249
|
+
crop = {
|
|
250
|
+
x: Math.round(recording.cropRect.x * scale),
|
|
251
|
+
y: Math.round(recording.cropRect.y * scale),
|
|
252
|
+
w: Math.round(recording.cropRect.w * scale),
|
|
253
|
+
h: Math.round(recording.cropRect.h * scale),
|
|
254
|
+
};
|
|
255
|
+
}
|
|
205
256
|
await transcode({
|
|
206
257
|
config,
|
|
207
258
|
sourcePath: recording.tempPath,
|
|
208
259
|
targetPath: recording.targetPath,
|
|
209
260
|
deleteSource: true,
|
|
210
|
-
crop
|
|
261
|
+
crop,
|
|
211
262
|
});
|
|
212
263
|
dropHandle();
|
|
213
264
|
}
|
|
265
|
+
else if (recording.type === "appium") {
|
|
266
|
+
// Device engine (phase A7): the whole video arrives base64 from the
|
|
267
|
+
// driver (adb screenrecord / simctl). Write it out; non-mp4 targets go
|
|
268
|
+
// through the shared transcode (which also applies the gif scale
|
|
269
|
+
// filter). No crop — the device frame IS the content.
|
|
270
|
+
const b64 = await recording.driver.stopRecordingScreen();
|
|
271
|
+
if (typeof b64 !== "string" || b64.length === 0) {
|
|
272
|
+
result.status = "FAIL";
|
|
273
|
+
result.description =
|
|
274
|
+
"The device recording returned no data; nothing was saved.";
|
|
275
|
+
dropHandle();
|
|
276
|
+
return result;
|
|
277
|
+
}
|
|
278
|
+
// The whole video arrives in one base64 string; a very long recording
|
|
279
|
+
// (the drivers cap at 30 minutes) can make this allocation fail. Name
|
|
280
|
+
// the cause instead of surfacing a bare out-of-memory error.
|
|
281
|
+
// Buffer.from(…, "base64") is permissive — characters outside the
|
|
282
|
+
// alphabet are dropped — so an invalid payload can decode to zero bytes
|
|
283
|
+
// without throwing. An empty decode is "no data", not a valid video.
|
|
284
|
+
let buffer;
|
|
285
|
+
try {
|
|
286
|
+
buffer = Buffer.from(b64, "base64");
|
|
287
|
+
}
|
|
288
|
+
catch (error) {
|
|
289
|
+
result.status = "FAIL";
|
|
290
|
+
result.description = `Couldn't buffer the device recording (${Math.round(b64.length / 1024 / 1024)} MB base64) — device recordings transfer in one payload, so long recordings can exhaust memory. Keep device recordings short (they cap at 30 minutes). ${error?.message ?? error}`;
|
|
291
|
+
dropHandle();
|
|
292
|
+
return result;
|
|
293
|
+
}
|
|
294
|
+
if (buffer.length === 0) {
|
|
295
|
+
result.status = "FAIL";
|
|
296
|
+
result.description =
|
|
297
|
+
"The device recording decoded to an empty payload (no data); nothing was saved.";
|
|
298
|
+
dropHandle();
|
|
299
|
+
return result;
|
|
300
|
+
}
|
|
301
|
+
if (path.extname(recording.targetPath) === ".mp4") {
|
|
302
|
+
fs.writeFileSync(recording.targetPath, buffer);
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
const tempDir = path.join(os.tmpdir(), "doc-detective", "recordings");
|
|
306
|
+
if (!fs.existsSync(tempDir))
|
|
307
|
+
fs.mkdirSync(tempDir, { recursive: true });
|
|
308
|
+
const tempPath = path.join(tempDir, `device-${randomUUID().slice(0, 8)}.mp4`);
|
|
309
|
+
fs.writeFileSync(tempPath, buffer);
|
|
310
|
+
await transcode({
|
|
311
|
+
config,
|
|
312
|
+
sourcePath: tempPath,
|
|
313
|
+
targetPath: recording.targetPath,
|
|
314
|
+
deleteSource: true,
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
dropHandle();
|
|
318
|
+
}
|
|
214
319
|
}
|
|
215
320
|
catch (error) {
|
|
216
321
|
// Couldn't stop recording
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stopRecording.js","sourceRoot":"","sources":["../../../src/core/tests/stopRecording.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stopRecording.js","sourceRoot":"","sources":["../../../src/core/tests/stopRecording.ts"],"names":[],"mappings":"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"}
|
package/dist/core/tests.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type BrowserAssetName } from "../runtime/browsers.js";
|
|
2
2
|
import { type AppSessionState } from "./tests/appSurface.js";
|
|
3
|
-
export { runSpecs, runViaApi, getRunner, ensureChromeAvailable, ensureContextBrowserInstalled, combinationKey, warmUpDecision, selectWarmUpTargets, getDriverCapabilities, getDefaultBrowser, buildFallbackCandidates, driverSkipDiagnostic, resolveBrowserFallbackPolicy, shouldRepairBeforeFallback, isSupportedContext, contextRequirementsSkipMessage, resolveAutoScreenshot, resolveAutoRecord, buildAutoRecordStep, specIsRouted, killTree, jobDisplayResources, };
|
|
3
|
+
export { runSpecs, runViaApi, getRunner, ensureChromeAvailable, ensureContextBrowserInstalled, combinationKey, warmUpDecision, selectWarmUpTargets, getDriverCapabilities, withChromedriverPort, getDefaultBrowser, buildFallbackCandidates, driverSkipDiagnostic, resolveBrowserFallbackPolicy, shouldRepairBeforeFallback, isSupportedContext, contextRequirementsSkipMessage, resolveAutoScreenshot, resolveAutoRecord, buildAutoRecordStep, specIsRouted, killTree, jobDisplayResources, };
|
|
4
4
|
declare function killTree(pid?: number, timeoutMs?: number): Promise<void>;
|
|
5
5
|
/**
|
|
6
6
|
* Stable identity for a "context combination" — the platform + browser pairing
|
|
@@ -25,6 +25,7 @@ declare function getDriverCapabilities({ runnerDetails, name, options }: {
|
|
|
25
25
|
name: any;
|
|
26
26
|
options: any;
|
|
27
27
|
}): any;
|
|
28
|
+
declare function withChromedriverPort(capabilities: any, port: number): any;
|
|
28
29
|
declare function jobDisplayResources(job: any, ctx: {
|
|
29
30
|
platform: string;
|
|
30
31
|
xvfbAvailable: boolean;
|
package/dist/core/tests.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tests.d.ts","sourceRoot":"","sources":["../../src/core/tests.ts"],"names":[],"mappings":"AAYA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"tests.d.ts","sourceRoot":"","sources":["../../src/core/tests.ts"],"names":[],"mappings":"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"}
|
package/dist/core/tests.js
CHANGED
|
@@ -26,7 +26,7 @@ import { wait } from "./tests/wait.js";
|
|
|
26
26
|
import { saveScreenshot } from "./tests/saveScreenshot.js";
|
|
27
27
|
import { startRecording } from "./tests/startRecording.js";
|
|
28
28
|
import { stopRecording } from "./tests/stopRecording.js";
|
|
29
|
-
import { browserCaptureTitle, browserDownloadDir, coerceRecordContextBrowser, jobIsFfmpegRecording, computeEffectiveConcurrency, jobExclusiveResources, checkSystemBinary, xvfbDisplay, startXvfb, XVFB_SCREEN_SIZE, isRecordingActive, recordStepName, detectRecordingNameConflict, } from "./tests/ffmpegRecorder.js";
|
|
29
|
+
import { browserCaptureTitle, browserDownloadDir, coerceRecordContextBrowser, jobIsFfmpegRecording, computeEffectiveConcurrency, jobExclusiveResources, checkSystemBinary, xvfbDisplay, startXvfb, XVFB_SCREEN_SIZE, isRecordingActive, recordStepName, detectRecordingNameConflict, getFfmpegPath, ffmpegPathEnv, } from "./tests/ffmpegRecorder.js";
|
|
30
30
|
import { loadVariables } from "./tests/loadVariables.js";
|
|
31
31
|
import { saveCookie } from "./tests/saveCookie.js";
|
|
32
32
|
import { loadCookie } from "./tests/loadCookie.js";
|
|
@@ -58,7 +58,7 @@ import http from "node:http";
|
|
|
58
58
|
import https from "node:https";
|
|
59
59
|
import { fileURLToPath } from "node:url";
|
|
60
60
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
61
|
-
export { runSpecs, runViaApi, getRunner, ensureChromeAvailable, ensureContextBrowserInstalled, combinationKey, warmUpDecision, selectWarmUpTargets, getDriverCapabilities, getDefaultBrowser, buildFallbackCandidates, driverSkipDiagnostic, resolveBrowserFallbackPolicy, shouldRepairBeforeFallback, isSupportedContext, contextRequirementsSkipMessage, resolveAutoScreenshot, resolveAutoRecord, buildAutoRecordStep, specIsRouted, killTree, jobDisplayResources, };
|
|
61
|
+
export { runSpecs, runViaApi, getRunner, ensureChromeAvailable, ensureContextBrowserInstalled, combinationKey, warmUpDecision, selectWarmUpTargets, getDriverCapabilities, withChromedriverPort, getDefaultBrowser, buildFallbackCandidates, driverSkipDiagnostic, resolveBrowserFallbackPolicy, shouldRepairBeforeFallback, isSupportedContext, contextRequirementsSkipMessage, resolveAutoScreenshot, resolveAutoRecord, buildAutoRecordStep, specIsRouted, killTree, jobDisplayResources, };
|
|
62
62
|
// exports.appiumStart = appiumStart;
|
|
63
63
|
// exports.appiumIsReady = appiumIsReady;
|
|
64
64
|
// exports.driverStart = driverStart;
|
|
@@ -270,6 +270,26 @@ function getDriverCapabilities({ runnerDetails, name, options }) {
|
|
|
270
270
|
}
|
|
271
271
|
return capabilities;
|
|
272
272
|
}
|
|
273
|
+
// Bind a Chromium (chromedriver-backed) session to a specific chromedriver
|
|
274
|
+
// port. appium-chromium-driver hands `chromedriverPort` straight to
|
|
275
|
+
// appium-chromedriver; when it is undefined, appium-chromedriver falls back to
|
|
276
|
+
// its fixed DEFAULT_PORT (9515). Two concurrent browser contexts (own Appium
|
|
277
|
+
// server each, from the pool) then both spawn chromedriver on 9515 — one binds,
|
|
278
|
+
// the other's connection is REFUSED, surfacing later as a mid-session
|
|
279
|
+
// `ECONNREFUSED 127.0.0.1:9515` when a command proxies to the wrong/dead
|
|
280
|
+
// chromedriver (ADR 01039). Assigning a unique free port per session removes the
|
|
281
|
+
// collision. Gecko/Safari are unaffected — geckodriver auto-selects a free
|
|
282
|
+
// `systemPort` from a range, and Safari has no such port — so this only touches
|
|
283
|
+
// Chromium caps, leaving every other engine's caps byte-identical. An explicit
|
|
284
|
+
// `appium:chromedriverPort` (a caller opting into a fixed port) is preserved.
|
|
285
|
+
function withChromedriverPort(capabilities, port) {
|
|
286
|
+
if (!capabilities ||
|
|
287
|
+
capabilities["appium:automationName"] !== "Chromium" ||
|
|
288
|
+
capabilities["appium:chromedriverPort"] !== undefined) {
|
|
289
|
+
return capabilities;
|
|
290
|
+
}
|
|
291
|
+
return { ...capabilities, "appium:chromedriverPort": port };
|
|
292
|
+
}
|
|
273
293
|
function isDriverRequired({ test }) {
|
|
274
294
|
let driverRequired = false;
|
|
275
295
|
// The resolved shape doesn't guarantee `steps` — treat a stepless test or
|
|
@@ -283,6 +303,14 @@ function isDriverRequired({ test }) {
|
|
|
283
303
|
});
|
|
284
304
|
return driverRequired;
|
|
285
305
|
}
|
|
306
|
+
// Non-android platforms whose native app surface is driven by a shared,
|
|
307
|
+
// per-host Appium driver server (macOS Mac2, Windows NovaWindows, iOS/xcuitest
|
|
308
|
+
// simulator). Two concurrent sessions against one of these clobber the shared
|
|
309
|
+
// server, so app-driver contexts on these platforms serialize on the
|
|
310
|
+
// "native-app-driver" resource. Mirrors the non-android keys of
|
|
311
|
+
// APP_DRIVER_PLATFORMS in tests/appSurface.ts; android is excluded because it
|
|
312
|
+
// already has its own "android-emulator" bound.
|
|
313
|
+
const NATIVE_APP_DRIVER_PLATFORMS = ["mac", "windows", "ios"];
|
|
286
314
|
// The exclusive resources a context job must hold to run safely under
|
|
287
315
|
// concurrency. A shared-display ffmpeg recording holds "display" exclusively
|
|
288
316
|
// (jobExclusiveResources). And once ANY such recording is in the run
|
|
@@ -310,14 +338,77 @@ function jobDisplayResources(job, ctx) {
|
|
|
310
338
|
hasBrowserStep: isBrowserRequired({ test: job.context }),
|
|
311
339
|
hasAppStep: isAppDriverRequired({ test: job.context }),
|
|
312
340
|
}).action === "proceed";
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
341
|
+
// Non-android native app-driver contexts share a per-host driver stack that
|
|
342
|
+
// two concurrent sessions clobber (a proxied step fails because the driver
|
|
343
|
+
// "process is not running (probably crashed)" / "Session does not exist" /
|
|
344
|
+
// ECONNREFUSED to WebDriverAgent on :8100). Serialize them against each other
|
|
345
|
+
// on one exclusive resource — the non-android sibling of the android-emulator
|
|
346
|
+
// bound (extending ADR 01001 the way ADR 01025 did for emulators). Android
|
|
347
|
+
// already has its own bound above, so it's excluded here (never double-tagged).
|
|
348
|
+
//
|
|
349
|
+
// Which contexts contend depends on the platform:
|
|
350
|
+
// - macOS Mac2 / Windows: only contexts that drive a NATIVE APP contend —
|
|
351
|
+
// the driver launches the app under test, but a plain desktop browser
|
|
352
|
+
// (firefox/chrome) uses a separate browser session and must STILL
|
|
353
|
+
// parallelize. So these require isAppDriverRequired.
|
|
354
|
+
// - iOS: the single per-host iOS simulator + WebDriverAgent is shared by
|
|
355
|
+
// BOTH native-app (xcuitest) AND mobile-web (Safari-on-sim) contexts, so
|
|
356
|
+
// two of EITHER kind clobber each other. So an ios context contends
|
|
357
|
+
// whether or not it has an app step (mobile-web-ios failed the same way
|
|
358
|
+
// apps-ios did under concurrency).
|
|
359
|
+
// As with attemptsEmulator, the context must also clear the mobile browser
|
|
360
|
+
// gate, so a context that deterministically SKIPs/FAILs (mixed app+web on
|
|
361
|
+
// mobile, unsupported browser, device-fixed config) boots nothing and never
|
|
362
|
+
// needlessly serializes other jobs.
|
|
363
|
+
const platform = job.context?.platform;
|
|
364
|
+
const contendsForNativeDriver = platform === "ios"
|
|
365
|
+
? true // any ios context boots the shared simulator (app OR web)
|
|
366
|
+
: isAppDriverRequired({ test: job.context }); // mac/windows: app only
|
|
367
|
+
// The mobileBrowserGate check only makes sense on MOBILE targets (ios/android):
|
|
368
|
+
// it SKIPs a context that deterministically won't boot the shared driver
|
|
369
|
+
// (mixed native-app + device-browser, unsupported/misconfigured mobile
|
|
370
|
+
// browser). On DESKTOP (mac/windows) there is no device browser to mix with, so
|
|
371
|
+
// the gate must NOT run: a desktop app context that also RECORDS carries
|
|
372
|
+
// `record`/`stopRecord` steps (BROWSER_STEP_KEYS) whose non-object payloads
|
|
373
|
+
// aren't app-targeting, so isBrowserRequired reports a "browser step" and the
|
|
374
|
+
// gate would wrongly SKIP — dropping the native-app-driver bound and letting a
|
|
375
|
+
// recording app context run concurrently with another native app context,
|
|
376
|
+
// clobbering the single per-host Mac2 / NovaWindows driver. Desktop app
|
|
377
|
+
// contexts always boot that driver, so they always contend. (ADR 01040.)
|
|
378
|
+
const isMobileTarget = platform === "ios" || platform === "android";
|
|
379
|
+
const gateProceeds = !isMobileTarget ||
|
|
380
|
+
mobileBrowserGate({
|
|
381
|
+
platform,
|
|
382
|
+
browser: job.context?.browser,
|
|
383
|
+
hasBrowserStep: isBrowserRequired({ test: job.context }),
|
|
384
|
+
hasAppStep: isAppDriverRequired({ test: job.context }),
|
|
385
|
+
}).action === "proceed";
|
|
386
|
+
const attemptsNativeAppDriver = platform !== "android" &&
|
|
387
|
+
NATIVE_APP_DRIVER_PLATFORMS.includes(platform) &&
|
|
388
|
+
contendsForNativeDriver &&
|
|
389
|
+
gateProceeds;
|
|
390
|
+
const extra = [
|
|
391
|
+
...(attemptsEmulator ? ["android-emulator"] : []),
|
|
392
|
+
...(attemptsNativeAppDriver ? ["native-app-driver"] : []),
|
|
393
|
+
];
|
|
394
|
+
// A run-wide shared-display recording promotes every driver context onto the
|
|
395
|
+
// "display" resource so its ffmpeg capture doesn't include their windows.
|
|
396
|
+
// This composes with the native-app-driver bound above — a native app
|
|
397
|
+
// context in such a run holds BOTH (e.g. ["native-app-driver","display"]).
|
|
398
|
+
// Android emulator contexts are exempt: an emulator renders off the host
|
|
399
|
+
// display, so it neither pollutes a screen capture nor needs the display
|
|
400
|
+
// mutex (it stays on "android-emulator" only, as before).
|
|
401
|
+
const displayPromotion = !attemptsEmulator &&
|
|
402
|
+
ctx.runHasDisplayRecording &&
|
|
403
|
+
isDriverRequired({ test: { steps: job.context?.steps } })
|
|
404
|
+
? ["display"]
|
|
405
|
+
: [];
|
|
406
|
+
// Order the union driver-bound first (native-app-driver / android-emulator),
|
|
407
|
+
// then the display resource — whether "display" arrived via `base` (this job's
|
|
408
|
+
// own ffmpeg recording) or `displayPromotion` (a recording elsewhere in the
|
|
409
|
+
// run). This keeps the canonical `["native-app-driver", "display"]` shape
|
|
410
|
+
// stable regardless of which path added the display bound.
|
|
411
|
+
return [...new Set([...extra, ...base, ...displayPromotion])];
|
|
321
412
|
}
|
|
322
413
|
// Check if context is supported by current platform and available apps
|
|
323
414
|
function isSupportedContext({ context, apps, platform }) {
|
|
@@ -2307,7 +2398,16 @@ function buildAutoRecordStep({ config, spec, test, context, }) {
|
|
|
2307
2398
|
const contextSegment = capPathSegment(sanitizeFilesystemName(String(context.contextId ?? ""), "context"));
|
|
2308
2399
|
const recordPath = path.join(runDir, "specs", capPathSegment(sanitizeFilesystemName(String(spec.specId ?? ""), "spec")), "tests", capPathSegment(sanitizeFilesystemName(String(test.testId ?? ""), "test")), "contexts", contextSegment, "recordings", `${contextSegment}.mp4`);
|
|
2309
2400
|
return {
|
|
2310
|
-
record
|
|
2401
|
+
// Mobile-target contexts record the device screen through the app driver
|
|
2402
|
+
// (the internal device plan, resolved from the platform) — pinning ffmpeg
|
|
2403
|
+
// there would host-capture the emulator window, or nothing when headless.
|
|
2404
|
+
record: {
|
|
2405
|
+
path: recordPath,
|
|
2406
|
+
overwrite: "true",
|
|
2407
|
+
...(isMobileTargetPlatform(context?.platform)
|
|
2408
|
+
? {}
|
|
2409
|
+
: { engine: "ffmpeg" }),
|
|
2410
|
+
},
|
|
2311
2411
|
description: "Automatic full-context recording",
|
|
2312
2412
|
stepId: `${sanitizeFilesystemName(String(test.testId ?? ""), "test")}~autorecord`,
|
|
2313
2413
|
// Internal marker — the runStep record dispatch flags the started handle as
|
|
@@ -3622,6 +3722,7 @@ async function runStep({ config = {}, context = {}, step, driver, metaValues = {
|
|
|
3622
3722
|
step: step,
|
|
3623
3723
|
driver: driver,
|
|
3624
3724
|
recordingHost,
|
|
3725
|
+
appSession,
|
|
3625
3726
|
});
|
|
3626
3727
|
// Push the started recording onto the per-context stack so several can
|
|
3627
3728
|
// overlap. Carry the step's `id`/`name` so a later stopRecord can target
|
|
@@ -3649,11 +3750,16 @@ async function runStep({ config = {}, context = {}, step, driver, metaValues = {
|
|
|
3649
3750
|
handle.name = handle.name ?? recordStepName(step.record);
|
|
3650
3751
|
if (step.__autoRecord) {
|
|
3651
3752
|
handle.synthetic = true;
|
|
3652
|
-
//
|
|
3653
|
-
// so the first app surface to open late-binds its window rect
|
|
3654
|
-
// crop (startAppSurface), scoping the capture to the app under
|
|
3655
|
-
|
|
3753
|
+
// Desktop app-only context: no window exists yet to crop to. Mark the
|
|
3754
|
+
// handle so the first app surface to open late-binds its window rect
|
|
3755
|
+
// as the crop (startAppSurface), scoping the capture to the app under
|
|
3756
|
+
// test. Mobile contexts don't crop — their pending handles late-START
|
|
3757
|
+
// the device recording instead (appium-pending).
|
|
3758
|
+
if (!driver &&
|
|
3759
|
+
appSession &&
|
|
3760
|
+
!isMobileTargetPlatform(context?.platform)) {
|
|
3656
3761
|
handle.pendingAppWindowCrop = true;
|
|
3762
|
+
}
|
|
3657
3763
|
}
|
|
3658
3764
|
recordingHost.state.recordings.push(handle);
|
|
3659
3765
|
}
|
|
@@ -3700,6 +3806,24 @@ async function runStep({ config = {}, context = {}, step, driver, metaValues = {
|
|
|
3700
3806
|
env.ANDROID_HOME = appSession.androidSdkRoot;
|
|
3701
3807
|
env.ANDROID_SDK_ROOT = appSession.androidSdkRoot;
|
|
3702
3808
|
}
|
|
3809
|
+
// iOS device recording: the XCUITest driver's
|
|
3810
|
+
// startRecordingScreen shells out to a bare `ffmpeg` on the
|
|
3811
|
+
// server's PATH for encoding, and hosted runners don't reliably
|
|
3812
|
+
// ship one. Put the bundled @ffmpeg-installer binary's directory
|
|
3813
|
+
// first. Best-effort — the session must start even when the
|
|
3814
|
+
// ffmpeg install isn't available (recording then SKIPs with
|
|
3815
|
+
// guidance).
|
|
3816
|
+
if (isMobileTargetPlatform(context?.platform) === "ios") {
|
|
3817
|
+
try {
|
|
3818
|
+
const ffmpegPath = await getFfmpegPath({
|
|
3819
|
+
cacheDir: config?.cacheDir,
|
|
3820
|
+
});
|
|
3821
|
+
Object.assign(env, ffmpegPathEnv(ffmpegPath));
|
|
3822
|
+
}
|
|
3823
|
+
catch {
|
|
3824
|
+
/* best-effort */
|
|
3825
|
+
}
|
|
3826
|
+
}
|
|
3703
3827
|
const server = await startAppiumServer(appiumEntry, config, undefined, env);
|
|
3704
3828
|
return { port: server.port, process: server.process };
|
|
3705
3829
|
},
|
|
@@ -3897,13 +4021,25 @@ async function driverStart(capabilities, port, maxAttempts = 4, ctx = {}) {
|
|
|
3897
4021
|
let lastError;
|
|
3898
4022
|
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
3899
4023
|
try {
|
|
4024
|
+
// Chromium sessions get a unique free chromedriver port so concurrent
|
|
4025
|
+
// browser contexts never collide on chromedriver's fixed default (9515);
|
|
4026
|
+
// see withChromedriverPort (ADR 01039). A FRESH port is allocated per
|
|
4027
|
+
// attempt so a retryable ECONNREFUSED — the very rebind-race the Appium
|
|
4028
|
+
// path already retries — moves to a new free port instead of re-racing
|
|
4029
|
+
// the same one. Only Chromium caps need a port; every other engine skips
|
|
4030
|
+
// the allocation and keeps a byte-identical wdio.remote payload.
|
|
4031
|
+
const needsChromedriverPort = capabilities?.["appium:automationName"] === "Chromium" &&
|
|
4032
|
+
capabilities?.["appium:chromedriverPort"] === undefined;
|
|
4033
|
+
const attemptCaps = needsChromedriverPort
|
|
4034
|
+
? withChromedriverPort(capabilities, await findFreePort())
|
|
4035
|
+
: capabilities;
|
|
3900
4036
|
const driver = await wdio.remote({
|
|
3901
4037
|
protocol: "http",
|
|
3902
4038
|
hostname: "127.0.0.1",
|
|
3903
4039
|
port,
|
|
3904
4040
|
path: "/",
|
|
3905
4041
|
logLevel: "error",
|
|
3906
|
-
capabilities,
|
|
4042
|
+
capabilities: attemptCaps,
|
|
3907
4043
|
connectionRetryTimeout: startupCeiling,
|
|
3908
4044
|
waitforTimeout: 120000, // 2 minutes
|
|
3909
4045
|
});
|