@mablhq/mabl-cli 1.17.0 → 1.17.6
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/browserLauncher/playwrightBrowserLauncher/playwrightBrowserLauncher.js +11 -9
- package/browserLauncher/puppeteerBrowserLauncher/puppeteerBrowser.js +2 -1
- package/browserLauncher/puppeteerBrowserLauncher/puppeteerBrowserLauncher.js +1 -1
- package/browserLauncher/puppeteerBrowserLauncher/puppeteerPage.js +3 -0
- package/commands/constants.js +3 -2
- package/commands/tests/testsUtil.js +11 -6
- package/commands/tests/tests_cmds/run.js +5 -0
- package/domUtil/index.js +1 -1
- package/domUtil/index.js.LICENSE.txt +5 -5
- package/execution/index.js +1 -1
- package/execution/index.js.LICENSE.txt +5 -5
- package/mablscript/actions/FindAction.js +40 -39
- package/mablscript/steps/AccessibilityCheck.js +5 -5
- package/mablscript/steps/AssertStep.js +12 -12
- package/mablscript/steps/AssertStepOld.js +8 -8
- package/mablscript/steps/ClickAndHoldStep.js +5 -5
- package/mablscript/steps/ClickStep.js +5 -5
- package/mablscript/steps/CreateVariableStep.js +2 -2
- package/mablscript/steps/DoubleClickStep.js +6 -6
- package/mablscript/steps/EnterTextStep.js +7 -7
- package/mablscript/steps/HoverStep.js +5 -5
- package/mablscript/steps/IfConditionStep.js +6 -6
- package/mablscript/steps/ReleaseStep.js +5 -5
- package/mablscript/steps/SelectStep.js +5 -5
- package/mablscript/steps/SendKeyStep.js +6 -6
- package/mablscript/steps/SetFilesStep.js +5 -5
- package/mablscript/steps/SwitchContextStep.js +3 -3
- package/mablscript/steps/WaitUntilStep.js +3 -3
- package/mablscriptFind/index.js +1 -1
- package/mablscriptFind/index.js.LICENSE.txt +5 -5
- package/package.json +1 -1
- package/resources/mablFind.js +1 -1
|
@@ -23,20 +23,22 @@ class PlaywrightBrowserLauncher {
|
|
|
23
23
|
:
|
|
24
24
|
null;
|
|
25
25
|
const defaultContext = await test_1.chromium.launchPersistentContext(options.userDataDir, {
|
|
26
|
-
|
|
27
|
-
headless: options.headless,
|
|
26
|
+
acceptDownloads: true,
|
|
28
27
|
args: options.args,
|
|
29
|
-
|
|
28
|
+
bypassCSP: options.bypassContentSecurityPolicy,
|
|
29
|
+
deviceScaleFactor: (_a = options.defaultDeviceDescriptor) === null || _a === void 0 ? void 0 : _a.deviceScaleFactor,
|
|
30
30
|
downloadsPath: options.downloadPath,
|
|
31
31
|
executablePath: options.executablePath,
|
|
32
|
-
viewport,
|
|
33
|
-
acceptDownloads: true,
|
|
34
|
-
httpCredentials: options.credentials,
|
|
35
32
|
extraHTTPHeaders: options.extraHttpHeaders,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
hasTouch: (_b = options.defaultDeviceDescriptor) === null || _b === void 0 ? void 0 : _b.hasTouch,
|
|
34
|
+
headless: options.headless,
|
|
35
|
+
httpCredentials: options.credentials,
|
|
36
|
+
ignoreDefaultArgs: options.ignoreDefaultArgs,
|
|
37
|
+
ignoreHTTPSErrors: true,
|
|
38
|
+
isMobile: (_c = options.defaultDeviceDescriptor) === null || _c === void 0 ? void 0 : _c.isMobile,
|
|
39
39
|
timeout: BROWSER_LAUNCH_TIMEOUT_MS,
|
|
40
|
+
userAgent: options.userAgent,
|
|
41
|
+
viewport,
|
|
40
42
|
});
|
|
41
43
|
return new playwrightBrowser_1.PlaywrightBrowser(defaultContext, path_1.default.join(options.downloadPath, 'final'), '');
|
|
42
44
|
}
|
|
@@ -11,12 +11,13 @@ const puppeteerBrowserLauncher_1 = require("./puppeteerBrowserLauncher");
|
|
|
11
11
|
const puppeteerPage_1 = require("./puppeteerPage");
|
|
12
12
|
const runnerType_1 = require("../runnerType");
|
|
13
13
|
class PuppeteerBrowser extends events_1.default {
|
|
14
|
-
constructor(browser, downloadDirectory, credentials) {
|
|
14
|
+
constructor(browser, downloadDirectory, credentials, userAgent) {
|
|
15
15
|
var _a;
|
|
16
16
|
super();
|
|
17
17
|
this.browser = browser;
|
|
18
18
|
this.downloadDirectory = downloadDirectory;
|
|
19
19
|
this.credentials = credentials;
|
|
20
|
+
this.userAgent = userAgent;
|
|
20
21
|
this.puppeteerPages = new Map();
|
|
21
22
|
(_a = this.browser
|
|
22
23
|
.process()) === null || _a === void 0 ? void 0 : _a.on('close', () => this.emit(browserLauncher_1.BrowserEvent.BrowserDestroyed));
|
|
@@ -18,7 +18,7 @@ class PuppeteerBrowserLauncher {
|
|
|
18
18
|
const browser = new puppeteerBrowser_1.PuppeteerBrowser(await puppeteer_core_1.default.launch({
|
|
19
19
|
ignoreHTTPSErrors: true,
|
|
20
20
|
...options,
|
|
21
|
-
}), options.downloadPath, options.credentials);
|
|
21
|
+
}), options.downloadPath, options.credentials, options.userAgent);
|
|
22
22
|
if (options.downloadPath) {
|
|
23
23
|
await browser.setDownloadBehavior(options.downloadPath);
|
|
24
24
|
}
|
|
@@ -59,6 +59,9 @@ class PuppeteerPage extends events_1.default {
|
|
|
59
59
|
if (this.browser.credentials !== undefined) {
|
|
60
60
|
await this.page.authenticate(this.browser.credentials);
|
|
61
61
|
}
|
|
62
|
+
if (this.browser.userAgent) {
|
|
63
|
+
await this.page.setUserAgent(this.browser.userAgent);
|
|
64
|
+
}
|
|
62
65
|
const opener = await ((_a = this.page.target().opener()) === null || _a === void 0 ? void 0 : _a.page());
|
|
63
66
|
this.openerPage = await (0, utils_1.mapIfNotNull)(opener, (page) => this.browser.getOrCreatePage(page));
|
|
64
67
|
}
|
package/commands/constants.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.BrowserTypeSelections = exports.DefaultBrowserType = exports.DefaultBranchName = exports.DefaultOutputFormatChoices = exports.DetailLevelFormats = exports.ReporterOptions = exports.OutputFormats = exports.CommandArgAliases = exports.CommandArgBrowserEnableExtensions = exports.CommandArgBrowserIgnoreCertificateErrors = exports.CommandArgBrowserDisableIsolation = exports.ListTimeFormat = exports.CommandArgReporterOptions = exports.CommandArgReporter = exports.CommandArgWorkspaceId = exports.CommandArgVersion = void 0;
|
|
3
|
+
exports.CommandArgUrlApi = exports.CommandArgUrlApp = exports.CommandArgUrl = exports.CommandArgTrainerVersion = exports.CommandArgTo = exports.CommandArgSilent = exports.CommandArgRevision = exports.CommandArgPlanId = exports.CommandArgContentTypes = exports.CommandArgPreview = exports.CommandArgOutputFilePath = exports.CommandArgOutput = exports.CommandArgNoPrompt = exports.CommandArgPrompt = exports.CommandArgPortNumber = exports.CommandArgName = exports.CommandArgMablBranchChangesOnly = exports.CommandArgMablBranch = exports.CommandArgMablAutoLogin = exports.CommandArgMablAutoBranch = exports.CommandArgLinkBypass = exports.CommandArgLinkLabel = exports.CommandArgLimitOutput = exports.CommandArgLabels = exports.CommandArgLabelsInclude = exports.CommandArgLabelsExclude = exports.CommandArgTestInteractionSpeed = exports.CommandArgTestRunId = exports.CommandArgTestFile = exports.CommandArgId = exports.CommandArgUserAgent = exports.CommandArgHttpHeaders = exports.CommandArgHelp = exports.CommandArgFromPlanId = exports.CommandArgFrom = exports.CommandArgFormat = exports.CommandArgFastFailure = exports.CommandArgOverrideEnvironmentId = exports.CommandArgEnvironmentId = exports.CommandArgEnableLink = exports.CommandArgDetailLevel = exports.CommandArgDescription = exports.CommandArgDeploymentId = exports.CommandArgDecrypt = exports.CommandArgDataTables = exports.CommandArgCredentials = exports.CommandArgBasicAuthCredentials = exports.CommandArgBrowsers = exports.CommandArgApplicationId = exports.CommandArgApiKey = void 0;
|
|
4
|
+
exports.BrowserTypeSelections = exports.DefaultBrowserType = exports.DefaultBranchName = exports.DefaultOutputFormatChoices = exports.DetailLevelFormats = exports.ReporterOptions = exports.OutputFormats = exports.CommandArgAliases = exports.CommandArgBrowserEnableExtensions = exports.CommandArgBrowserIgnoreCertificateErrors = exports.CommandArgBrowserDisableIsolation = exports.ListTimeFormat = exports.CommandArgReporterOptions = exports.CommandArgReporter = exports.CommandArgWorkspaceId = exports.CommandArgVersion = exports.CommandArgVariables = void 0;
|
|
5
5
|
const browserTypes_1 = require("./browserTypes");
|
|
6
6
|
exports.CommandArgApiKey = 'api-key';
|
|
7
7
|
exports.CommandArgApplicationId = 'application-id';
|
|
@@ -22,6 +22,7 @@ exports.CommandArgFrom = 'from';
|
|
|
22
22
|
exports.CommandArgFromPlanId = 'from-plan-id';
|
|
23
23
|
exports.CommandArgHelp = 'help';
|
|
24
24
|
exports.CommandArgHttpHeaders = 'http-headers';
|
|
25
|
+
exports.CommandArgUserAgent = 'user-agent';
|
|
25
26
|
exports.CommandArgId = 'id';
|
|
26
27
|
exports.CommandArgTestFile = 'test-file';
|
|
27
28
|
exports.CommandArgTestRunId = 'run-id';
|
|
@@ -138,15 +138,17 @@ async function createBrowserWithAuthedExtension(accessToken, browserWidth, brows
|
|
|
138
138
|
}
|
|
139
139
|
exports.createBrowserWithAuthedExtension = createBrowserWithAuthedExtension;
|
|
140
140
|
async function launchBrowserInstance(chromePath, launchArgs, userDataDir, headless, credentials, options) {
|
|
141
|
-
const { defaultDeviceDescriptor, extraHttpHeaders, ignoreDefaultArgs, runnerType, loggerFunc, } = options || {};
|
|
141
|
+
const { bypassContentSecurityPolicy, defaultDeviceDescriptor, extraHttpHeaders, ignoreDefaultArgs, runnerType, loggerFunc, userAgent, } = options || {};
|
|
142
142
|
let browser;
|
|
143
143
|
try {
|
|
144
144
|
browser = await maybeLaunchBrowser(chromePath, launchArgs, userDataDir, headless, credentials, {
|
|
145
|
+
bypassContentSecurityPolicy,
|
|
145
146
|
defaultDeviceDescriptor,
|
|
146
147
|
extraHttpHeaders,
|
|
147
148
|
ignoreDefaultArgs,
|
|
148
149
|
runnerType,
|
|
149
150
|
loggerFunc,
|
|
151
|
+
userAgent,
|
|
150
152
|
});
|
|
151
153
|
}
|
|
152
154
|
catch (error) {
|
|
@@ -154,6 +156,7 @@ async function launchBrowserInstance(chromePath, launchArgs, userDataDir, headle
|
|
|
154
156
|
launchArgs.push('--no-sandbox');
|
|
155
157
|
messaging_1.mablEventEmitter.log('Unable to initialize browser with standard settings, attempting to run with --no-sandbox setting', Date.now(), logLineMessaging_1.LogLineColor.yellow);
|
|
156
158
|
return maybeLaunchBrowser(chromePath, launchArgs, userDataDir, headless, credentials, {
|
|
159
|
+
bypassContentSecurityPolicy,
|
|
157
160
|
defaultDeviceDescriptor,
|
|
158
161
|
ignoreDefaultArgs,
|
|
159
162
|
runnerType,
|
|
@@ -168,8 +171,9 @@ async function launchBrowserInstance(chromePath, launchArgs, userDataDir, headle
|
|
|
168
171
|
return browser;
|
|
169
172
|
}
|
|
170
173
|
function maybeLaunchBrowser(chromePath, launchArgs, userDataDir, headless, credentials, options) {
|
|
171
|
-
const { defaultDeviceDescriptor, extraHttpHeaders, ignoreDefaultArgs, runnerType, loggerFunc, } = options || {};
|
|
174
|
+
const { bypassContentSecurityPolicy, defaultDeviceDescriptor, extraHttpHeaders, ignoreDefaultArgs, runnerType, loggerFunc, userAgent, } = options || {};
|
|
172
175
|
return browserLauncher_1.BrowserLauncherFactory.createRunner(runnerType, loggerFunc).launch({
|
|
176
|
+
bypassContentSecurityPolicy,
|
|
173
177
|
defaultDeviceDescriptor,
|
|
174
178
|
executablePath: chromePath,
|
|
175
179
|
extraHttpHeaders,
|
|
@@ -179,6 +183,7 @@ function maybeLaunchBrowser(chromePath, launchArgs, userDataDir, headless, crede
|
|
|
179
183
|
userDataDir,
|
|
180
184
|
downloadPath: createDownloadDirectory(),
|
|
181
185
|
credentials,
|
|
186
|
+
userAgent,
|
|
182
187
|
});
|
|
183
188
|
}
|
|
184
189
|
async function prepareChromePreferencesDirectory(browserPreferences) {
|
|
@@ -203,7 +208,7 @@ function removeTempBrowserPreferencesDirectory(tempDirPath) {
|
|
|
203
208
|
}
|
|
204
209
|
}
|
|
205
210
|
async function createBrowser(browserWidth, browserHeight, headless, containerTesting, tempBrowserPreferencesDirectory, options) {
|
|
206
|
-
const { credentials, browserPath, disableIsolation, extraHttpHeaders, ignoreCertificateErrors, emulationConfig, enableExtensions, runnerType, loggerFunc, resourcesDirectoryOverride, } = options || {};
|
|
211
|
+
const { bypassContentSecurityPolicy, credentials, browserPath, disableIsolation, extraHttpHeaders, ignoreCertificateErrors, emulationConfig, enableExtensions, runnerType, loggerFunc, resourcesDirectoryOverride, userAgent, } = options || {};
|
|
207
212
|
const chromePath = browserPath !== null && browserPath !== void 0 ? browserPath : findChrome();
|
|
208
213
|
if (!chromePath.length) {
|
|
209
214
|
messaging_1.mablEventEmitter.log(chalk.yellow('Could not find a local install of Chrome to use, please ensure you have it installed and try again'));
|
|
@@ -227,11 +232,13 @@ async function createBrowser(browserWidth, browserHeight, headless, containerTes
|
|
|
227
232
|
ignoreDefaultArgs = ['--disable-extensions'];
|
|
228
233
|
}
|
|
229
234
|
const maybeBrowser = await launchBrowserInstance(chromePath, launchArgs, tempBrowserPreferencesDirectory, headless, credentials, {
|
|
235
|
+
bypassContentSecurityPolicy,
|
|
230
236
|
defaultDeviceDescriptor,
|
|
231
237
|
extraHttpHeaders,
|
|
232
238
|
ignoreDefaultArgs,
|
|
233
239
|
runnerType,
|
|
234
240
|
loggerFunc,
|
|
241
|
+
userAgent: userAgent !== null && userAgent !== void 0 ? userAgent : emulationConfig === null || emulationConfig === void 0 ? void 0 : emulationConfig.device_config.user_agent,
|
|
235
242
|
});
|
|
236
243
|
if (!maybeBrowser) {
|
|
237
244
|
throw new Error('Unable to start Chrome session');
|
|
@@ -244,9 +251,6 @@ function addLaunchArgs(launchArgs, browserWidth, browserHeight, fakeMicrophoneMe
|
|
|
244
251
|
var _a, _b;
|
|
245
252
|
const defaultDeviceDescriptor = (0, mobileEmulationUtil_1.getDeviceDescriptorForEmulation)(emulationConfig);
|
|
246
253
|
launchArgs.push(`--window-size=${(_a = defaultDeviceDescriptor === null || defaultDeviceDescriptor === void 0 ? void 0 : defaultDeviceDescriptor.width) !== null && _a !== void 0 ? _a : browserWidth},${(_b = defaultDeviceDescriptor === null || defaultDeviceDescriptor === void 0 ? void 0 : defaultDeviceDescriptor.height) !== null && _b !== void 0 ? _b : browserHeight}`);
|
|
247
|
-
if (emulationConfig === null || emulationConfig === void 0 ? void 0 : emulationConfig.device_config.user_agent) {
|
|
248
|
-
launchArgs.push(`--user-agent=${emulationConfig === null || emulationConfig === void 0 ? void 0 : emulationConfig.device_config.user_agent}`);
|
|
249
|
-
}
|
|
250
254
|
launchArgs.push('--use-fake-ui-for-media-stream');
|
|
251
255
|
launchArgs.push('--use-fake-device-for-media-stream');
|
|
252
256
|
launchArgs.push(`--use-file-for-fake-audio-capture=${fakeMicrophoneMediaPath}`);
|
|
@@ -281,6 +285,7 @@ async function createBrowserForExecutionEngine(browserWidth, browserHeight, head
|
|
|
281
285
|
defaultDeviceDescriptor,
|
|
282
286
|
runnerType,
|
|
283
287
|
loggerFunc,
|
|
288
|
+
userAgent: emulationConfig === null || emulationConfig === void 0 ? void 0 : emulationConfig.device_config.user_agent,
|
|
284
289
|
});
|
|
285
290
|
if (!maybeBrowser) {
|
|
286
291
|
throw new Error('Unable to start Chrome session');
|
|
@@ -149,6 +149,10 @@ exports.builder = (yargs) => {
|
|
|
149
149
|
.option(constants_1.CommandArgHttpHeaders, {
|
|
150
150
|
describe: 'Space delimited HTTP headers added to browser requests (e.g. "x-header:foo")',
|
|
151
151
|
type: 'array',
|
|
152
|
+
})
|
|
153
|
+
.option(constants_1.CommandArgUserAgent, {
|
|
154
|
+
describe: 'Emulates a custom user-agent (e.g. "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4651.0 Safari/537.36")',
|
|
155
|
+
type: 'string',
|
|
152
156
|
})
|
|
153
157
|
.option(constants_1.CommandArgTestInteractionSpeed, {
|
|
154
158
|
describe: 'Set the speed that mabl interacts with webpages. Overrides test run settings if specified.',
|
|
@@ -200,6 +204,7 @@ async function run(parsed) {
|
|
|
200
204
|
testFile: parsed[constants_1.CommandArgTestFile],
|
|
201
205
|
runId: parsed['run-id'],
|
|
202
206
|
url: parsed.url,
|
|
207
|
+
userAgent: parsed[constants_1.CommandArgUserAgent],
|
|
203
208
|
width: parsed.width,
|
|
204
209
|
workspaceId,
|
|
205
210
|
};
|