@mablhq/mabl-cli 1.45.8 → 1.47.12

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.
Files changed (50) hide show
  1. package/api/basicApiClient.js +6 -0
  2. package/api/featureSet.js +0 -4
  3. package/api/mablApiClient.js +8 -0
  4. package/browserEngines/browserEngine.js +40 -0
  5. package/browserEngines/browserEngines.js +14 -0
  6. package/browserEngines/chromiumBrowserEngine.js +176 -0
  7. package/browserEngines/firefoxBrowserEngine.js +84 -0
  8. package/browserEngines/unsupportedBrowserEngine.js +27 -0
  9. package/browserLauncher/frameBase.js +5 -1
  10. package/browserLauncher/pageEvent.js +1 -0
  11. package/browserLauncher/playwrightBrowserLauncher/browserDelegate.js +2 -0
  12. package/browserLauncher/playwrightBrowserLauncher/chromium/chromiumBrowserDelegate.js +55 -0
  13. package/browserLauncher/playwrightBrowserLauncher/chromium/chromiumElementHandleDelegate.js +62 -0
  14. package/browserLauncher/playwrightBrowserLauncher/chromium/chromiumFrameDelegate.js +12 -0
  15. package/browserLauncher/playwrightBrowserLauncher/chromium/chromiumPageDelegate.js +117 -0
  16. package/browserLauncher/playwrightBrowserLauncher/elementHandleDelegate.js +2 -0
  17. package/browserLauncher/playwrightBrowserLauncher/firefox/firefoxBrowserDelegate.js +51 -0
  18. package/browserLauncher/playwrightBrowserLauncher/firefox/firefoxElementHandleDelegate.js +61 -0
  19. package/browserLauncher/playwrightBrowserLauncher/firefox/firefoxFrameDelegate.js +23 -0
  20. package/browserLauncher/playwrightBrowserLauncher/firefox/firefoxPageDelegate.js +83 -0
  21. package/browserLauncher/playwrightBrowserLauncher/frameDelegate.js +2 -0
  22. package/browserLauncher/playwrightBrowserLauncher/pageDelegate.js +2 -0
  23. package/browserLauncher/playwrightBrowserLauncher/playwrightBrowser.js +41 -35
  24. package/browserLauncher/playwrightBrowserLauncher/playwrightBrowserLauncher.js +28 -3
  25. package/browserLauncher/playwrightBrowserLauncher/playwrightDom.js +32 -63
  26. package/browserLauncher/playwrightBrowserLauncher/playwrightFrame.js +35 -11
  27. package/browserLauncher/playwrightBrowserLauncher/playwrightHttpRequest.js +1 -25
  28. package/browserLauncher/playwrightBrowserLauncher/playwrightPage.js +28 -50
  29. package/commands/constants.js +6 -1
  30. package/commands/tests/testsUtil.js +14 -153
  31. package/commands/tests/tests_cmds/import.js +2 -2
  32. package/commands/tests/tests_cmds/run.js +9 -9
  33. package/commands/workspaces/workspace_cmds/copy.js +1 -2
  34. package/domUtil/index.js +1 -1
  35. package/execution/index.js +1 -1
  36. package/functions/apiTest/utils.js +47 -0
  37. package/functions/types.js +2 -0
  38. package/functions/utils.js +12 -0
  39. package/mablApi/index.js +1 -1
  40. package/mablscript/types/VariableNamespace.js +3 -3
  41. package/mablscriptFind/index.js +1 -1
  42. package/package.json +4 -3
  43. package/popupDismissal/index.js +7 -20
  44. package/resources/mablFind.js +1 -1
  45. package/resources/popupDismissal.js +1 -1
  46. package/util/actionabilityUtil.js +4 -4
  47. package/util/clickUtil.js +2 -2
  48. package/util/fileUploadUtil.js +1 -1
  49. package/util/jestUtil.js +21 -0
  50. package/mablscript/types/VariableDataType.js +0 -28
@@ -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,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,51 @@
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
+ }
51
+ 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;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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 loggingProvider_1 = require("../../providers/logging/loggingProvider");
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, enableScreencastMode, disableFocusEmulation) {
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
- const contextImpl = playwright._toImpl(defaultContext);
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.browser.on('disconnected', () => {
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
- loggingProvider_1.logger.debug(`Screencast mode is ${enableScreencastMode ? 'enabled' : 'disabled'}`);
59
- if (enableScreencastMode) {
60
- this.defaultContext.on('page', async (page) => this.enableScreencastMode(page));
61
- this.defaultContext.pages().forEach(async (page) => {
62
- await this.enableScreencastMode(page);
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, enableScreencastMode, disableFocusEmulation) {
67
- const browser = new PlaywrightBrowser(defaultContext, downloadDirectory, browserWSEndpoint, enableScreencastMode, disableFocusEmulation);
68
- await browser.setDownloadBehavior();
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
- makeCdpCall(method, paramArgs) {
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.browser.isConnected();
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);
@@ -163,3 +159,13 @@ class PlaywrightBrowser extends events_1.default {
163
159
  }
164
160
  }
165
161
  exports.PlaywrightBrowser = PlaywrightBrowser;
162
+ function getBrowserDelegate(browserType, browserContext) {
163
+ switch (browserType) {
164
+ case playwright.chromium:
165
+ return new chromiumBrowserDelegate_1.ChromiumBrowserDelegate(browserContext);
166
+ case playwright.firefox:
167
+ return new firefoxBrowserDelegate_1.FirefoxBrowserDelegate(browserContext);
168
+ default:
169
+ throw new Error(`Unsupported browser type: ${browserType}`);
170
+ }
171
+ }
@@ -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,14 +32,15 @@ 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 defaultContext = await test_1.chromium.launchPersistentContext(options.userDataDir, {
35
+ const playwrightBrowserType = getPlaywrightBrowserType(options.browserType);
36
+ const defaultContext = await playwrightBrowserType.launchPersistentContext(options.userDataDir, {
32
37
  acceptDownloads: true,
33
38
  args: options.args,
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,
@@ -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.enableScreencastModeForScreenshotTimeouts, options.disableFocusEmulation);
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
+ }