doc-detective 4.13.0 → 4.14.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 +4559 -605
- package/dist/common/src/types/generated/runBrowserScript_v3.d.ts +48 -0
- package/dist/common/src/types/generated/runBrowserScript_v3.d.ts.map +1 -0
- package/dist/common/src/types/generated/runBrowserScript_v3.js +7 -0
- package/dist/common/src/types/generated/runBrowserScript_v3.js.map +1 -0
- package/dist/common/src/types/generated/step_v3.d.ts +191 -73
- package/dist/common/src/types/generated/step_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/test_v3.d.ts +454 -218
- package/dist/common/src/types/generated/test_v3.d.ts.map +1 -1
- package/dist/core/detectTests.d.ts.map +1 -1
- package/dist/core/detectTests.js +106 -21
- package/dist/core/detectTests.js.map +1 -1
- package/dist/core/resolveTests.d.ts.map +1 -1
- package/dist/core/resolveTests.js +2 -13
- package/dist/core/resolveTests.js.map +1 -1
- package/dist/core/tests/runBrowserScript.d.ts +7 -0
- package/dist/core/tests/runBrowserScript.d.ts.map +1 -0
- package/dist/core/tests/runBrowserScript.js +133 -0
- package/dist/core/tests/runBrowserScript.js.map +1 -0
- package/dist/core/tests.d.ts.map +1 -1
- package/dist/core/tests.js +51 -20
- package/dist/core/tests.js.map +1 -1
- package/dist/core/utils.d.ts +25 -1
- package/dist/core/utils.d.ts.map +1 -1
- package/dist/core/utils.js +55 -1
- package/dist/core/utils.js.map +1 -1
- package/dist/hints/hints.d.ts.map +1 -1
- package/dist/hints/hints.js +21 -0
- package/dist/hints/hints.js.map +1 -1
- package/dist/index.cjs +4968 -834
- package/dist/runtime/browserStepKeys.d.ts +19 -0
- package/dist/runtime/browserStepKeys.d.ts.map +1 -0
- package/dist/runtime/browserStepKeys.js +33 -0
- package/dist/runtime/browserStepKeys.js.map +1 -0
- package/dist/runtime/inferRuntimeNeeds.d.ts.map +1 -1
- package/dist/runtime/inferRuntimeNeeds.js +4 -19
- package/dist/runtime/inferRuntimeNeeds.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveTests.js","sourceRoot":"","sources":["../../src/core/resolveTests.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"resolveTests.js","sourceRoot":"","sources":["../../src/core/resolveTests.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runBrowserScript.d.ts","sourceRoot":"","sources":["../../../src/core/tests/runBrowserScript.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAM5B,iBAAe,gBAAgB,CAAC,EAC9B,MAAM,EACN,IAAI,EACJ,MAAM,GACP,EAAE;IACD,MAAM,EAAE,GAAG,CAAC;IACZ,IAAI,EAAE,GAAG,CAAC;IACV,MAAM,EAAE,GAAG,CAAC;CACb,gBA6IA"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { validate } from "../../common/src/validate.js";
|
|
2
|
+
import { log, calculateFractionalDifference, serializeBrowserResult, matchesExpectedOutput, } from "../utils.js";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
export { runBrowserScript };
|
|
6
|
+
// Execute arbitrary JavaScript in the browser page context via the WebDriver
|
|
7
|
+
// `executeScript` endpoint. The script's return value is captured into
|
|
8
|
+
// `outputs.result`; non-string values are serialized for the optional
|
|
9
|
+
// `output` assertion and `path` snapshot. Mirrors the runShell/runCode shape.
|
|
10
|
+
async function runBrowserScript({ config, step, driver, }) {
|
|
11
|
+
const result = {
|
|
12
|
+
status: "PASS",
|
|
13
|
+
description: "Executed browser script.",
|
|
14
|
+
outputs: {
|
|
15
|
+
result: undefined,
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
// Validate step object
|
|
19
|
+
const isValidStep = validate({ schemaKey: "step_v3", object: step });
|
|
20
|
+
if (!isValidStep.valid) {
|
|
21
|
+
result.status = "FAIL";
|
|
22
|
+
result.description = `Invalid step definition: ${isValidStep.errors}`;
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
// Accept coerced and defaulted values
|
|
26
|
+
step = isValidStep.object;
|
|
27
|
+
// Resolve to object
|
|
28
|
+
if (typeof step.runBrowserScript === "string") {
|
|
29
|
+
step.runBrowserScript = { script: step.runBrowserScript };
|
|
30
|
+
}
|
|
31
|
+
// Set default values
|
|
32
|
+
step.runBrowserScript = {
|
|
33
|
+
...step.runBrowserScript,
|
|
34
|
+
args: step.runBrowserScript.args || [],
|
|
35
|
+
maxVariation: step.runBrowserScript.maxVariation || 0,
|
|
36
|
+
overwrite: step.runBrowserScript.overwrite || "aboveVariation",
|
|
37
|
+
timeout: step.runBrowserScript.timeout || 60000,
|
|
38
|
+
};
|
|
39
|
+
// A browser script is meaningless without a live page.
|
|
40
|
+
if (!driver || typeof driver.execute !== "function") {
|
|
41
|
+
result.status = "FAIL";
|
|
42
|
+
result.description =
|
|
43
|
+
"No browser available. runBrowserScript requires a browser context.";
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
// Execute script in the page, racing against a timeout.
|
|
47
|
+
const timeout = step.runBrowserScript.timeout;
|
|
48
|
+
// WebdriverIO accepts a string script body run via executeScript; args are
|
|
49
|
+
// exposed to the script via the `arguments` object.
|
|
50
|
+
const scriptPromise = driver.execute(step.runBrowserScript.script, ...step.runBrowserScript.args);
|
|
51
|
+
// If the timeout wins the race, `scriptPromise` is left without a consumer.
|
|
52
|
+
// Attach a no-op catch so a later rejection (JS error, closed session) is
|
|
53
|
+
// handled instead of surfacing as an unhandled promise rejection. This extra
|
|
54
|
+
// handler doesn't affect the race: a pre-timeout rejection still propagates
|
|
55
|
+
// to `Promise.race` and is reported as a FAIL below.
|
|
56
|
+
scriptPromise.catch(() => { });
|
|
57
|
+
let timeoutId;
|
|
58
|
+
const timeoutPromise = new Promise((resolve, reject) => {
|
|
59
|
+
timeoutId = setTimeout(() => {
|
|
60
|
+
reject(new Error(`Script timed out after ${timeout} milliseconds`));
|
|
61
|
+
}, timeout);
|
|
62
|
+
});
|
|
63
|
+
let returnValue;
|
|
64
|
+
try {
|
|
65
|
+
returnValue = await Promise.race([scriptPromise, timeoutPromise]);
|
|
66
|
+
clearTimeout(timeoutId);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
clearTimeout(timeoutId);
|
|
70
|
+
result.status = "FAIL";
|
|
71
|
+
result.description = `Script execution failed: ${error.message}`;
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
result.outputs.result = returnValue;
|
|
75
|
+
const serialized = serializeBrowserResult(returnValue);
|
|
76
|
+
// Evaluate expected output (substring or /regex/) against the serialized value.
|
|
77
|
+
if (step.runBrowserScript.output) {
|
|
78
|
+
if (!matchesExpectedOutput(serialized, step.runBrowserScript.output)) {
|
|
79
|
+
result.status = "FAIL";
|
|
80
|
+
result.description = `Couldn't find expected output (${step.runBrowserScript.output}) in the script's return value.`;
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Check if the return value is saved to a file. Wrap the filesystem work so a
|
|
85
|
+
// permissions error, bad path, full disk, or a file deleted mid-run returns a
|
|
86
|
+
// deterministic FAIL instead of throwing out of the runner.
|
|
87
|
+
if (step.runBrowserScript.path) {
|
|
88
|
+
try {
|
|
89
|
+
const dir = path.dirname(step.runBrowserScript.path);
|
|
90
|
+
// If `dir` doesn't exist, create it
|
|
91
|
+
if (!fs.existsSync(dir)) {
|
|
92
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
93
|
+
}
|
|
94
|
+
const filePath = step.runBrowserScript.path;
|
|
95
|
+
log(config, "debug", `Saving script result to file: ${filePath}`);
|
|
96
|
+
if (!fs.existsSync(filePath)) {
|
|
97
|
+
// Doesn't exist, save output to file
|
|
98
|
+
fs.writeFileSync(filePath, serialized);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
const existingFile = fs.readFileSync(filePath, "utf8");
|
|
102
|
+
const fractionalDiff = calculateFractionalDifference(existingFile, serialized);
|
|
103
|
+
log(config, "debug", `Fractional difference: ${fractionalDiff}`);
|
|
104
|
+
if (fractionalDiff > step.runBrowserScript.maxVariation) {
|
|
105
|
+
if (step.runBrowserScript.overwrite == "aboveVariation" ||
|
|
106
|
+
step.runBrowserScript.overwrite == "true") {
|
|
107
|
+
fs.writeFileSync(filePath, serialized);
|
|
108
|
+
result.description += ` Saved output to file.`;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
result.description += ` Didn't overwrite the existing file.`;
|
|
112
|
+
}
|
|
113
|
+
result.status = "WARNING";
|
|
114
|
+
result.description += ` The difference between the existing output and the new output (${fractionalDiff.toFixed(2)}) is greater than the max accepted variation (${step.runBrowserScript.maxVariation}).`;
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
// Within variation: only "true" forces a rewrite; otherwise the
|
|
118
|
+
// existing file is left as-is and the step passes without a note.
|
|
119
|
+
if (step.runBrowserScript.overwrite == "true") {
|
|
120
|
+
fs.writeFileSync(filePath, serialized);
|
|
121
|
+
result.description += ` Saved output to file.`;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
result.status = "FAIL";
|
|
127
|
+
result.description = `Couldn't persist script output at ${step.runBrowserScript.path}: ${error.message}`;
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=runBrowserScript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runBrowserScript.js","sourceRoot":"","sources":["../../../src/core/tests/runBrowserScript.ts"],"names":[],"mappings":"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"}
|
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":"AAQA,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
|
@@ -7,6 +7,8 @@ import kill from "tree-kill";
|
|
|
7
7
|
// to a non-runtime identifier.
|
|
8
8
|
import { loadHeavyDep, resolveHeavyDepPath } from "../runtime/loader.js";
|
|
9
9
|
import { requiredBrowserAssets, ensureBrowserInstalled, } from "../runtime/browsers.js";
|
|
10
|
+
// Single source of truth for browser/driver-requiring step keys.
|
|
11
|
+
import { BROWSER_STEP_KEYS as driverActions } from "../runtime/browserStepKeys.js";
|
|
10
12
|
import os from "node:os";
|
|
11
13
|
import { log, replaceEnvs, selectSpecsForRun, findFreePort, runConcurrent, rollUpResults, createAppiumPool, getRunOutputDir, runArchivesArtifacts, sanitizeFilesystemName, } from "./utils.js";
|
|
12
14
|
import axios from "axios";
|
|
@@ -27,6 +29,7 @@ import { loadCookie } from "./tests/loadCookie.js";
|
|
|
27
29
|
import { httpRequest } from "./tests/httpRequest.js";
|
|
28
30
|
import { clickElement } from "./tests/click.js";
|
|
29
31
|
import { runCode } from "./tests/runCode.js";
|
|
32
|
+
import { runBrowserScript } from "./tests/runBrowserScript.js";
|
|
30
33
|
import { dragAndDropElement } from "./tests/dragAndDrop.js";
|
|
31
34
|
import path from "node:path";
|
|
32
35
|
import { spawn } from "node:child_process";
|
|
@@ -44,19 +47,6 @@ export { runSpecs, runViaApi, getRunner, ensureChromeAvailable, ensureContextBro
|
|
|
44
47
|
// exports.appiumStart = appiumStart;
|
|
45
48
|
// exports.appiumIsReady = appiumIsReady;
|
|
46
49
|
// exports.driverStart = driverStart;
|
|
47
|
-
// Doc Detective actions that require a driver.
|
|
48
|
-
const driverActions = [
|
|
49
|
-
"click",
|
|
50
|
-
"dragAndDrop",
|
|
51
|
-
"stopRecord",
|
|
52
|
-
"find",
|
|
53
|
-
"goTo",
|
|
54
|
-
"loadCookie",
|
|
55
|
-
"record",
|
|
56
|
-
"saveCookie",
|
|
57
|
-
"screenshot",
|
|
58
|
-
"type",
|
|
59
|
-
];
|
|
60
50
|
// Browser names getDriverCapabilities knows how to build caps for. `safari` is
|
|
61
51
|
// rewritten to `webkit` during context resolution, so both appear here.
|
|
62
52
|
const KNOWN_BROWSERS = ["firefox", "chrome", "safari", "webkit"];
|
|
@@ -771,9 +761,15 @@ async function runSpecs({ resolvedTests }) {
|
|
|
771
761
|
warmUpResults,
|
|
772
762
|
});
|
|
773
763
|
}
|
|
774
|
-
// Phase 2: run
|
|
775
|
-
//
|
|
776
|
-
|
|
764
|
+
// Phase 2: run context jobs through the worker pool, gated into three
|
|
765
|
+
// sequential phases. Config-level `beforeAny` specs all finish before any
|
|
766
|
+
// `main` test starts, and `afterAll` specs run only after every `main` test
|
|
767
|
+
// finishes. Within a phase, jobs still run concurrently up to `limit`.
|
|
768
|
+
// Warm-up / recording-concurrency / Appium-pool sizing above intentionally
|
|
769
|
+
// stay computed over the full `jobs[]`. Untagged jobs (programmatic callers
|
|
770
|
+
// that bypass detection) default to "main". With limit===1 this is identical
|
|
771
|
+
// ordering to a single pool over input-ordered jobs.
|
|
772
|
+
const runJob = async (job) => {
|
|
777
773
|
try {
|
|
778
774
|
job.contexts[job.slot] = await runContext({
|
|
779
775
|
config,
|
|
@@ -804,7 +800,25 @@ async function runSpecs({ resolvedTests }) {
|
|
|
804
800
|
steps: [],
|
|
805
801
|
};
|
|
806
802
|
}
|
|
807
|
-
}
|
|
803
|
+
};
|
|
804
|
+
const PHASES = ["beforeAny", "main", "afterAll"];
|
|
805
|
+
const jobsByPhase = {
|
|
806
|
+
beforeAny: [],
|
|
807
|
+
main: [],
|
|
808
|
+
afterAll: [],
|
|
809
|
+
};
|
|
810
|
+
for (const job of jobs) {
|
|
811
|
+
// Constrain to the known set before indexing: a programmatic caller could
|
|
812
|
+
// set `_phase` to a prototype key (e.g. "__proto__" / "toString") where
|
|
813
|
+
// jobsByPhase[phase] is truthy-but-not-an-array and .push would throw.
|
|
814
|
+
const phase = PHASES.includes(job.spec?._phase)
|
|
815
|
+
? job.spec._phase
|
|
816
|
+
: "main";
|
|
817
|
+
jobsByPhase[phase].push(job);
|
|
818
|
+
}
|
|
819
|
+
for (const phase of PHASES) {
|
|
820
|
+
await runConcurrent(jobsByPhase[phase], limit, runJob);
|
|
821
|
+
}
|
|
808
822
|
// Phase 3: roll results up the tree and count the summary in one
|
|
809
823
|
// deterministic pass after all contexts have finished.
|
|
810
824
|
for (const specReport of report.specs) {
|
|
@@ -1380,16 +1394,21 @@ async function runContext({ config, spec, test, context, runnerDetails, appiumPo
|
|
|
1380
1394
|
result: "SKIPPED",
|
|
1381
1395
|
resultDescription: "Skipped because unsafe steps aren't allowed.",
|
|
1382
1396
|
};
|
|
1397
|
+
delete stepReport._fromAfter;
|
|
1383
1398
|
contextReport.steps.push(stepReport);
|
|
1384
1399
|
continue;
|
|
1385
1400
|
}
|
|
1386
|
-
|
|
1401
|
+
// Skip remaining steps after a failure — but NOT cleanup (`_fromAfter`)
|
|
1402
|
+
// steps. Cleanup is hard-routed: it runs after the test no matter what
|
|
1403
|
+
// routing (here, skip-on-failure) happened during execution.
|
|
1404
|
+
if (stepExecutionFailed && !step._fromAfter) {
|
|
1387
1405
|
// Mark as skipped
|
|
1388
1406
|
const stepReport = {
|
|
1389
1407
|
...step,
|
|
1390
1408
|
result: "SKIPPED",
|
|
1391
1409
|
resultDescription: "Skipped due to previous failure in context.",
|
|
1392
1410
|
};
|
|
1411
|
+
delete stepReport._fromAfter;
|
|
1393
1412
|
contextReport.steps.push(stepReport);
|
|
1394
1413
|
continue;
|
|
1395
1414
|
}
|
|
@@ -1416,6 +1435,8 @@ async function runContext({ config, spec, test, context, runnerDetails, appiumPo
|
|
|
1416
1435
|
...step,
|
|
1417
1436
|
...stepResult,
|
|
1418
1437
|
};
|
|
1438
|
+
// Internal cleanup marker never leaks into the report.
|
|
1439
|
+
delete stepReport._fromAfter;
|
|
1419
1440
|
// Capture a post-step screenshot for autoScreenshot runs. Applies to
|
|
1420
1441
|
// browser steps (explicit `screenshot` steps already produce an image);
|
|
1421
1442
|
// failed steps are captured too — the failure frame is often the most
|
|
@@ -1438,8 +1459,11 @@ async function runContext({ config, spec, test, context, runnerDetails, appiumPo
|
|
|
1438
1459
|
stepReport.autoScreenshot = capturedPath;
|
|
1439
1460
|
}
|
|
1440
1461
|
contextReport.steps.push(stepReport);
|
|
1441
|
-
// If this step failed, set flag to skip remaining steps
|
|
1442
|
-
|
|
1462
|
+
// If this step failed, set flag to skip remaining steps — but a failing
|
|
1463
|
+
// cleanup (`_fromAfter`) step must NOT cascade: it can't skip later
|
|
1464
|
+
// cleanup steps (cleanup is best-effort and must complete). The FAIL still
|
|
1465
|
+
// counts in the rollup so cleanup failures surface.
|
|
1466
|
+
if (stepReport.result === "FAIL" && !step._fromAfter) {
|
|
1443
1467
|
stepExecutionFailed = true;
|
|
1444
1468
|
}
|
|
1445
1469
|
}
|
|
@@ -1612,6 +1636,13 @@ async function runStep({ config = {}, context = {}, step, driver, metaValues = {
|
|
|
1612
1636
|
else if (typeof step.runCode !== "undefined") {
|
|
1613
1637
|
actionResult = await runCode({ config: config, step: step });
|
|
1614
1638
|
}
|
|
1639
|
+
else if (typeof step.runBrowserScript !== "undefined") {
|
|
1640
|
+
actionResult = await runBrowserScript({
|
|
1641
|
+
config: config,
|
|
1642
|
+
step: step,
|
|
1643
|
+
driver: driver,
|
|
1644
|
+
});
|
|
1645
|
+
}
|
|
1615
1646
|
else if (typeof step.runShell !== "undefined") {
|
|
1616
1647
|
actionResult = await runShell({ config: config, step: step });
|
|
1617
1648
|
}
|