@mablhq/mabl-cli 1.45.8 → 1.47.20
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/api/basicApiClient.js +6 -0
- package/api/featureSet.js +0 -4
- package/api/mablApiClient.js +8 -0
- package/browserEngines/browserEngine.js +40 -0
- package/browserEngines/browserEngines.js +14 -0
- package/browserEngines/chromiumBrowserEngine.js +175 -0
- package/browserEngines/firefoxBrowserEngine.js +117 -0
- package/browserEngines/unsupportedBrowserEngine.js +26 -0
- package/browserLauncher/frameBase.js +5 -1
- package/browserLauncher/pageEvent.js +1 -0
- package/{api/entities/Plan.js → browserLauncher/playwrightBrowserLauncher/browserDelegate.js} +0 -0
- package/browserLauncher/playwrightBrowserLauncher/chromium/chromiumBrowserDelegate.js +58 -0
- package/browserLauncher/playwrightBrowserLauncher/chromium/chromiumElementHandleDelegate.js +65 -0
- package/browserLauncher/playwrightBrowserLauncher/chromium/chromiumFrameDelegate.js +12 -0
- package/browserLauncher/playwrightBrowserLauncher/chromium/chromiumPageDelegate.js +117 -0
- package/browserLauncher/playwrightBrowserLauncher/elementHandleDelegate.js +2 -0
- package/browserLauncher/playwrightBrowserLauncher/firefox/firefoxBrowserDelegate.js +54 -0
- package/browserLauncher/playwrightBrowserLauncher/firefox/firefoxElementHandleDelegate.js +61 -0
- package/browserLauncher/playwrightBrowserLauncher/firefox/firefoxFrameDelegate.js +23 -0
- package/browserLauncher/playwrightBrowserLauncher/firefox/firefoxPageDelegate.js +83 -0
- package/browserLauncher/playwrightBrowserLauncher/frameDelegate.js +2 -0
- package/browserLauncher/playwrightBrowserLauncher/pageDelegate.js +2 -0
- package/browserLauncher/playwrightBrowserLauncher/playwrightBrowser.js +44 -35
- package/browserLauncher/playwrightBrowserLauncher/playwrightBrowserLauncher.js +30 -5
- package/browserLauncher/playwrightBrowserLauncher/playwrightDom.js +33 -64
- package/browserLauncher/playwrightBrowserLauncher/playwrightFrame.js +35 -11
- package/browserLauncher/playwrightBrowserLauncher/playwrightHttpRequest.js +9 -1
- package/browserLauncher/playwrightBrowserLauncher/playwrightPage.js +28 -50
- package/commands/constants.js +6 -1
- package/commands/tests/testsUtil.js +27 -182
- package/commands/tests/tests_cmds/import.js +2 -2
- package/commands/tests/tests_cmds/run.js +9 -9
- package/commands/workspaces/workspace_cmds/copy.js +1 -2
- package/domUtil/index.js +1 -1
- package/execution/index.js +1 -1
- package/functions/apiTest/utils.js +47 -0
- package/functions/types.js +2 -0
- package/functions/utils.js +12 -0
- package/mablApi/index.js +1 -1
- package/mablscript/importer.js +3 -0
- package/mablscript/types/VariableNamespace.js +3 -3
- package/mablscriptFind/index.js +1 -1
- package/package.json +5 -4
- package/popupDismissal/index.js +7 -20
- package/proxy/index.js +1 -1
- package/resources/mablFind.js +1 -1
- package/resources/pdf-viewer/index.js +1 -1
- package/resources/pdf-viewer/libmablPdfViewer.js +117 -113
- package/resources/pdf-viewer/pdf.worker.0ceac9378bfc3bfcb634.js +81 -0
- package/resources/pdf-viewer/pdf.worker.df20a5600902b0735d4b.js +2 -0
- package/resources/popupDismissal.js +1 -1
- package/util/actionabilityUtil.js +4 -4
- package/util/browserTestUtils.js +18 -0
- package/util/clickUtil.js +7 -2
- package/util/fileUploadUtil.js +1 -1
- package/util/jestUtil.js +21 -0
- package/mablscript/types/VariableDataType.js +0 -28
- package/resources/pdf-viewer/pdf.worker.5953c23fa7251d236190.js +0 -2
- package/resources/pdf-viewer/pdf.worker.5f2736435a8b46d97859.js +0 -81
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.ChromiumPageDelegate = void 0;
|
|
27
|
+
const playwright = __importStar(require("@playwright/test"));
|
|
28
|
+
const chromiumElementHandleDelegate_1 = require("./chromiumElementHandleDelegate");
|
|
29
|
+
const logUtils_1 = require("../../../util/logUtils");
|
|
30
|
+
const chromiumFrameDelegate_1 = require("./chromiumFrameDelegate");
|
|
31
|
+
class ChromiumPageDelegate {
|
|
32
|
+
constructor(page) {
|
|
33
|
+
this.page = page;
|
|
34
|
+
try {
|
|
35
|
+
this.pageImpl = playwright._toImpl(page);
|
|
36
|
+
}
|
|
37
|
+
catch (e) {
|
|
38
|
+
(0, logUtils_1.logInternal)(`Unable to get the page implementation. Error: ${e}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async setFocusEmulationEnabled(enabled) {
|
|
42
|
+
await this.makeCDPCall('Emulation.setFocusEmulationEnabled', {
|
|
43
|
+
enabled,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
async waitForInitialization() {
|
|
47
|
+
this.fallbackCDPSession = await this.createCDPSession();
|
|
48
|
+
}
|
|
49
|
+
makeCDPCall(method, paramArgs) {
|
|
50
|
+
return this.getCDPSession().send(method, paramArgs);
|
|
51
|
+
}
|
|
52
|
+
async getWindowInfo() {
|
|
53
|
+
var _a, _b;
|
|
54
|
+
return this.makeCDPCall('Browser.getWindowForTarget', { targetId: (_a = this.getTargetId()) !== null && _a !== void 0 ? _a : (_b = this.pageImpl) === null || _b === void 0 ? void 0 : _b._guid });
|
|
55
|
+
}
|
|
56
|
+
async getBrowserBounds() {
|
|
57
|
+
const windowInfo = await this.getWindowInfo();
|
|
58
|
+
return windowInfo.bounds;
|
|
59
|
+
}
|
|
60
|
+
async setBrowserBounds(width, height) {
|
|
61
|
+
const session = this.getCDPSession();
|
|
62
|
+
if (session) {
|
|
63
|
+
const windowInfo = await session.send('Browser.getWindowForTarget');
|
|
64
|
+
const setWindowBoundsRequest = {
|
|
65
|
+
windowId: windowInfo.windowId,
|
|
66
|
+
bounds: {
|
|
67
|
+
width,
|
|
68
|
+
height,
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
await session.send('Browser.setWindowBounds', setWindowBoundsRequest);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
getCDPSession() {
|
|
75
|
+
var _a, _b, _c, _d;
|
|
76
|
+
this.checkCDPSession();
|
|
77
|
+
return ((_d = (_c = (_b = (_a = this.pageImpl) === null || _a === void 0 ? void 0 : _a._delegate) === null || _b === void 0 ? void 0 : _b._mainFrameSession) === null || _c === void 0 ? void 0 : _c._client) !== null && _d !== void 0 ? _d : this.fallbackCDPSession);
|
|
78
|
+
}
|
|
79
|
+
checkCDPSession() {
|
|
80
|
+
var _a, _b, _c, _d, _e, _f;
|
|
81
|
+
if (((_c = (_b = (_a = this.pageImpl) === null || _a === void 0 ? void 0 : _a._delegate) === null || _b === void 0 ? void 0 : _b._mainFrameSession) === null || _c === void 0 ? void 0 : _c._client) === undefined) {
|
|
82
|
+
const undefinedField = ((_e = (_d = this.pageImpl) === null || _d === void 0 ? void 0 : _d._delegate) === null || _e === void 0 ? void 0 : _e._mainFrameSession) !== undefined
|
|
83
|
+
? '_client'
|
|
84
|
+
: ((_f = this.pageImpl) === null || _f === void 0 ? void 0 : _f._delegate) !== undefined
|
|
85
|
+
? '_mainFrameSession'
|
|
86
|
+
: 'pageImpl';
|
|
87
|
+
(0, logUtils_1.logInternal)(`Unable to get the CDP Session of the page (${undefinedField} is undefined).
|
|
88
|
+
Using a fallback session. Some functionality might not work as expected.`);
|
|
89
|
+
if (!this.fallbackCDPSession) {
|
|
90
|
+
(0, logUtils_1.logInternal)('No fallback CDP session found');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
getTargetId() {
|
|
95
|
+
var _a, _b;
|
|
96
|
+
return (_b = (_a = this.pageImpl) === null || _a === void 0 ? void 0 : _a._delegate) === null || _b === void 0 ? void 0 : _b._targetId;
|
|
97
|
+
}
|
|
98
|
+
createCDPSession() {
|
|
99
|
+
return this.page.context().newCDPSession(this.page);
|
|
100
|
+
}
|
|
101
|
+
createElementHandleDelegate(element) {
|
|
102
|
+
return new chromiumElementHandleDelegate_1.ChromiumElementHandleDelegate(element);
|
|
103
|
+
}
|
|
104
|
+
createFrameDelegate(frame) {
|
|
105
|
+
return new chromiumFrameDelegate_1.ChromiumFrameDelegate(frame);
|
|
106
|
+
}
|
|
107
|
+
async enableScreencastMode() {
|
|
108
|
+
const cdp = await this.createCDPSession();
|
|
109
|
+
cdp.on('Page.screencastFrame', async (params) => {
|
|
110
|
+
await cdp
|
|
111
|
+
.send('Page.screencastFrameAck', { sessionId: params.sessionId })
|
|
112
|
+
.catch(() => { });
|
|
113
|
+
});
|
|
114
|
+
await cdp.send('Page.startScreencast', {});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
exports.ChromiumPageDelegate = ChromiumPageDelegate;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.FirefoxBrowserDelegate = void 0;
|
|
27
|
+
const playwright = __importStar(require("@playwright/test"));
|
|
28
|
+
const firefoxPageDelegate_1 = require("./firefoxPageDelegate");
|
|
29
|
+
class FirefoxBrowserDelegate {
|
|
30
|
+
constructor(context) {
|
|
31
|
+
this.context = context;
|
|
32
|
+
const contextImpl = playwright._toImpl(context);
|
|
33
|
+
this._browser = contextImpl._browser;
|
|
34
|
+
}
|
|
35
|
+
setDownloadBehavior(_downloadDirectory) {
|
|
36
|
+
return Promise.resolve();
|
|
37
|
+
}
|
|
38
|
+
getCDPSession() {
|
|
39
|
+
return this._browser._connection;
|
|
40
|
+
}
|
|
41
|
+
getBrowser() {
|
|
42
|
+
return this._browser;
|
|
43
|
+
}
|
|
44
|
+
createPageDelegate(page) {
|
|
45
|
+
return new firefoxPageDelegate_1.FirefoxPageDelegate(page);
|
|
46
|
+
}
|
|
47
|
+
downloadsUsingGuids() {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
supportsTracing() {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.FirefoxBrowserDelegate = FirefoxBrowserDelegate;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.FirefoxElementHandleDelegate = void 0;
|
|
27
|
+
const playwright = __importStar(require("@playwright/test"));
|
|
28
|
+
const logUtils_1 = require("../../../util/logUtils");
|
|
29
|
+
class FirefoxElementHandleDelegate {
|
|
30
|
+
constructor(elementHandle) {
|
|
31
|
+
this.elementHandle = elementHandle;
|
|
32
|
+
try {
|
|
33
|
+
this.elementImpl = playwright._toImpl(elementHandle);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
getElementImpl() {
|
|
39
|
+
return this.elementImpl;
|
|
40
|
+
}
|
|
41
|
+
checkCDPSession() {
|
|
42
|
+
var _a, _b, _c;
|
|
43
|
+
if (this.elementImpl === undefined) {
|
|
44
|
+
(0, logUtils_1.logInternal)(`Unable to get the Element's internal implementation. Some functionality, such as getting the clickable point or element highlighting might not work.`);
|
|
45
|
+
}
|
|
46
|
+
else if (this.getCDPSession() === undefined) {
|
|
47
|
+
const undefinedField = ((_b = (_a = this.elementImpl) === null || _a === void 0 ? void 0 : _a._context) === null || _b === void 0 ? void 0 : _b._delegate) !== undefined
|
|
48
|
+
? '_client'
|
|
49
|
+
: ((_c = this.elementImpl) === null || _c === void 0 ? void 0 : _c._context) !== undefined
|
|
50
|
+
? '_delegate'
|
|
51
|
+
: '_context';
|
|
52
|
+
(0, logUtils_1.logInternal)(`Unable to get the CDP Session of the element handle. ${undefinedField} is undefined. Some functionality, such as element highlighting will not work.`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
getCDPSession() {
|
|
56
|
+
var _a, _b, _c;
|
|
57
|
+
this.checkCDPSession();
|
|
58
|
+
return (_c = (_b = (_a = this.elementImpl) === null || _a === void 0 ? void 0 : _a._context) === null || _b === void 0 ? void 0 : _b._delegate) === null || _c === void 0 ? void 0 : _c._session;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.FirefoxElementHandleDelegate = FirefoxElementHandleDelegate;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FirefoxFrameDelegate = void 0;
|
|
4
|
+
const playwrightFrame_1 = require("../playwrightFrame");
|
|
5
|
+
class FirefoxFrameDelegate {
|
|
6
|
+
constructor(parentPageDelegate, frame) {
|
|
7
|
+
this.parentPageDelegate = parentPageDelegate;
|
|
8
|
+
this.frame = frame;
|
|
9
|
+
}
|
|
10
|
+
async addBindingToSecondaryWorld(binding) {
|
|
11
|
+
var _a;
|
|
12
|
+
const pageImpl = this.parentPageDelegate.pageImpl;
|
|
13
|
+
if (pageImpl) {
|
|
14
|
+
await ((_a = pageImpl._delegate) === null || _a === void 0 ? void 0 : _a._session.send('Page.addBinding', {
|
|
15
|
+
worldName: playwrightFrame_1.UTILITY_CONTEXT_NAME,
|
|
16
|
+
name: binding.name,
|
|
17
|
+
script: binding.source,
|
|
18
|
+
}));
|
|
19
|
+
}
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.FirefoxFrameDelegate = FirefoxFrameDelegate;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.FirefoxPageDelegate = void 0;
|
|
27
|
+
const playwright = __importStar(require("@playwright/test"));
|
|
28
|
+
const firefoxElementHandleDelegate_1 = require("./firefoxElementHandleDelegate");
|
|
29
|
+
const logUtils_1 = require("../../../util/logUtils");
|
|
30
|
+
const firefoxFrameDelegate_1 = require("./firefoxFrameDelegate");
|
|
31
|
+
class FirefoxPageDelegate {
|
|
32
|
+
constructor(page) {
|
|
33
|
+
this.page = page;
|
|
34
|
+
this.pageImpl = playwright._toImpl(page);
|
|
35
|
+
}
|
|
36
|
+
setFocusEmulationEnabled(_enabled) {
|
|
37
|
+
return Promise.resolve();
|
|
38
|
+
}
|
|
39
|
+
waitForInitialization() {
|
|
40
|
+
return Promise.resolve();
|
|
41
|
+
}
|
|
42
|
+
getBrowserBounds() {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
setBrowserBounds(_width, _height) {
|
|
46
|
+
return Promise.resolve();
|
|
47
|
+
}
|
|
48
|
+
getTargetId() {
|
|
49
|
+
return this.page.mainFrame()._id;
|
|
50
|
+
}
|
|
51
|
+
createCDPSession() {
|
|
52
|
+
var _a;
|
|
53
|
+
return Promise.resolve((_a = this.pageImpl._delegate) === null || _a === void 0 ? void 0 : _a._session);
|
|
54
|
+
}
|
|
55
|
+
makeCDPCall(method, paramArgs) {
|
|
56
|
+
return this.getCDPSession().send(method, paramArgs);
|
|
57
|
+
}
|
|
58
|
+
createElementHandleDelegate(element) {
|
|
59
|
+
return new firefoxElementHandleDelegate_1.FirefoxElementHandleDelegate(element);
|
|
60
|
+
}
|
|
61
|
+
getCDPSession() {
|
|
62
|
+
var _a, _b;
|
|
63
|
+
this.checkCDPSession();
|
|
64
|
+
return (_b = (_a = this.pageImpl) === null || _a === void 0 ? void 0 : _a._delegate) === null || _b === void 0 ? void 0 : _b._session;
|
|
65
|
+
}
|
|
66
|
+
checkCDPSession() {
|
|
67
|
+
var _a, _b, _c, _d;
|
|
68
|
+
if (((_b = (_a = this.pageImpl) === null || _a === void 0 ? void 0 : _a._delegate) === null || _b === void 0 ? void 0 : _b._session) === undefined) {
|
|
69
|
+
const undefinedField = ((_d = (_c = this.pageImpl) === null || _c === void 0 ? void 0 : _c._delegate) === null || _d === void 0 ? void 0 : _d._session) !== undefined
|
|
70
|
+
? '_session'
|
|
71
|
+
: '_delegate';
|
|
72
|
+
(0, logUtils_1.logInternal)(`Unable to get the CDP Session of the page (${undefinedField} is undefined).
|
|
73
|
+
Creating a fallback session. Some functionality might not work as expected.`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
createFrameDelegate(frame) {
|
|
77
|
+
return new firefoxFrameDelegate_1.FirefoxFrameDelegate(this, frame);
|
|
78
|
+
}
|
|
79
|
+
enableScreencastMode() {
|
|
80
|
+
return Promise.resolve();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.FirefoxPageDelegate = FirefoxPageDelegate;
|
|
@@ -34,44 +34,50 @@ const playwrightPage_1 = require("./playwrightPage");
|
|
|
34
34
|
const types_1 = require("../types");
|
|
35
35
|
const path_1 = __importDefault(require("path"));
|
|
36
36
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
37
|
-
const
|
|
37
|
+
const firefoxBrowserDelegate_1 = require("./firefox/firefoxBrowserDelegate");
|
|
38
|
+
const chromiumBrowserDelegate_1 = require("./chromium/chromiumBrowserDelegate");
|
|
38
39
|
class PlaywrightBrowser extends events_1.default {
|
|
39
|
-
constructor(defaultContext, downloadDirectory, browserWSEndpoint,
|
|
40
|
+
constructor(defaultContext, downloadDirectory, browserWSEndpoint, browserDelegate, preferenceDirectory, disableFocusEmulation) {
|
|
40
41
|
super();
|
|
41
42
|
this.defaultContext = defaultContext;
|
|
42
43
|
this.downloadDirectory = downloadDirectory;
|
|
43
44
|
this.browserWSEndpoint = browserWSEndpoint;
|
|
45
|
+
this.browserDelegate = browserDelegate;
|
|
46
|
+
this.preferenceDirectory = preferenceDirectory;
|
|
44
47
|
this.disableFocusEmulation = disableFocusEmulation;
|
|
45
48
|
this.playwrightPages = new Map();
|
|
46
|
-
|
|
47
|
-
this.browser = contextImpl._browser;
|
|
48
|
-
this.cdpSession = this.browser._connection.rootSession;
|
|
49
|
+
this.cdpSession = browserDelegate.getCDPSession();
|
|
49
50
|
this.defaultContext.on('page', async (page) => {
|
|
50
51
|
this.emit(browserLauncher_1.BrowserEvent.PageCreated, await this.getOrCreatePage(page));
|
|
51
52
|
});
|
|
52
|
-
this.
|
|
53
|
+
this.browserDelegate.getBrowser().on('disconnected', () => {
|
|
53
54
|
this.emit(browserLauncher_1.BrowserEvent.Disconnected);
|
|
54
55
|
});
|
|
55
56
|
if (!fs_extra_1.default.existsSync(path_1.default.join(this.downloadDirectory))) {
|
|
56
57
|
fs_extra_1.default.mkdirSync(path_1.default.join(this.downloadDirectory));
|
|
57
58
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
59
|
+
this.defaultContext.on('page', async (playwrightPage) => {
|
|
60
|
+
const page = await this.getOrCreatePage(playwrightPage);
|
|
61
|
+
await page.delegate.enableScreencastMode();
|
|
62
|
+
});
|
|
63
|
+
this.defaultContext.pages().forEach(async (playwrightPage) => {
|
|
64
|
+
const page = await this.getOrCreatePage(playwrightPage);
|
|
65
|
+
await page.delegate.enableScreencastMode();
|
|
66
|
+
});
|
|
65
67
|
}
|
|
66
|
-
static async create(defaultContext, downloadDirectory, browserWSEndpoint,
|
|
67
|
-
const
|
|
68
|
-
|
|
68
|
+
static async create(browserType, defaultContext, downloadDirectory, browserWSEndpoint, preferenceDirectory, disableFocusEmulation) {
|
|
69
|
+
const delegate = getBrowserDelegate(browserType, defaultContext);
|
|
70
|
+
const browser = new PlaywrightBrowser(defaultContext, downloadDirectory, browserWSEndpoint, delegate, preferenceDirectory, disableFocusEmulation);
|
|
71
|
+
await delegate.setDownloadBehavior(downloadDirectory);
|
|
69
72
|
return browser;
|
|
70
73
|
}
|
|
74
|
+
getBrowserPreferencesDirectory() {
|
|
75
|
+
return this.preferenceDirectory;
|
|
76
|
+
}
|
|
71
77
|
getRunnerType() {
|
|
72
78
|
return types_1.RunnerType.Playwright;
|
|
73
79
|
}
|
|
74
|
-
|
|
80
|
+
makeCDPCall(method, paramArgs) {
|
|
75
81
|
return this.cdpSession.send(method, paramArgs);
|
|
76
82
|
}
|
|
77
83
|
close() {
|
|
@@ -87,7 +93,7 @@ class PlaywrightBrowser extends events_1.default {
|
|
|
87
93
|
return this.getOrCreatePage(await this.defaultContext.newPage());
|
|
88
94
|
}
|
|
89
95
|
isConnected() {
|
|
90
|
-
return this.
|
|
96
|
+
return this.browserDelegate.getBrowser().isConnected();
|
|
91
97
|
}
|
|
92
98
|
wsEndpoint() {
|
|
93
99
|
return this.browserWSEndpoint;
|
|
@@ -100,6 +106,12 @@ class PlaywrightBrowser extends events_1.default {
|
|
|
100
106
|
.pages()
|
|
101
107
|
.map((page) => this.getOrCreatePage(page)));
|
|
102
108
|
}
|
|
109
|
+
addCookies(cookies) {
|
|
110
|
+
return this.getDefaultContext().addCookies(cookies);
|
|
111
|
+
}
|
|
112
|
+
getCookies(url) {
|
|
113
|
+
return this.getDefaultContext().cookies(url);
|
|
114
|
+
}
|
|
103
115
|
async getExtensionBackgroundPage(extensionId) {
|
|
104
116
|
const backgroundExtensionPage = this.defaultContext
|
|
105
117
|
.backgroundPages()
|
|
@@ -128,22 +140,6 @@ class PlaywrightBrowser extends events_1.default {
|
|
|
128
140
|
getDefaultContext() {
|
|
129
141
|
return this.defaultContext;
|
|
130
142
|
}
|
|
131
|
-
async setDownloadBehavior() {
|
|
132
|
-
await this.cdpSession.send('Browser.setDownloadBehavior', {
|
|
133
|
-
behavior: 'allow',
|
|
134
|
-
downloadPath: this.downloadDirectory,
|
|
135
|
-
eventsEnabled: true,
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
async enableScreencastMode(page) {
|
|
139
|
-
const cdp = await this.defaultContext.newCDPSession(page);
|
|
140
|
-
cdp.on('Page.screencastFrame', async (params) => {
|
|
141
|
-
await cdp
|
|
142
|
-
.send('Page.screencastFrameAck', { sessionId: params.sessionId })
|
|
143
|
-
.catch(() => { });
|
|
144
|
-
});
|
|
145
|
-
await cdp.send('Page.startScreencast', {});
|
|
146
|
-
}
|
|
147
143
|
onPageClose(page) {
|
|
148
144
|
this.playwrightPages.delete(page.getPageId());
|
|
149
145
|
this.emit(browserLauncher_1.BrowserEvent.PageDestroyed, page);
|
|
@@ -151,7 +147,7 @@ class PlaywrightBrowser extends events_1.default {
|
|
|
151
147
|
async getOrCreatePage(page) {
|
|
152
148
|
const pageId = page._guid;
|
|
153
149
|
if (!this.playwrightPages.has(pageId)) {
|
|
154
|
-
const newPage = new playwrightPage_1.PlaywrightPage(page, this);
|
|
150
|
+
const newPage = new playwrightPage_1.PlaywrightPage(page, this, this.browserDelegate.createPageDelegate(page));
|
|
155
151
|
this.playwrightPages.set(pageId, newPage);
|
|
156
152
|
}
|
|
157
153
|
const playwrightPage = this.playwrightPages.get(pageId);
|
|
@@ -161,5 +157,18 @@ class PlaywrightBrowser extends events_1.default {
|
|
|
161
157
|
exposeFunction(name, callback) {
|
|
162
158
|
return this.defaultContext.exposeFunction(name, callback);
|
|
163
159
|
}
|
|
160
|
+
supportsTracing() {
|
|
161
|
+
return this.browserDelegate.supportsTracing();
|
|
162
|
+
}
|
|
164
163
|
}
|
|
165
164
|
exports.PlaywrightBrowser = PlaywrightBrowser;
|
|
165
|
+
function getBrowserDelegate(browserType, browserContext) {
|
|
166
|
+
switch (browserType) {
|
|
167
|
+
case playwright.chromium:
|
|
168
|
+
return new chromiumBrowserDelegate_1.ChromiumBrowserDelegate(browserContext);
|
|
169
|
+
case playwright.firefox:
|
|
170
|
+
return new firefoxBrowserDelegate_1.FirefoxBrowserDelegate(browserContext);
|
|
171
|
+
default:
|
|
172
|
+
throw new Error(`Unsupported browser type: ${browserType}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.PlaywrightBrowserLauncher = void 0;
|
|
4
7
|
const test_1 = require("@playwright/test");
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
5
9
|
const browserTypes_1 = require("../../commands/browserTypes");
|
|
6
10
|
const loggingProvider_1 = require("../../providers/logging/loggingProvider");
|
|
7
11
|
const playwrightBrowser_1 = require("./playwrightBrowser");
|
|
@@ -28,20 +32,21 @@ class PlaywrightBrowserLauncher {
|
|
|
28
32
|
loggingProvider_1.logger.error('Download path is required to launch a persistent chromium context and was not provided with LaunchOptions [{}]', options);
|
|
29
33
|
throw new Error('Download path is required to launch a persistent chromium context and was not provided with LaunchOptions');
|
|
30
34
|
}
|
|
31
|
-
const
|
|
35
|
+
const playwrightBrowserType = getPlaywrightBrowserType(options.browserType);
|
|
36
|
+
const defaultContext = await playwrightBrowserType.launchPersistentContext(options.userDataDir, {
|
|
32
37
|
acceptDownloads: true,
|
|
33
|
-
args: options.
|
|
38
|
+
args: options.commandLineArgs,
|
|
34
39
|
bypassCSP: options.bypassContentSecurityPolicy,
|
|
35
40
|
channel: browserTypes_1.SupportedBrowserTypeProperties[options.browserType]
|
|
36
41
|
.browserReleaseChannel,
|
|
37
42
|
deviceScaleFactor: (_a = options.defaultDeviceDescriptor) === null || _a === void 0 ? void 0 : _a.deviceScaleFactor,
|
|
38
|
-
downloadsPath: options.downloadPath,
|
|
43
|
+
downloadsPath: getFinalDownloadDestination(options.browserType, options.downloadPath),
|
|
39
44
|
executablePath: options.browserPath,
|
|
40
45
|
extraHTTPHeaders: options.extraHttpHeaders,
|
|
41
46
|
hasTouch: (_b = options.defaultDeviceDescriptor) === null || _b === void 0 ? void 0 : _b.hasTouch,
|
|
42
47
|
headless: options.headless,
|
|
43
48
|
httpCredentials: options.credentials,
|
|
44
|
-
ignoreDefaultArgs: options.
|
|
49
|
+
ignoreDefaultArgs: options.ignoreCommandLineDefaultArgs,
|
|
45
50
|
ignoreHTTPSErrors: true,
|
|
46
51
|
isMobile: (_c = options.defaultDeviceDescriptor) === null || _c === void 0 ? void 0 : _c.isMobile,
|
|
47
52
|
logger: playwrightLogger,
|
|
@@ -50,7 +55,27 @@ class PlaywrightBrowserLauncher {
|
|
|
50
55
|
userAgent: (_d = options.userAgent) !== null && _d !== void 0 ? _d : options.defaultUserAgent,
|
|
51
56
|
viewport,
|
|
52
57
|
});
|
|
53
|
-
return playwrightBrowser_1.PlaywrightBrowser.create(defaultContext, options.downloadPath, '', options.
|
|
58
|
+
return playwrightBrowser_1.PlaywrightBrowser.create(playwrightBrowserType, defaultContext, options.downloadPath, '', options.userDataDir, options.disableFocusEmulation);
|
|
54
59
|
}
|
|
55
60
|
}
|
|
56
61
|
exports.PlaywrightBrowserLauncher = PlaywrightBrowserLauncher;
|
|
62
|
+
function getPlaywrightBrowserType(browserType) {
|
|
63
|
+
switch (browserType) {
|
|
64
|
+
case browserTypes_1.BrowserType.Chrome:
|
|
65
|
+
case browserTypes_1.BrowserType.Edge:
|
|
66
|
+
return test_1.chromium;
|
|
67
|
+
case browserTypes_1.BrowserType.Firefox:
|
|
68
|
+
return test_1.firefox;
|
|
69
|
+
default:
|
|
70
|
+
throw new Error(`Unsupported browser type: ${browserType}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function getFinalDownloadDestination(browserType, downloadPath) {
|
|
74
|
+
switch (browserType) {
|
|
75
|
+
case browserTypes_1.BrowserType.Chrome:
|
|
76
|
+
case browserTypes_1.BrowserType.Edge:
|
|
77
|
+
return downloadPath;
|
|
78
|
+
default:
|
|
79
|
+
return path_1.default.join(downloadPath, 'tmp');
|
|
80
|
+
}
|
|
81
|
+
}
|