@apica-io/asm-playwright-runner 1.0.0-dev.3 → 1.0.0-dev.5
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/actions.js +27 -38
- package/dist/cli/index.js +5 -14
- package/dist/lib/helper.js +21 -52
- package/dist/lib/parser.js +251 -281
- package/dist/runner.js +188 -203
- package/package.json +5 -6
- package/samples/playwright-script.spec.ts +7 -7
- package/samples/playwright-test-script.spec.ts +0 -2
- package/src/lib/parser.ts +1 -1
- package/src/runner.ts +1 -0
- package/tsconfig.json +9 -17
package/dist/actions.js
CHANGED
|
@@ -1,47 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.actionRegistry = void 0;
|
|
13
|
-
function assertStringContains(source, expected) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
});
|
|
4
|
+
async function assertStringContains(source, expected) {
|
|
5
|
+
const value = await source();
|
|
6
|
+
if (!value?.includes(expected)) {
|
|
7
|
+
throw new Error(`Expected "${expected}" in "${value}"`);
|
|
8
|
+
}
|
|
20
9
|
}
|
|
21
10
|
exports.actionRegistry = {
|
|
22
|
-
goto: (page, step) =>
|
|
23
|
-
click: (page, step) =>
|
|
24
|
-
type: (page, step) =>
|
|
25
|
-
screenshot: (page, step) =>
|
|
26
|
-
reload: (page) =>
|
|
27
|
-
waitForSelector: (page, step) =>
|
|
28
|
-
hover: (page, step) =>
|
|
29
|
-
dblclick: (page, step) =>
|
|
30
|
-
check: (page, step) =>
|
|
31
|
-
uncheck: (page, step) =>
|
|
32
|
-
selectOption: (page, step) =>
|
|
33
|
-
press: (page, step) =>
|
|
34
|
-
waitForTimeout: (page, step) =>
|
|
35
|
-
keyboardType: (page, step) =>
|
|
36
|
-
keyboardPress: (page, step) =>
|
|
37
|
-
assertText: (page, step) =>
|
|
38
|
-
assertTitle: (page, step) =>
|
|
39
|
-
uploadFile: (page, step) =>
|
|
40
|
-
waitForResponse: (page, step) =>
|
|
41
|
-
assertVisible: (page, step) =>
|
|
42
|
-
const isVisible =
|
|
11
|
+
goto: async (page, step) => page.goto(step.url),
|
|
12
|
+
click: async (page, step) => page.click(step.selector),
|
|
13
|
+
type: async (page, step) => page.fill(step.selector, step.value),
|
|
14
|
+
screenshot: async (page, step) => page.screenshot({ path: step.path }),
|
|
15
|
+
reload: async (page) => page.reload(),
|
|
16
|
+
waitForSelector: async (page, step) => page.waitForSelector(step.selector),
|
|
17
|
+
hover: async (page, step) => page.hover(step.selector),
|
|
18
|
+
dblclick: async (page, step) => page.dblclick(step.selector),
|
|
19
|
+
check: async (page, step) => page.check(step.selector),
|
|
20
|
+
uncheck: async (page, step) => page.uncheck(step.selector),
|
|
21
|
+
selectOption: async (page, step) => page.selectOption(step.selector, step.value),
|
|
22
|
+
press: async (page, step) => page.press(step.selector, step.key),
|
|
23
|
+
waitForTimeout: async (page, step) => page.waitForTimeout(step.ms),
|
|
24
|
+
keyboardType: async (page, step) => page.keyboard.type(step.text),
|
|
25
|
+
keyboardPress: async (page, step) => page.keyboard.press(step.key),
|
|
26
|
+
assertText: async (page, step) => assertStringContains(() => page.textContent(step.selector), step.expected),
|
|
27
|
+
assertTitle: async (page, step) => assertStringContains(() => page.title(), step.expected),
|
|
28
|
+
uploadFile: async (page, step) => page.setInputFiles(step.selector, step.files),
|
|
29
|
+
waitForResponse: async (page, step) => page.waitForResponse(step.urlPattern),
|
|
30
|
+
assertVisible: async (page, step) => {
|
|
31
|
+
const isVisible = await page.isVisible(step.selector);
|
|
43
32
|
if (!isVisible) {
|
|
44
33
|
throw new Error(`Expected element "${step.selector}" to be visible`);
|
|
45
34
|
}
|
|
46
|
-
}
|
|
35
|
+
}
|
|
47
36
|
};
|
package/dist/cli/index.js
CHANGED
|
@@ -23,15 +23,6 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
__setModuleDefault(result, mod);
|
|
24
24
|
return result;
|
|
25
25
|
};
|
|
26
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
27
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
28
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
29
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
30
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
31
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
32
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
33
|
-
});
|
|
34
|
-
};
|
|
35
26
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
27
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
28
|
};
|
|
@@ -84,14 +75,14 @@ var logger = log4js.getLogger(pack.name);
|
|
|
84
75
|
logger.info("%s (%s) started", pack.name, version);
|
|
85
76
|
// now construct runner
|
|
86
77
|
const runner = new runner_1.PlaywrightRunner();
|
|
87
|
-
(() =>
|
|
78
|
+
(async () => {
|
|
88
79
|
const collection = program.args[0];
|
|
89
80
|
const options = program.opts();
|
|
90
81
|
if (!fs_1.default.existsSync(collection) || !fs_1.default.lstatSync(collection).isFile()) {
|
|
91
82
|
console.error("The specified collection file %s does not exist", collection);
|
|
92
83
|
process.exit(9);
|
|
93
84
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
})
|
|
85
|
+
await runner.init(collection, options);
|
|
86
|
+
await runner.run(collection, options);
|
|
87
|
+
await runner.close();
|
|
88
|
+
})();
|
package/dist/lib/helper.js
CHANGED
|
@@ -1,20 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
12
|
-
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
13
|
-
var m = o[Symbol.asyncIterator], i;
|
|
14
|
-
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
15
|
-
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
16
|
-
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
17
|
-
};
|
|
18
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
19
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
20
4
|
};
|
|
@@ -42,46 +26,31 @@ function getPackageInfo() {
|
|
|
42
26
|
return packInfo;
|
|
43
27
|
}
|
|
44
28
|
exports.getPackageInfo = getPackageInfo;
|
|
45
|
-
function traceZipToLines(tracePath) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
29
|
+
async function traceZipToLines(tracePath) {
|
|
30
|
+
const directory = await unzipper_1.default.Open.file(tracePath);
|
|
31
|
+
const traceEntry = directory.files.find(file => file.path.endsWith("test.trace"));
|
|
32
|
+
const events = [];
|
|
33
|
+
if (!traceEntry) {
|
|
34
|
+
return events;
|
|
35
|
+
}
|
|
36
|
+
const stream = traceEntry.stream();
|
|
37
|
+
const rl = readline_1.default.createInterface({
|
|
38
|
+
input: stream,
|
|
39
|
+
crlfDelay: Infinity,
|
|
40
|
+
});
|
|
41
|
+
for await (const line of rl) {
|
|
42
|
+
const text = line.toString().trim();
|
|
43
|
+
if (!text) {
|
|
44
|
+
continue;
|
|
53
45
|
}
|
|
54
|
-
const stream = traceEntry.stream();
|
|
55
|
-
const rl = readline_1.default.createInterface({
|
|
56
|
-
input: stream,
|
|
57
|
-
crlfDelay: Infinity,
|
|
58
|
-
});
|
|
59
46
|
try {
|
|
60
|
-
|
|
61
|
-
_c = rl_1_1.value;
|
|
62
|
-
_d = false;
|
|
63
|
-
const line = _c;
|
|
64
|
-
const text = line.toString().trim();
|
|
65
|
-
if (!text) {
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
try {
|
|
69
|
-
events.push(JSON.parse(text));
|
|
70
|
-
}
|
|
71
|
-
catch (err) {
|
|
72
|
-
console.error("Invalid JSON:", text);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
47
|
+
events.push(JSON.parse(text));
|
|
75
48
|
}
|
|
76
|
-
catch (
|
|
77
|
-
|
|
78
|
-
try {
|
|
79
|
-
if (!_d && !_a && (_b = rl_1.return)) yield _b.call(rl_1);
|
|
80
|
-
}
|
|
81
|
-
finally { if (e_1) throw e_1.error; }
|
|
49
|
+
catch (err) {
|
|
50
|
+
console.error("Invalid JSON:", text);
|
|
82
51
|
}
|
|
83
|
-
|
|
84
|
-
|
|
52
|
+
}
|
|
53
|
+
return events;
|
|
85
54
|
}
|
|
86
55
|
exports.traceZipToLines = traceZipToLines;
|
|
87
56
|
function loadFlow(filePath) {
|