@smoothdeploy/playwright 1.60.1 → 1.62.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/lib/agents/copilot-setup-steps.yml +2 -2
- package/lib/agents/generateAgents.js +48 -0
- package/lib/cli/reportActions.js +2 -2
- package/lib/cli/testActions.js +2 -0
- package/lib/common/index.js +246 -187
- package/lib/common/index.js.txt +13 -14
- package/lib/errorContext.js +2 -3
- package/lib/index.js +48 -21
- package/lib/loader/loaderProcessEntry.js +1 -1
- package/lib/matchers/expect.js +4830 -4394
- package/lib/matchers/expect.js.LICENSE +87 -140
- package/lib/matchers/expect.js.txt +30 -35
- package/lib/mcp/test/testContext.js +5 -1
- package/lib/program.js +28 -3
- package/lib/runner/index.js +400 -194
- package/lib/runner/index.js.txt +19 -18
- package/lib/transform/babelBundle.js +12899 -11654
- package/lib/transform/babelBundle.js.LICENSE +379 -354
- package/lib/transform/babelBundle.js.txt +39 -39
- package/lib/transform/esmLoader.js +3275 -1154
- package/lib/transform/esmLoader.js.LICENSE +81 -61
- package/lib/transform/esmLoader.js.txt +23 -18
- package/lib/util.js +14 -44
- package/lib/worker/workerProcessEntry.js +60 -1461
- package/lib/worker/workerProcessEntry.js.txt +8 -13
- package/package.json +3 -6
- package/types/test.d.ts +458 -21
- package/types/testReporter.d.ts +79 -4
package/lib/common/index.js.txt
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
# packages/playwright/lib/common/index.js
|
|
2
|
-
# total:
|
|
2
|
+
# total: 114.5 KB
|
|
3
3
|
|
|
4
4
|
## Inlined (20)
|
|
5
|
-
|
|
5
|
+
12.0 KB packages/playwright/src/common/config.ts
|
|
6
6
|
13.7 KB packages/playwright/src/common/configLoader.ts
|
|
7
|
-
|
|
8
|
-
10.9 KB packages/playwright/src/common/fixtures.ts
|
|
7
|
+
11.5 KB packages/playwright/src/common/fixtures.ts
|
|
9
8
|
0.8 KB packages/playwright/src/common/index.ts
|
|
10
9
|
1.3 KB packages/playwright/src/common/ipc.ts
|
|
11
10
|
2.1 KB packages/playwright/src/common/poolBuilder.ts
|
|
12
|
-
3.
|
|
11
|
+
3.9 KB packages/playwright/src/common/process.ts
|
|
13
12
|
4.7 KB packages/playwright/src/common/suiteUtils.ts
|
|
14
|
-
|
|
15
|
-
2.
|
|
16
|
-
12.
|
|
13
|
+
8.5 KB packages/playwright/src/common/test.ts
|
|
14
|
+
2.0 KB packages/playwright/src/common/testLoader.ts
|
|
15
|
+
12.6 KB packages/playwright/src/common/testType.ts
|
|
17
16
|
1.2 KB packages/playwright/src/common/validators.ts
|
|
18
17
|
1.3 KB packages/playwright/src/isomorphic/teleReceiver.ts
|
|
19
|
-
9.
|
|
18
|
+
9.7 KB packages/playwright/src/transform/compilationCache.ts
|
|
19
|
+
1.7 KB packages/playwright/src/transform/esmLoaderSync.ts
|
|
20
20
|
1.1 KB packages/playwright/src/transform/pirates.ts
|
|
21
21
|
1.1 KB packages/playwright/src/transform/portTransport.ts
|
|
22
|
-
|
|
23
|
-
2
|
|
24
|
-
7.
|
|
22
|
+
12.3 KB packages/playwright/src/transform/transform.ts
|
|
23
|
+
3.2 KB packages/playwright/src/transform/tsconfig-loader.ts
|
|
24
|
+
7.0 KB packages/playwright/src/util.ts
|
|
25
25
|
|
|
26
|
-
## External (
|
|
26
|
+
## External (8)
|
|
27
27
|
../globals
|
|
28
28
|
../matchers/expect
|
|
29
29
|
../package
|
|
@@ -32,4 +32,3 @@
|
|
|
32
32
|
playwright-core/lib/bootstrap
|
|
33
33
|
playwright-core/lib/coreBundle
|
|
34
34
|
playwright-core/lib/utilsBundle
|
|
35
|
-
playwright-core/package.json
|
package/lib/errorContext.js
CHANGED
|
@@ -32,9 +32,8 @@ __export(errorContext_exports, {
|
|
|
32
32
|
});
|
|
33
33
|
module.exports = __toCommonJS(errorContext_exports);
|
|
34
34
|
var import_fs = __toESM(require("fs"));
|
|
35
|
-
var import_path = __toESM(require("path"));
|
|
36
35
|
var import_util = require("./util");
|
|
37
|
-
const { parseErrorStack } = require("playwright-core/lib/coreBundle").
|
|
36
|
+
const { parseErrorStack } = require("playwright-core/lib/coreBundle").utils;
|
|
38
37
|
const { stripAnsiEscapes } = require("playwright-core/lib/coreBundle").iso;
|
|
39
38
|
const fixTestInstructions = `# Instructions
|
|
40
39
|
|
|
@@ -101,7 +100,7 @@ function buildCodeFrame(error, testLocation) {
|
|
|
101
100
|
const stack = error.stack;
|
|
102
101
|
if (!stack)
|
|
103
102
|
return void 0;
|
|
104
|
-
const parsed = parseErrorStack(stack
|
|
103
|
+
const parsed = parseErrorStack(stack);
|
|
105
104
|
const errorLocation = parsed.location;
|
|
106
105
|
if (!errorLocation)
|
|
107
106
|
return void 0;
|
package/lib/index.js
CHANGED
|
@@ -45,7 +45,6 @@ var import_utilsBundle = require("playwright-core/lib/utilsBundle");
|
|
|
45
45
|
var import_errorContext = require("./errorContext");
|
|
46
46
|
var import_common = require("./common");
|
|
47
47
|
var globals = __toESM(require("./globals"));
|
|
48
|
-
var import_package = require("./package");
|
|
49
48
|
var import_browserBackend = require("./mcp/test/browserBackend");
|
|
50
49
|
var import_expect = require("./matchers/expect");
|
|
51
50
|
var import_common2 = require("./common");
|
|
@@ -56,10 +55,9 @@ const { escapeHTML } = require("playwright-core/lib/coreBundle").iso;
|
|
|
56
55
|
const { jsonStringifyForceASCII } = require("playwright-core/lib/coreBundle").utils;
|
|
57
56
|
const { createGuid } = require("playwright-core/lib/coreBundle").utils;
|
|
58
57
|
const { debugMode } = require("playwright-core/lib/coreBundle").utils;
|
|
59
|
-
const {
|
|
58
|
+
const { debugLogger } = require("playwright-core/lib/coreBundle").utils;
|
|
60
59
|
const { currentZone } = require("playwright-core/lib/coreBundle").utils;
|
|
61
60
|
const _baseTest = import_common.testType.rootTestType.test;
|
|
62
|
-
setBoxedStackPrefixes([import_package.packageRoot]);
|
|
63
61
|
if (process["__pw_initiator__"]) {
|
|
64
62
|
const originalStackTraceLimit = Error.stackTraceLimit;
|
|
65
63
|
Error.stackTraceLimit = 200;
|
|
@@ -402,16 +400,6 @@ const playwrightFixtures = {
|
|
|
402
400
|
}
|
|
403
401
|
} : {};
|
|
404
402
|
const context = await browser.newContext({ ...videoOptions, ...options });
|
|
405
|
-
if (process.env.PW_CLOCK === "frozen") {
|
|
406
|
-
await context._wrapApiCall(async () => {
|
|
407
|
-
await context.clock.install({ time: 0 });
|
|
408
|
-
await context.clock.pauseAt(1e3);
|
|
409
|
-
}, { internal: true });
|
|
410
|
-
} else if (process.env.PW_CLOCK === "realtime") {
|
|
411
|
-
await context._wrapApiCall(async () => {
|
|
412
|
-
await context.clock.install({ time: 0 });
|
|
413
|
-
}, { internal: true });
|
|
414
|
-
}
|
|
415
403
|
let closed = false;
|
|
416
404
|
const close = async () => {
|
|
417
405
|
if (closed)
|
|
@@ -419,8 +407,7 @@ const playwrightFixtures = {
|
|
|
419
407
|
closed = true;
|
|
420
408
|
const closeReason = testInfo.status === "timedOut" ? "Test timeout of " + testInfo.timeout + "ms exceeded." : "Test ended.";
|
|
421
409
|
await context.close({ reason: closeReason });
|
|
422
|
-
const
|
|
423
|
-
const preserveVideo = captureVideo && (videoMode === "on" || testFailed && videoMode === "retain-on-failure" || videoMode === "on-first-retry" && testInfo.retry === 1);
|
|
410
|
+
const preserveVideo = captureVideo && shouldPreserveVideo(videoMode, testInfo);
|
|
424
411
|
if (preserveVideo) {
|
|
425
412
|
const { pagesWithVideo: pagesForVideo } = contexts.get(context);
|
|
426
413
|
const videos = pagesForVideo.map((p) => p.video()).filter((video2) => !!video2);
|
|
@@ -445,9 +432,10 @@ const playwrightFixtures = {
|
|
|
445
432
|
}, { scope: "test", title: "context", box: true }],
|
|
446
433
|
_optionContextReuseMode: ["none", { scope: "worker", option: true, box: true }],
|
|
447
434
|
_optionConnectOptions: [void 0, { scope: "worker", option: true, box: true }],
|
|
448
|
-
|
|
435
|
+
reuseContext: [false, { scope: "worker", option: true, box: true }],
|
|
436
|
+
_reuseContext: [async ({ video, _optionContextReuseMode, reuseContext }, use) => {
|
|
449
437
|
let mode = _optionContextReuseMode;
|
|
450
|
-
if (process.env.PW_TEST_REUSE_CONTEXT)
|
|
438
|
+
if (process.env.PW_TEST_REUSE_CONTEXT || reuseContext)
|
|
451
439
|
mode = "when-possible";
|
|
452
440
|
const reuse = mode === "when-possible" && normalizeVideoMode(video) === "off";
|
|
453
441
|
await use(reuse);
|
|
@@ -479,6 +467,28 @@ const playwrightFixtures = {
|
|
|
479
467
|
if (!page)
|
|
480
468
|
page = await context.newPage();
|
|
481
469
|
await use(page);
|
|
470
|
+
},
|
|
471
|
+
mount: async ({ page, baseURL }, use) => {
|
|
472
|
+
const callMount = (params) => page.evaluate(async (p) => {
|
|
473
|
+
const w = window;
|
|
474
|
+
if (typeof w.mount !== "function")
|
|
475
|
+
throw new Error("The gallery page does not define window.mount().");
|
|
476
|
+
await w.mount(p);
|
|
477
|
+
}, params, { exposeFunctions: true });
|
|
478
|
+
await use(async (storyId, props) => {
|
|
479
|
+
if (!baseURL)
|
|
480
|
+
throw new Error("mount() requires `baseURL` to point at the component gallery. Set it in your Playwright config.");
|
|
481
|
+
await page.goto(baseURL);
|
|
482
|
+
await callMount({ story: storyId, props });
|
|
483
|
+
return Object.assign(page.locator("#root"), {
|
|
484
|
+
// update() re-renders the same story with new props without navigating; if the gallery
|
|
485
|
+
// reuses its root/instance, the framework reconciles and component state is preserved.
|
|
486
|
+
update: (newProps) => callMount({ story: storyId, props: newProps }),
|
|
487
|
+
unmount: () => page.evaluate(async () => {
|
|
488
|
+
await window.unmount?.();
|
|
489
|
+
})
|
|
490
|
+
});
|
|
491
|
+
});
|
|
482
492
|
}
|
|
483
493
|
};
|
|
484
494
|
function normalizeVideoMode(video) {
|
|
@@ -490,7 +500,23 @@ function normalizeVideoMode(video) {
|
|
|
490
500
|
return videoMode;
|
|
491
501
|
}
|
|
492
502
|
function shouldCaptureVideo(videoMode, testInfo) {
|
|
493
|
-
return videoMode === "on" || videoMode === "retain-on-failure" || videoMode === "on-first-retry" && testInfo.retry === 1;
|
|
503
|
+
return videoMode === "on" || videoMode === "retain-on-failure" || videoMode === "retain-on-failure-and-retries" || videoMode === "on-first-retry" && testInfo.retry === 1 || videoMode === "on-all-retries" && testInfo.retry > 0 || videoMode === "retain-on-first-failure" && testInfo.retry === 0;
|
|
504
|
+
}
|
|
505
|
+
function shouldPreserveVideo(videoMode, testInfo) {
|
|
506
|
+
const testFailed = testInfo.status !== testInfo.expectedStatus;
|
|
507
|
+
switch (videoMode) {
|
|
508
|
+
case "on":
|
|
509
|
+
case "on-first-retry":
|
|
510
|
+
case "on-all-retries":
|
|
511
|
+
return true;
|
|
512
|
+
case "retain-on-failure":
|
|
513
|
+
case "retain-on-first-failure":
|
|
514
|
+
return testFailed;
|
|
515
|
+
case "retain-on-failure-and-retries":
|
|
516
|
+
return testFailed || testInfo.retry > 0;
|
|
517
|
+
default:
|
|
518
|
+
return false;
|
|
519
|
+
}
|
|
494
520
|
}
|
|
495
521
|
function normalizeScreenshotMode(screenshot) {
|
|
496
522
|
if (!screenshot)
|
|
@@ -528,7 +554,7 @@ function resolveClientCerticates(clientCertificates) {
|
|
|
528
554
|
}
|
|
529
555
|
return clientCertificates;
|
|
530
556
|
}
|
|
531
|
-
const kTracingStarted = Symbol("kTracingStarted");
|
|
557
|
+
const kTracingStarted = /* @__PURE__ */ Symbol("kTracingStarted");
|
|
532
558
|
function connectOptionsFromEnv() {
|
|
533
559
|
const wsEndpoint = process.env.PW_TEST_CONNECT_WS_ENDPOINT;
|
|
534
560
|
if (!wsEndpoint)
|
|
@@ -617,7 +643,7 @@ class ArtifactsRecorder {
|
|
|
617
643
|
this._resultScreenshots = resultScreenshots;
|
|
618
644
|
this._pauseOnFailure = pauseOnFailure;
|
|
619
645
|
const screenshotOptions = typeof screenshot === "string" ? void 0 : screenshot;
|
|
620
|
-
this._startedCollectingArtifacts = Symbol("startedCollectingArtifacts");
|
|
646
|
+
this._startedCollectingArtifacts = /* @__PURE__ */ Symbol("startedCollectingArtifacts");
|
|
621
647
|
this._screenshotRecorder = new SnapshotRecorder(this, normalizeScreenshotMode(screenshot), "screenshot", "image/png", ".png", async (page, path2) => {
|
|
622
648
|
await page._wrapApiCall(async () => {
|
|
623
649
|
await page.screenshot({ ...screenshotOptions, timeout: 5e3, path: path2, caret: "initial" });
|
|
@@ -656,7 +682,8 @@ class ArtifactsRecorder {
|
|
|
656
682
|
await page._wrapApiCall(async () => {
|
|
657
683
|
this._pageSnapshot = await page.ariaSnapshot({ mode: "ai", timeout: 5e3 });
|
|
658
684
|
}, { internal: true });
|
|
659
|
-
} catch {
|
|
685
|
+
} catch (error) {
|
|
686
|
+
debugLogger.log("error", `failed to capture aria snapshot: ${error}`);
|
|
660
687
|
}
|
|
661
688
|
}
|
|
662
689
|
async didCreateRequestContext(context) {
|
|
@@ -24,7 +24,7 @@ var LoaderMain = class extends import_common.ProcessRunner {
|
|
|
24
24
|
return { fileSuite: fileSuite._deepSerialize(), testErrors };
|
|
25
25
|
}
|
|
26
26
|
async getCompilationCacheFromLoader() {
|
|
27
|
-
await import_common.
|
|
27
|
+
await import_common.transform.incorporateCompilationCache();
|
|
28
28
|
return import_common.cc.serializeCompilationCache();
|
|
29
29
|
}
|
|
30
30
|
};
|