playwright 1.56.0-alpha-2025-09-28 → 1.56.0-alpha-2025-09-30
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/mcp/test/seed.js +73 -0
- package/lib/mcp/test/testTools.js +3 -13
- package/lib/program.js +11 -4
- package/package.json +2 -2
- package/types/testReporter.d.ts +1 -1
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var seed_exports = {};
|
|
30
|
+
__export(seed_exports, {
|
|
31
|
+
ensureSeedTest: () => ensureSeedTest,
|
|
32
|
+
seedProject: () => seedProject
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(seed_exports);
|
|
35
|
+
var import_fs = __toESM(require("fs"));
|
|
36
|
+
var import_path = __toESM(require("path"));
|
|
37
|
+
var import_utils = require("playwright-core/lib/utils");
|
|
38
|
+
var import_projectUtils = require("../../runner/projectUtils");
|
|
39
|
+
function seedProject(config, projectName) {
|
|
40
|
+
if (!projectName)
|
|
41
|
+
return (0, import_projectUtils.findTopLevelProjects)(config)[0];
|
|
42
|
+
const project = config.projects.find((p) => p.project.name === projectName);
|
|
43
|
+
if (!project)
|
|
44
|
+
throw new Error(`Project ${projectName} not found`);
|
|
45
|
+
return project;
|
|
46
|
+
}
|
|
47
|
+
async function ensureSeedTest(config, projectName, logNew) {
|
|
48
|
+
const project = seedProject(config, projectName);
|
|
49
|
+
const files = await (0, import_projectUtils.collectFilesForProject)(project);
|
|
50
|
+
const seed = files.find((file) => import_path.default.basename(file).includes("seed"));
|
|
51
|
+
if (seed)
|
|
52
|
+
return seed;
|
|
53
|
+
const testDir = project.project.testDir;
|
|
54
|
+
const seedFile = import_path.default.resolve(testDir, "seed.spec.ts");
|
|
55
|
+
if (logNew) {
|
|
56
|
+
console.log(`Writing file: ${import_path.default.relative(process.cwd(), seedFile)}`);
|
|
57
|
+
}
|
|
58
|
+
await (0, import_utils.mkdirIfNeeded)(seedFile);
|
|
59
|
+
await import_fs.default.promises.writeFile(seedFile, `import { test, expect } from '@playwright/test';
|
|
60
|
+
|
|
61
|
+
test.describe('Test group', () => {
|
|
62
|
+
test('seed', async ({ page }) => {
|
|
63
|
+
// generate code here.
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
`);
|
|
67
|
+
return seedFile;
|
|
68
|
+
}
|
|
69
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
70
|
+
0 && (module.exports = {
|
|
71
|
+
ensureSeedTest,
|
|
72
|
+
seedProject
|
|
73
|
+
});
|
|
@@ -41,7 +41,7 @@ var import_bundle = require("../sdk/bundle");
|
|
|
41
41
|
var import_base = require("../../reporters/base");
|
|
42
42
|
var import_list = __toESM(require("../../reporters/list"));
|
|
43
43
|
var import_listModeReporter = __toESM(require("../../reporters/listModeReporter"));
|
|
44
|
-
var
|
|
44
|
+
var import_seed = require("./seed");
|
|
45
45
|
var import_testTool = require("./testTool");
|
|
46
46
|
var import_streams = require("./streams");
|
|
47
47
|
var import_util = require("../../util");
|
|
@@ -132,22 +132,12 @@ const setupPage = (0, import_testTool.defineTestTool)({
|
|
|
132
132
|
const reporter = new import_list.default({ configDir, screen });
|
|
133
133
|
const testRunner = await context.createTestRunner();
|
|
134
134
|
const config = await testRunner.loadConfig();
|
|
135
|
-
const project = params.project ? config.projects.find((p) => p.project.name === params.project) : (0, import_projectUtils.findTopLevelProjects)(config)[0];
|
|
136
|
-
const testDir = project?.project.testDir || configDir;
|
|
137
135
|
let seedFile;
|
|
138
136
|
if (!params.seedFile) {
|
|
139
|
-
seedFile =
|
|
140
|
-
await import_fs.default.promises.mkdir(import_path.default.dirname(seedFile), { recursive: true });
|
|
141
|
-
await import_fs.default.promises.writeFile(seedFile, `import { test, expect } from '@playwright/test';
|
|
142
|
-
|
|
143
|
-
test.describe('Test group', () => {
|
|
144
|
-
test('seed', async ({ page }) => {
|
|
145
|
-
// generate code here.
|
|
146
|
-
});
|
|
147
|
-
});
|
|
148
|
-
`);
|
|
137
|
+
seedFile = await (0, import_seed.ensureSeedTest)(config, params.project, false);
|
|
149
138
|
} else {
|
|
150
139
|
const candidateFiles = [];
|
|
140
|
+
const testDir = (0, import_seed.seedProject)(config, params.project).project.testDir;
|
|
151
141
|
candidateFiles.push(import_path.default.resolve(testDir, params.seedFile));
|
|
152
142
|
candidateFiles.push(import_path.default.resolve(configDir, params.seedFile));
|
|
153
143
|
candidateFiles.push(import_path.default.resolve(context.rootPath, params.seedFile));
|
package/lib/program.js
CHANGED
|
@@ -48,6 +48,7 @@ var import_testRunner = require("./runner/testRunner");
|
|
|
48
48
|
var import_reporters = require("./runner/reporters");
|
|
49
49
|
var import_exports = require("./mcp/sdk/exports");
|
|
50
50
|
var import_testBackend = require("./mcp/test/testBackend");
|
|
51
|
+
var import_seed = require("./mcp/test/seed");
|
|
51
52
|
var import_program3 = require("./mcp/program");
|
|
52
53
|
var import_watchdog = require("./mcp/browser/watchdog");
|
|
53
54
|
var import_generateAgents = require("./agents/generateAgents");
|
|
@@ -176,15 +177,21 @@ function addInitAgentsCommand(program3) {
|
|
|
176
177
|
const option = command.createOption("--loop <loop>", "Agentic loop provider");
|
|
177
178
|
option.choices(["vscode", "claude", "opencode"]);
|
|
178
179
|
command.addOption(option);
|
|
180
|
+
command.option("-c, --config <file>", `Configuration file to find a project to use for seed test`);
|
|
181
|
+
command.option("--project <project>", "Project to use for seed test");
|
|
179
182
|
command.action(async (opts) => {
|
|
180
|
-
if (opts.loop === "opencode")
|
|
183
|
+
if (opts.loop === "opencode") {
|
|
181
184
|
await (0, import_generateAgents.initOpencodeRepo)();
|
|
182
|
-
else if (opts.loop === "vscode")
|
|
185
|
+
} else if (opts.loop === "vscode") {
|
|
183
186
|
await (0, import_generateAgents.initVSCodeRepo)();
|
|
184
|
-
else if (opts.loop === "claude")
|
|
187
|
+
} else if (opts.loop === "claude") {
|
|
185
188
|
await (0, import_generateAgents.initClaudeCodeRepo)();
|
|
186
|
-
else
|
|
189
|
+
} else {
|
|
187
190
|
command.help();
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
const config = await (0, import_configLoader.loadConfigFromFile)(opts.config);
|
|
194
|
+
await (0, import_seed.ensureSeedTest)(config, opts.project, true);
|
|
188
195
|
});
|
|
189
196
|
}
|
|
190
197
|
async function runTests(args, opts) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "playwright",
|
|
3
|
-
"version": "1.56.0-alpha-2025-09-
|
|
3
|
+
"version": "1.56.0-alpha-2025-09-30",
|
|
4
4
|
"description": "A high-level API to automate web browsers",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
},
|
|
65
65
|
"license": "Apache-2.0",
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"playwright-core": "1.56.0-alpha-2025-09-
|
|
67
|
+
"playwright-core": "1.56.0-alpha-2025-09-30"
|
|
68
68
|
},
|
|
69
69
|
"optionalDependencies": {
|
|
70
70
|
"fsevents": "2.3.2"
|
package/types/testReporter.d.ts
CHANGED
|
@@ -773,7 +773,7 @@ export interface TestStep {
|
|
|
773
773
|
* - `hook` for hooks initialization and teardown
|
|
774
774
|
* - `pw:api` for Playwright API calls.
|
|
775
775
|
* - `test.step` for test.step API calls.
|
|
776
|
-
* - `test.attach` for
|
|
776
|
+
* - `test.attach` for testInfo.attach API calls.
|
|
777
777
|
*/
|
|
778
778
|
category: string;
|
|
779
779
|
|