@web/test-runner-commands 0.0.0-canary-20230403143511
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/README.md +7 -0
- package/browser/commands.d.ts +297 -0
- package/browser/commands.mjs +223 -0
- package/dist/a11ySnapshotPlugin.d.ts +6 -0
- package/dist/a11ySnapshotPlugin.d.ts.map +1 -0
- package/dist/a11ySnapshotPlugin.js +44 -0
- package/dist/a11ySnapshotPlugin.js.map +1 -0
- package/dist/emulateMediaPlugin.d.ts +9 -0
- package/dist/emulateMediaPlugin.d.ts.map +1 -0
- package/dist/emulateMediaPlugin.js +55 -0
- package/dist/emulateMediaPlugin.js.map +1 -0
- package/dist/filePlugin.d.ts +16 -0
- package/dist/filePlugin.d.ts.map +1 -0
- package/dist/filePlugin.js +95 -0
- package/dist/filePlugin.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/selectOptionPlugin.d.ts +17 -0
- package/dist/selectOptionPlugin.d.ts.map +1 -0
- package/dist/selectOptionPlugin.js +97 -0
- package/dist/selectOptionPlugin.js.map +1 -0
- package/dist/sendKeysPlugin.d.ts +17 -0
- package/dist/sendKeysPlugin.d.ts.map +1 -0
- package/dist/sendKeysPlugin.js +104 -0
- package/dist/sendKeysPlugin.js.map +1 -0
- package/dist/sendMousePlugin.d.ts +24 -0
- package/dist/sendMousePlugin.d.ts.map +1 -0
- package/dist/sendMousePlugin.js +133 -0
- package/dist/sendMousePlugin.js.map +1 -0
- package/dist/setUserAgentPlugin.d.ts +3 -0
- package/dist/setUserAgentPlugin.d.ts.map +1 -0
- package/dist/setUserAgentPlugin.js +23 -0
- package/dist/setUserAgentPlugin.js.map +1 -0
- package/dist/setViewportPlugin.d.ts +9 -0
- package/dist/setViewportPlugin.d.ts.map +1 -0
- package/dist/setViewportPlugin.js +48 -0
- package/dist/setViewportPlugin.js.map +1 -0
- package/dist/snapshotPlugin.d.ts +10 -0
- package/dist/snapshotPlugin.d.ts.map +1 -0
- package/dist/snapshotPlugin.js +177 -0
- package/dist/snapshotPlugin.js.map +1 -0
- package/index.d.ts +2 -0
- package/package.json +60 -0
- package/plugins.d.ts +2 -0
- package/plugins.js +2 -0
- package/plugins.mjs +24 -0
- package/src/a11ySnapshotPlugin.ts +53 -0
- package/src/emulateMediaPlugin.ts +75 -0
- package/src/filePlugin.ts +108 -0
- package/src/index.ts +8 -0
- package/src/selectOptionPlugin.ts +122 -0
- package/src/sendKeysPlugin.ts +124 -0
- package/src/sendMousePlugin.ts +191 -0
- package/src/setUserAgentPlugin.ts +25 -0
- package/src/setViewportPlugin.ts +59 -0
- package/src/snapshotPlugin.ts +205 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.filePlugin = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const util_1 = require("util");
|
|
10
|
+
const mkdirp_1 = __importDefault(require("mkdirp"));
|
|
11
|
+
const readFile = util_1.promisify(fs_1.default.readFile);
|
|
12
|
+
const writeFile = util_1.promisify(fs_1.default.writeFile);
|
|
13
|
+
const unlink = util_1.promisify(fs_1.default.unlink);
|
|
14
|
+
const access = util_1.promisify(fs_1.default.access);
|
|
15
|
+
async function fileExists(filePath) {
|
|
16
|
+
try {
|
|
17
|
+
await access(filePath);
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
catch (_a) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function isObject(payload) {
|
|
25
|
+
return payload != null && typeof payload === 'object';
|
|
26
|
+
}
|
|
27
|
+
function isWriteFilePayload(payload) {
|
|
28
|
+
if (!isObject(payload))
|
|
29
|
+
throw new Error('You must provide a payload object');
|
|
30
|
+
if (typeof payload.path !== 'string')
|
|
31
|
+
throw new Error('You must provide a path option');
|
|
32
|
+
if (typeof payload.content !== 'string')
|
|
33
|
+
throw new Error('You must provide a content option');
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
function isReadFilePayload(payload) {
|
|
37
|
+
if (!isObject(payload))
|
|
38
|
+
throw new Error('You must provide a payload object');
|
|
39
|
+
if (typeof payload.path !== 'string')
|
|
40
|
+
throw new Error('You must provide a path option');
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
function isRemoveFilePayload(payload) {
|
|
44
|
+
if (!isObject(payload))
|
|
45
|
+
throw new Error('You must provide a payload object');
|
|
46
|
+
if (typeof payload.path !== 'string')
|
|
47
|
+
throw new Error('You must provide a path option');
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
function joinFilePath(testFile, relativePath) {
|
|
51
|
+
if (path_1.default.isAbsolute(relativePath)) {
|
|
52
|
+
throw new Error('file path must not be an absolute path.');
|
|
53
|
+
}
|
|
54
|
+
const dir = path_1.default.dirname(testFile);
|
|
55
|
+
return path_1.default.join(dir, relativePath.split('/').join(path_1.default.sep));
|
|
56
|
+
}
|
|
57
|
+
function filePlugin() {
|
|
58
|
+
return {
|
|
59
|
+
name: 'file-commands',
|
|
60
|
+
async executeCommand({ command, payload, session }) {
|
|
61
|
+
if (command === 'write-file') {
|
|
62
|
+
if (!isWriteFilePayload(payload)) {
|
|
63
|
+
throw new Error('You must provide a payload object');
|
|
64
|
+
}
|
|
65
|
+
const filePath = joinFilePath(session.testFile, payload.path);
|
|
66
|
+
const fileDir = path_1.default.dirname(filePath);
|
|
67
|
+
await mkdirp_1.default(fileDir);
|
|
68
|
+
await writeFile(filePath, payload.content, payload.encoding || 'utf-8');
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
if (command === 'read-file') {
|
|
72
|
+
if (!isReadFilePayload(payload)) {
|
|
73
|
+
throw new Error('You must provide a payload object');
|
|
74
|
+
}
|
|
75
|
+
const filePath = joinFilePath(session.testFile, payload.path);
|
|
76
|
+
if (await fileExists(filePath)) {
|
|
77
|
+
return readFile(filePath, payload.encoding || 'utf-8');
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (command === 'remove-file') {
|
|
84
|
+
if (!isRemoveFilePayload(payload)) {
|
|
85
|
+
throw new Error('You must provide a payload object');
|
|
86
|
+
}
|
|
87
|
+
const filePath = joinFilePath(session.testFile, payload.path);
|
|
88
|
+
await unlink(filePath);
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
exports.filePlugin = filePlugin;
|
|
95
|
+
//# sourceMappingURL=filePlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filePlugin.js","sourceRoot":"","sources":["../src/filePlugin.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { Viewport, setViewportPlugin } from './setViewportPlugin';
|
|
2
|
+
export { Media, emulateMediaPlugin } from './emulateMediaPlugin';
|
|
3
|
+
export { setUserAgentPlugin } from './setUserAgentPlugin';
|
|
4
|
+
export { sendKeysPlugin, SendKeysPayload } from './sendKeysPlugin';
|
|
5
|
+
export { sendMousePlugin, SendMousePayload } from './sendMousePlugin';
|
|
6
|
+
export { a11ySnapshotPlugin, A11ySnapshotPayload } from './a11ySnapshotPlugin';
|
|
7
|
+
export { WriteFilePayload, ReadFilePayload, RemoveFilePayload, filePlugin } from './filePlugin';
|
|
8
|
+
export { SaveSnapshotPayload, SnapshotPluginConfig, snapshotPlugin } from './snapshotPlugin';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.snapshotPlugin = exports.filePlugin = exports.a11ySnapshotPlugin = exports.sendMousePlugin = exports.sendKeysPlugin = exports.setUserAgentPlugin = exports.emulateMediaPlugin = exports.setViewportPlugin = void 0;
|
|
4
|
+
var setViewportPlugin_1 = require("./setViewportPlugin");
|
|
5
|
+
Object.defineProperty(exports, "setViewportPlugin", { enumerable: true, get: function () { return setViewportPlugin_1.setViewportPlugin; } });
|
|
6
|
+
var emulateMediaPlugin_1 = require("./emulateMediaPlugin");
|
|
7
|
+
Object.defineProperty(exports, "emulateMediaPlugin", { enumerable: true, get: function () { return emulateMediaPlugin_1.emulateMediaPlugin; } });
|
|
8
|
+
var setUserAgentPlugin_1 = require("./setUserAgentPlugin");
|
|
9
|
+
Object.defineProperty(exports, "setUserAgentPlugin", { enumerable: true, get: function () { return setUserAgentPlugin_1.setUserAgentPlugin; } });
|
|
10
|
+
var sendKeysPlugin_1 = require("./sendKeysPlugin");
|
|
11
|
+
Object.defineProperty(exports, "sendKeysPlugin", { enumerable: true, get: function () { return sendKeysPlugin_1.sendKeysPlugin; } });
|
|
12
|
+
var sendMousePlugin_1 = require("./sendMousePlugin");
|
|
13
|
+
Object.defineProperty(exports, "sendMousePlugin", { enumerable: true, get: function () { return sendMousePlugin_1.sendMousePlugin; } });
|
|
14
|
+
var a11ySnapshotPlugin_1 = require("./a11ySnapshotPlugin");
|
|
15
|
+
Object.defineProperty(exports, "a11ySnapshotPlugin", { enumerable: true, get: function () { return a11ySnapshotPlugin_1.a11ySnapshotPlugin; } });
|
|
16
|
+
var filePlugin_1 = require("./filePlugin");
|
|
17
|
+
Object.defineProperty(exports, "filePlugin", { enumerable: true, get: function () { return filePlugin_1.filePlugin; } });
|
|
18
|
+
var snapshotPlugin_1 = require("./snapshotPlugin");
|
|
19
|
+
Object.defineProperty(exports, "snapshotPlugin", { enumerable: true, get: function () { return snapshotPlugin_1.snapshotPlugin; } });
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yDAAkE;AAA/C,sHAAA,iBAAiB,OAAA;AACpC,2DAAiE;AAAjD,wHAAA,kBAAkB,OAAA;AAClC,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,mDAAmE;AAA1D,gHAAA,cAAc,OAAA;AACvB,qDAAsE;AAA7D,kHAAA,eAAe,OAAA;AACxB,2DAA+E;AAAtE,wHAAA,kBAAkB,OAAA;AAC3B,2CAAgG;AAAjC,wGAAA,UAAU,OAAA;AACzE,mDAA6F;AAAzC,gHAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { TestRunnerPlugin } from '@web/test-runner-core';
|
|
2
|
+
declare type SelectByValuePayload = {
|
|
3
|
+
selector: string;
|
|
4
|
+
value: string;
|
|
5
|
+
};
|
|
6
|
+
declare type SelectByLabelPayload = {
|
|
7
|
+
selector: string;
|
|
8
|
+
label: string;
|
|
9
|
+
};
|
|
10
|
+
declare type SelectMultipleValuesPayload = {
|
|
11
|
+
selector: string;
|
|
12
|
+
values: string[];
|
|
13
|
+
};
|
|
14
|
+
export declare type SelectOptionPayload = SelectByLabelPayload | SelectByValuePayload | SelectMultipleValuesPayload;
|
|
15
|
+
export declare function selectOptionPlugin(): TestRunnerPlugin<SelectOptionPayload>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=selectOptionPlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectOptionPlugin.d.ts","sourceRoot":"","sources":["../src/selectOptionPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIzD,aAAK,oBAAoB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAChE,aAAK,oBAAoB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAChE,aAAK,2BAA2B,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE1E,oBAAY,mBAAmB,GAC3B,oBAAoB,GACpB,oBAAoB,GACpB,2BAA2B,CAAC;AA8ChC,wBAAgB,kBAAkB,IAAI,gBAAgB,CAAC,mBAAmB,CAAC,CAgE1E"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.selectOptionPlugin = void 0;
|
|
4
|
+
function isObject(payload) {
|
|
5
|
+
return payload != null && typeof payload === 'object';
|
|
6
|
+
}
|
|
7
|
+
function isSelectOptionPayload(payload) {
|
|
8
|
+
const validOptions = ['value', 'label', 'values'];
|
|
9
|
+
if (!isObject(payload))
|
|
10
|
+
throw new Error('You must provide a `SelectOptionPayload` object');
|
|
11
|
+
if (!payload.selector || typeof payload.selector !== 'string') {
|
|
12
|
+
throw new Error(`You must provide a selector representing the select you wish to locate`);
|
|
13
|
+
}
|
|
14
|
+
const numberOfValidOptions = Object.keys(payload).filter(key => validOptions.includes(key)).length;
|
|
15
|
+
const unknownOptions = Object.keys(payload).filter(key => ![...validOptions, 'selector'].includes(key));
|
|
16
|
+
if (numberOfValidOptions === 0)
|
|
17
|
+
throw new Error(`You must provide one of the following properties to pass to the browser runner: ${validOptions.join(', ')}.`);
|
|
18
|
+
if (unknownOptions.length > 0) {
|
|
19
|
+
throw new Error('Unknown options `' + unknownOptions.join(', ') + '` present.');
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
function isValuePayload(payload) {
|
|
24
|
+
return 'selector' in payload && 'value' in payload;
|
|
25
|
+
}
|
|
26
|
+
function isLabelPayload(payload) {
|
|
27
|
+
return 'selector' in payload && 'label' in payload;
|
|
28
|
+
}
|
|
29
|
+
function isMultiplePayload(payload) {
|
|
30
|
+
return 'selector' in payload && 'values' in payload;
|
|
31
|
+
}
|
|
32
|
+
function selectOptionPlugin() {
|
|
33
|
+
return {
|
|
34
|
+
name: 'select-option-command',
|
|
35
|
+
async executeCommand({ command, payload, session }) {
|
|
36
|
+
if (command === 'select-option') {
|
|
37
|
+
if (!isSelectOptionPayload(payload) || !payload) {
|
|
38
|
+
throw new Error('You must provide a `SelectOptionPayload` object');
|
|
39
|
+
}
|
|
40
|
+
// handle specific behavior for playwright
|
|
41
|
+
if (session.browser.type === 'playwright') {
|
|
42
|
+
const page = session.browser.getPage(session.id);
|
|
43
|
+
if (isValuePayload(payload)) {
|
|
44
|
+
const { selector, value } = payload;
|
|
45
|
+
await page.locator(selector).selectOption(value);
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
else if (isLabelPayload(payload)) {
|
|
49
|
+
const { selector, label } = payload;
|
|
50
|
+
await page.locator(selector).selectOption({ label });
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
else if (isMultiplePayload(payload)) {
|
|
54
|
+
const { selector, values } = payload;
|
|
55
|
+
await page.locator(selector).selectOption([...values]);
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// handle specific behavior for puppeteer
|
|
60
|
+
if (session.browser.type === 'puppeteer') {
|
|
61
|
+
const page = session.browser.getPage(session.id);
|
|
62
|
+
if (isValuePayload(payload)) {
|
|
63
|
+
const { selector, value } = payload;
|
|
64
|
+
await page.select(selector, value);
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
else if (isMultiplePayload(payload)) {
|
|
68
|
+
const { selector, values } = payload;
|
|
69
|
+
await page.select(selector, ...values);
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
throw new Error(`Puppeteer only supports selection of an option by its value(s):
|
|
74
|
+
https://pptr.dev/next/api/puppeteer.page.select#parameters
|
|
75
|
+
`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// handle specific behavior for webdriver
|
|
79
|
+
if (session.browser.type === 'webdriver') {
|
|
80
|
+
throw new Error(`Selecting an option via a browser driver command is not currently implemented in WebDriver yet.
|
|
81
|
+
https://www.selenium.dev/documentation/webdriver/elements/select_lists/
|
|
82
|
+
|
|
83
|
+
When using WebDriver, the current recommended (September 2022) approach is to:
|
|
84
|
+
- locate your select element (via querySelector or querySelectorAll)
|
|
85
|
+
- focus the element
|
|
86
|
+
- use sendKeys() to type the label of the option you wish to select
|
|
87
|
+
- use select.dispatchEvent(new Event('change')) to trigger a change event on the select.
|
|
88
|
+
`);
|
|
89
|
+
}
|
|
90
|
+
// you might not be able to support all browser launchers
|
|
91
|
+
throw new Error(`Selection of select element options is not supported for browser type ${session.browser.type}.`);
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
exports.selectOptionPlugin = selectOptionPlugin;
|
|
97
|
+
//# sourceMappingURL=selectOptionPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectOptionPlugin.js","sourceRoot":"","sources":["../src/selectOptionPlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { TestRunnerPlugin } from '@web/test-runner-core';
|
|
2
|
+
declare type TypePayload = {
|
|
3
|
+
type: string;
|
|
4
|
+
};
|
|
5
|
+
declare type PressPayload = {
|
|
6
|
+
press: string;
|
|
7
|
+
};
|
|
8
|
+
declare type DownPayload = {
|
|
9
|
+
down: string;
|
|
10
|
+
};
|
|
11
|
+
declare type UpPayload = {
|
|
12
|
+
up: string;
|
|
13
|
+
};
|
|
14
|
+
export declare type SendKeysPayload = TypePayload | PressPayload | DownPayload | UpPayload;
|
|
15
|
+
export declare function sendKeysPlugin(): TestRunnerPlugin<SendKeysPayload>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=sendKeysPlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendKeysPlugin.d.ts","sourceRoot":"","sources":["../src/sendKeysPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAKzD,aAAK,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AACpC,aAAK,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AACtC,aAAK,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AACpC,aAAK,SAAS,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhC,oBAAY,eAAe,GAAG,WAAW,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;AAkDnF,wBAAgB,cAAc,IAAI,gBAAgB,CAAC,eAAe,CAAC,CA+DlE"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sendKeysPlugin = void 0;
|
|
4
|
+
function isObject(payload) {
|
|
5
|
+
return payload != null && typeof payload === 'object';
|
|
6
|
+
}
|
|
7
|
+
function isSendKeysPayload(payload) {
|
|
8
|
+
const validOptions = ['type', 'press', 'down', 'up'];
|
|
9
|
+
if (!isObject(payload))
|
|
10
|
+
throw new Error('You must provide a `SendKeysPayload` object');
|
|
11
|
+
const numberOfValidOptions = Object.keys(payload).filter(key => validOptions.includes(key)).length;
|
|
12
|
+
const unknownOptions = Object.keys(payload).filter(key => !validOptions.includes(key));
|
|
13
|
+
if (numberOfValidOptions > 1)
|
|
14
|
+
throw new Error(`You must provide ONLY one of the following properties to pass to the browser runner: ${validOptions.join(', ')}.`);
|
|
15
|
+
if (numberOfValidOptions === 0)
|
|
16
|
+
throw new Error(`You must provide one of the following properties to pass to the browser runner: ${validOptions.join(', ')}.`);
|
|
17
|
+
if (unknownOptions.length > 0) {
|
|
18
|
+
throw new Error('Unknown options `' + unknownOptions.join(', ') + '` present.');
|
|
19
|
+
}
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
function isTypePayload(payload) {
|
|
23
|
+
return 'type' in payload;
|
|
24
|
+
}
|
|
25
|
+
function isPressPayload(payload) {
|
|
26
|
+
return 'press' in payload;
|
|
27
|
+
}
|
|
28
|
+
function isDownPayload(payload) {
|
|
29
|
+
return 'down' in payload;
|
|
30
|
+
}
|
|
31
|
+
function isUpPayload(payload) {
|
|
32
|
+
return 'up' in payload;
|
|
33
|
+
}
|
|
34
|
+
function sendKeysPlugin() {
|
|
35
|
+
return {
|
|
36
|
+
name: 'send-keys-command',
|
|
37
|
+
async executeCommand({ command, payload, session }) {
|
|
38
|
+
if (command === 'send-keys') {
|
|
39
|
+
if (!isSendKeysPayload(payload) || !payload) {
|
|
40
|
+
throw new Error('You must provide a `SendKeysPayload` object');
|
|
41
|
+
}
|
|
42
|
+
// handle specific behavior for playwright
|
|
43
|
+
if (session.browser.type === 'playwright') {
|
|
44
|
+
const page = session.browser.getPage(session.id);
|
|
45
|
+
if (isTypePayload(payload)) {
|
|
46
|
+
await page.keyboard.type(payload.type);
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
else if (isPressPayload(payload)) {
|
|
50
|
+
await page.keyboard.press(payload.press);
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
else if (isDownPayload(payload)) {
|
|
54
|
+
await page.keyboard.down(payload.down);
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
else if (isUpPayload(payload)) {
|
|
58
|
+
await page.keyboard.up(payload.up);
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// handle specific behavior for puppeteer
|
|
63
|
+
if (session.browser.type === 'puppeteer') {
|
|
64
|
+
const page = session.browser.getPage(session.id);
|
|
65
|
+
if (isTypePayload(payload)) {
|
|
66
|
+
await page.keyboard.type(payload.type);
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
else if (isPressPayload(payload)) {
|
|
70
|
+
await page.keyboard.press(payload.press);
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
else if (isDownPayload(payload)) {
|
|
74
|
+
await page.keyboard.down(payload.down);
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
else if (isUpPayload(payload)) {
|
|
78
|
+
await page.keyboard.up(payload.up);
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// handle specific behavior for webdriver
|
|
83
|
+
if (session.browser.type === 'webdriver') {
|
|
84
|
+
const browser = session.browser;
|
|
85
|
+
if (isTypePayload(payload)) {
|
|
86
|
+
await browser.sendKeys(session.id, payload.type.split(''));
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
else if (isPressPayload(payload)) {
|
|
90
|
+
await browser.sendKeys(session.id, [payload.press]);
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
throw new Error('Only "press" and "type" are supported by webdriver.');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// you might not be able to support all browser launchers
|
|
98
|
+
throw new Error(`Sending keys is not supported for browser type ${session.browser.type}.`);
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
exports.sendKeysPlugin = sendKeysPlugin;
|
|
104
|
+
//# sourceMappingURL=sendKeysPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendKeysPlugin.js","sourceRoot":"","sources":["../src/sendKeysPlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { TestRunnerPlugin } from '@web/test-runner-core';
|
|
2
|
+
declare type MousePosition = [number, number];
|
|
3
|
+
declare type MouseButton = 'left' | 'middle' | 'right';
|
|
4
|
+
export declare type SendMousePayload = MovePayload | ClickPayload | DownPayload | UpPayload;
|
|
5
|
+
export declare type MovePayload = {
|
|
6
|
+
type: 'move';
|
|
7
|
+
position: MousePosition;
|
|
8
|
+
};
|
|
9
|
+
export declare type ClickPayload = {
|
|
10
|
+
type: 'click';
|
|
11
|
+
position: MousePosition;
|
|
12
|
+
button?: MouseButton;
|
|
13
|
+
};
|
|
14
|
+
export declare type DownPayload = {
|
|
15
|
+
type: 'down';
|
|
16
|
+
button?: MouseButton;
|
|
17
|
+
};
|
|
18
|
+
export declare type UpPayload = {
|
|
19
|
+
type: 'up';
|
|
20
|
+
button?: MouseButton;
|
|
21
|
+
};
|
|
22
|
+
export declare function sendMousePlugin(): TestRunnerPlugin<SendMousePayload>;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=sendMousePlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendMousePlugin.d.ts","sourceRoot":"","sources":["../src/sendMousePlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAKzD,aAAK,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACtC,aAAK,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE/C,oBAAY,gBAAgB,GAAG,WAAW,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;AAEpF,oBAAY,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC;CACzB,CAAC;AAEF,oBAAY,YAAY,GAAG;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,oBAAY,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,oBAAY,SAAS,GAAG;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AA+CF,wBAAgB,eAAe,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAkHpE"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sendMousePlugin = void 0;
|
|
4
|
+
function isObject(payload) {
|
|
5
|
+
return payload != null && typeof payload === 'object';
|
|
6
|
+
}
|
|
7
|
+
function isSendMousePayload(payload) {
|
|
8
|
+
const validTypes = ['move', 'click', 'down', 'up'];
|
|
9
|
+
const validButtons = ['left', 'middle', 'right'];
|
|
10
|
+
if (!isObject(payload)) {
|
|
11
|
+
throw new Error('You must provide a `SendMousePayload` object');
|
|
12
|
+
}
|
|
13
|
+
if (typeof payload.type !== 'string' || !validTypes.includes(payload.type)) {
|
|
14
|
+
throw new Error(`You must provide a type option with one of the following values: ${validTypes.join(', ')}.`);
|
|
15
|
+
}
|
|
16
|
+
if (['click', 'move'].includes(payload.type)) {
|
|
17
|
+
if (!Array.isArray(payload.position) ||
|
|
18
|
+
typeof payload.position[0] !== 'number' ||
|
|
19
|
+
typeof payload.position[1] !== 'number' ||
|
|
20
|
+
!Number.isInteger(payload.position[0]) ||
|
|
21
|
+
!Number.isInteger(payload.position[1])) {
|
|
22
|
+
throw new Error('You must provide a position option as a [x, y] tuple where x and y are integers.');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (['click', 'up', 'down'].includes(payload.type)) {
|
|
26
|
+
if (typeof payload.button === 'string' && !validButtons.includes(payload.button)) {
|
|
27
|
+
throw new Error(`The button option must be one of the following values when provided: ${validButtons.join(', ')}.`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
function sendMousePlugin() {
|
|
33
|
+
return {
|
|
34
|
+
name: 'send-mouse-command',
|
|
35
|
+
async executeCommand({ command, payload, session }) {
|
|
36
|
+
if (command === 'send-mouse') {
|
|
37
|
+
if (!payload || !isSendMousePayload(payload)) {
|
|
38
|
+
throw new Error('You must provide a `SendMousePayload` object');
|
|
39
|
+
}
|
|
40
|
+
// handle specific behavior for playwright
|
|
41
|
+
if (session.browser.type === 'playwright') {
|
|
42
|
+
const page = session.browser.getPage(session.id);
|
|
43
|
+
switch (payload.type) {
|
|
44
|
+
case 'move':
|
|
45
|
+
await page.mouse.move(payload.position[0], payload.position[1]);
|
|
46
|
+
return true;
|
|
47
|
+
case 'click':
|
|
48
|
+
await page.mouse.click(payload.position[0], payload.position[1], {
|
|
49
|
+
button: payload.button,
|
|
50
|
+
});
|
|
51
|
+
return true;
|
|
52
|
+
case 'down':
|
|
53
|
+
await page.mouse.down({ button: payload.button });
|
|
54
|
+
return true;
|
|
55
|
+
case 'up':
|
|
56
|
+
await page.mouse.up({ button: payload.button });
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// handle specific behavior for puppeteer
|
|
61
|
+
if (session.browser.type === 'puppeteer') {
|
|
62
|
+
const page = session.browser.getPage(session.id);
|
|
63
|
+
switch (payload.type) {
|
|
64
|
+
case 'move':
|
|
65
|
+
await page.mouse.move(payload.position[0], payload.position[1]);
|
|
66
|
+
return true;
|
|
67
|
+
case 'click':
|
|
68
|
+
await page.mouse.click(payload.position[0], payload.position[1], {
|
|
69
|
+
button: payload.button,
|
|
70
|
+
});
|
|
71
|
+
return true;
|
|
72
|
+
case 'down':
|
|
73
|
+
await page.mouse.down({ button: payload.button });
|
|
74
|
+
return true;
|
|
75
|
+
case 'up':
|
|
76
|
+
await page.mouse.up({ button: payload.button });
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// handle specific behavior for webdriver
|
|
81
|
+
if (session.browser.type === 'webdriver') {
|
|
82
|
+
const page = session.browser;
|
|
83
|
+
switch (payload.type) {
|
|
84
|
+
case 'move':
|
|
85
|
+
await page.sendMouseMove(session.id, payload.position[0], payload.position[1]);
|
|
86
|
+
return true;
|
|
87
|
+
case 'click':
|
|
88
|
+
await page.sendMouseClick(session.id, payload.position[0], payload.position[1], payload.button);
|
|
89
|
+
return true;
|
|
90
|
+
case 'down':
|
|
91
|
+
await page.sendMouseDown(session.id, payload.button);
|
|
92
|
+
return true;
|
|
93
|
+
case 'up':
|
|
94
|
+
await page.sendMouseUp(session.id, payload.button);
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// you might not be able to support all browser launchers
|
|
99
|
+
throw new Error(`Sending mouse is not supported for browser type ${session.browser.type}.`);
|
|
100
|
+
}
|
|
101
|
+
if (command === 'reset-mouse') {
|
|
102
|
+
// handle specific behavior for playwright
|
|
103
|
+
if (session.browser.type === 'playwright') {
|
|
104
|
+
const page = session.browser.getPage(session.id);
|
|
105
|
+
await page.mouse.up({ button: 'left' });
|
|
106
|
+
await page.mouse.up({ button: 'middle' });
|
|
107
|
+
await page.mouse.up({ button: 'right' });
|
|
108
|
+
await page.mouse.move(0, 0);
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
// handle specific behavior for puppeteer
|
|
112
|
+
if (session.browser.type === 'puppeteer') {
|
|
113
|
+
const page = session.browser.getPage(session.id);
|
|
114
|
+
await page.mouse.up({ button: 'left' });
|
|
115
|
+
await page.mouse.up({ button: 'middle' });
|
|
116
|
+
await page.mouse.up({ button: 'right' });
|
|
117
|
+
await page.mouse.move(0, 0);
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
// handle specific behavior for webdriver
|
|
121
|
+
if (session.browser.type === 'webdriver') {
|
|
122
|
+
const page = session.browser;
|
|
123
|
+
await page.resetMouse(session.id);
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
// you might not be able to support all browser launchers
|
|
127
|
+
throw new Error(`Resetting mouse is not supported for browser type ${session.browser.type}.`);
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
exports.sendMousePlugin = sendMousePlugin;
|
|
133
|
+
//# sourceMappingURL=sendMousePlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendMousePlugin.js","sourceRoot":"","sources":["../src/sendMousePlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setUserAgentPlugin.d.ts","sourceRoot":"","sources":["../src/setUserAgentPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,wBAAgB,kBAAkB,IAAI,gBAAgB,CAqBrD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setUserAgentPlugin = void 0;
|
|
4
|
+
function setUserAgentPlugin() {
|
|
5
|
+
return {
|
|
6
|
+
name: 'set-user-agent-command',
|
|
7
|
+
async executeCommand({ command, payload, session }) {
|
|
8
|
+
if (command === 'set-user-agent') {
|
|
9
|
+
if (typeof payload !== 'string') {
|
|
10
|
+
throw new Error('You must provide a user agent as a string');
|
|
11
|
+
}
|
|
12
|
+
if (session.browser.type === 'puppeteer') {
|
|
13
|
+
const page = session.browser.getPage(session.id);
|
|
14
|
+
await page.setUserAgent(payload);
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
throw new Error('set user agent is only supported on puppeteer.');
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
exports.setUserAgentPlugin = setUserAgentPlugin;
|
|
23
|
+
//# sourceMappingURL=setUserAgentPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setUserAgentPlugin.js","sourceRoot":"","sources":["../src/setUserAgentPlugin.ts"],"names":[],"mappings":";;;AAGA,SAAgB,kBAAkB;IAChC,OAAO;QACL,IAAI,EAAE,wBAAwB;QAE9B,KAAK,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;YAChD,IAAI,OAAO,KAAK,gBAAgB,EAAE;gBAChC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;oBAC/B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;iBAC9D;gBAED,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE;oBACxC,MAAM,IAAI,GAAI,OAAO,CAAC,OAA0B,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAErE,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oBACjC,OAAO,IAAI,CAAC;iBACb;gBAED,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;aACnE;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AArBD,gDAqBC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { TestRunnerPlugin } from '@web/test-runner-core';
|
|
2
|
+
export interface Viewport {
|
|
3
|
+
width: number;
|
|
4
|
+
height: number;
|
|
5
|
+
deviceScaleFactor?: number;
|
|
6
|
+
isLandscape?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function setViewportPlugin(): TestRunnerPlugin;
|
|
9
|
+
//# sourceMappingURL=setViewportPlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setViewportPlugin.d.ts","sourceRoot":"","sources":["../src/setViewportPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIzD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IAGf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAmBD,wBAAgB,iBAAiB,IAAI,gBAAgB,CA4BpD"}
|