@checkly/playwright-core 1.41.2-beta.6 → 1.41.23
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/lib/browserServerImpl.js +1 -1
- package/lib/cli/driver.js +11 -3
- package/lib/cli/program.js +13 -5
- package/lib/client/android.js +1 -1
- package/lib/client/artifact.js +2 -2
- package/lib/client/browserContext.js +5 -5
- package/lib/client/browserType.js +1 -1
- package/lib/client/channelOwner.js +3 -3
- package/lib/client/clientHelper.js +5 -1
- package/lib/client/connection.js +2 -2
- package/lib/client/consoleMessage.js +3 -3
- package/lib/client/electron.js +3 -0
- package/lib/client/events.js +1 -0
- package/lib/client/fetch.js +3 -3
- package/lib/client/frame.js +4 -3
- package/lib/client/harRouter.js +7 -1
- package/lib/client/locator.js +2 -2
- package/lib/client/page.js +26 -7
- package/lib/common/socksProxy.js +12 -17
- package/lib/generated/consoleApiSource.js +1 -1
- package/lib/generated/injectedScriptSource.js +1 -1
- package/lib/generated/recorderSource.js +1 -1
- package/lib/outofprocess.js +3 -3
- package/lib/protocol/validator.js +46 -29
- package/lib/remote/playwrightConnection.js +2 -2
- package/lib/remote/playwrightServer.js +72 -166
- package/lib/server/android/android.js +2 -2
- package/lib/server/android/backendAdb.js +2 -2
- package/lib/server/browser.js +2 -2
- package/lib/server/browserContext.js +8 -9
- package/lib/server/browserType.js +5 -5
- package/lib/server/chromium/chromium.js +5 -4
- package/lib/server/chromium/crBrowser.js +2 -3
- package/lib/server/chromium/crConnection.js +2 -2
- package/lib/server/chromium/crExecutionContext.js +2 -2
- package/lib/server/chromium/crInput.js +2 -2
- package/lib/server/chromium/crNetworkManager.js +10 -11
- package/lib/server/chromium/crPage.js +48 -7
- package/lib/server/chromium/crServiceWorker.js +2 -3
- package/lib/server/console.js +1 -3
- package/lib/server/debugController.js +0 -3
- package/lib/server/deviceDescriptorsSource.json +50 -50
- package/lib/server/dispatchers/browserContextDispatcher.js +7 -6
- package/lib/server/dispatchers/dispatcher.js +19 -20
- package/lib/server/dispatchers/electronDispatcher.js +13 -0
- package/lib/server/dispatchers/frameDispatcher.js +0 -6
- package/lib/server/dispatchers/localUtilsDispatcher.js +4 -4
- package/lib/server/dispatchers/pageDispatcher.js +14 -10
- package/lib/server/dispatchers/playwrightDispatcher.js +5 -5
- package/lib/server/dispatchers/writableStreamDispatcher.js +2 -2
- package/lib/server/dom.js +133 -170
- package/lib/server/electron/electron.js +40 -14
- package/lib/server/electron/loader.js +4 -2
- package/lib/server/fetch.js +4 -4
- package/lib/server/firefox/ffAccessibility.js +2 -1
- package/lib/server/firefox/ffBrowser.js +3 -3
- package/lib/server/firefox/ffConnection.js +1 -1
- package/lib/server/firefox/ffExecutionContext.js +2 -2
- package/lib/server/firefox/ffNetworkManager.js +7 -7
- package/lib/server/firefox/ffPage.js +3 -5
- package/lib/server/firefox/firefox.js +2 -2
- package/lib/server/frames.js +42 -23
- package/lib/server/har/harTracer.js +6 -6
- package/lib/server/helper.js +1 -1
- package/lib/server/input.js +2 -2
- package/lib/server/isomorphic/utilityScriptSerializers.js +0 -1
- package/lib/server/javascript.js +2 -2
- package/lib/server/page.js +51 -7
- package/lib/server/pipeTransport.js +1 -1
- package/lib/server/playwright.js +1 -1
- package/lib/server/progress.js +5 -14
- package/lib/server/recorder/csharp.js +1 -1
- package/lib/server/recorder/recorderUtils.js +2 -2
- package/lib/server/recorder.js +14 -14
- package/lib/server/registry/browserFetcher.js +1 -2
- package/lib/server/registry/dependencies.js +7 -6
- package/lib/server/registry/index.js +50 -33
- package/lib/server/registry/nativeDeps.js +0 -94
- package/lib/server/registry/oopDownloadBrowserMain.js +2 -2
- package/lib/server/screenshotter.js +0 -1
- package/lib/server/socksInterceptor.js +2 -2
- package/lib/server/trace/recorder/snapshotter.js +2 -2
- package/lib/server/trace/recorder/tracing.js +12 -11
- package/lib/server/trace/test/inMemorySnapshotter.js +1 -1
- package/lib/server/trace/viewer/traceViewer.js +2 -2
- package/lib/server/transport.js +15 -13
- package/lib/server/webkit/wkBrowser.js +3 -3
- package/lib/server/webkit/wkConnection.js +1 -1
- package/lib/server/webkit/wkExecutionContext.js +2 -2
- package/lib/server/webkit/wkInput.js +2 -2
- package/lib/server/webkit/wkInterceptableRequest.js +2 -2
- package/lib/server/webkit/wkPage.js +10 -12
- package/lib/utils/comparators.js +4 -4
- package/lib/utils/fileUtils.js +4 -0
- package/lib/utils/happy-eyeballs.js +5 -4
- package/lib/utils/hostPlatform.js +1 -1
- package/lib/utils/index.js +11 -0
- package/lib/utils/isomorphic/cssParser.js +2 -2
- package/lib/utils/isomorphic/locatorParser.js +6 -4
- package/lib/utils/isomorphic/selectorParser.js +0 -1
- package/lib/utils/network.js +33 -0
- package/lib/utils/processLauncher.js +9 -2
- package/lib/utils/profiler.js +2 -2
- package/lib/utils/zipFile.js +1 -1
- package/lib/vite/htmlReport/index.html +12 -13
- package/lib/vite/recorder/assets/codeMirrorModule-Hs9-1ZG4.css +1 -0
- package/lib/vite/recorder/assets/codeMirrorModule-I9ks4y7D.js +24 -0
- package/lib/vite/recorder/assets/{index-64ce22d5.css → index-ljsTwXtJ.css} +1 -1
- package/lib/vite/recorder/assets/index-yg8ypzl6.js +47 -0
- package/lib/vite/recorder/index.html +2 -3
- package/lib/vite/traceViewer/assets/codeMirrorModule-A2_PGeGB.js +24 -0
- package/lib/vite/{recorder/assets/codeMirrorModule-85487eb6.js → traceViewer/assets/codeMirrorModule-aUzO-LID.js} +1 -1
- package/lib/vite/traceViewer/assets/wsPort-L8WBvZfK.js +69 -0
- package/lib/vite/traceViewer/assets/wsPort-uVqol1LI.js +69 -0
- package/lib/vite/traceViewer/index.4xhUWj1f.js +2 -0
- package/lib/vite/traceViewer/index.html +4 -5
- package/lib/vite/traceViewer/index.o6j3Cv4u.js +2 -0
- package/lib/vite/traceViewer/sw.bundle.js +4 -4
- package/lib/vite/traceViewer/uiMode.PlLkrJDI.js +10 -0
- package/lib/vite/traceViewer/uiMode.html +4 -5
- package/lib/vite/traceViewer/uiMode.qpn6w4df.js +10 -0
- package/lib/vite/traceViewer/wsPort.zR1WIy9-.css +1 -0
- package/package.json +1 -1
- package/lib/vite/recorder/assets/codeMirrorModule-5d0f417c.css +0 -1
- package/lib/vite/recorder/assets/index-b14c63fe.js +0 -41
- /package/lib/vite/recorder/assets/{codicon-79f233d0.ttf → codicon-zGuYmc9o.ttf} +0 -0
package/lib/server/input.js
CHANGED
|
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.keypadLocation = exports.Touchscreen = exports.Mouse = exports.Keyboard = void 0;
|
|
7
7
|
var _utils = require("../utils");
|
|
8
8
|
var keyboardLayout = _interopRequireWildcard(require("./usKeyboardLayout"));
|
|
9
|
-
function _getRequireWildcardCache(
|
|
10
|
-
function _interopRequireWildcard(
|
|
9
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
10
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
11
11
|
/**
|
|
12
12
|
* Copyright (c) Microsoft Corporation.
|
|
13
13
|
*
|
package/lib/server/javascript.js
CHANGED
|
@@ -14,8 +14,8 @@ var utilityScriptSource = _interopRequireWildcard(require("../generated/utilityS
|
|
|
14
14
|
var _utilityScriptSerializers = require("./isomorphic/utilityScriptSerializers");
|
|
15
15
|
var _instrumentation = require("./instrumentation");
|
|
16
16
|
var _manualPromise = require("../utils/manualPromise");
|
|
17
|
-
function _getRequireWildcardCache(
|
|
18
|
-
function _interopRequireWildcard(
|
|
17
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
18
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
19
19
|
/**
|
|
20
20
|
* Copyright (c) Microsoft Corporation.
|
|
21
21
|
*
|
package/lib/server/page.js
CHANGED
|
@@ -17,14 +17,15 @@ var _fileChooser = require("./fileChooser");
|
|
|
17
17
|
var _progress = require("./progress");
|
|
18
18
|
var _utils = require("../utils");
|
|
19
19
|
var _manualPromise = require("../utils/manualPromise");
|
|
20
|
-
var _debugLogger = require("../
|
|
20
|
+
var _debugLogger = require("../utils/debugLogger");
|
|
21
21
|
var _comparators = require("../utils/comparators");
|
|
22
22
|
var _instrumentation = require("./instrumentation");
|
|
23
23
|
var _selectorParser = require("../utils/isomorphic/selectorParser");
|
|
24
24
|
var _utilityScriptSerializers = require("./isomorphic/utilityScriptSerializers");
|
|
25
25
|
var _errors = require("./errors");
|
|
26
|
-
|
|
27
|
-
function
|
|
26
|
+
var _locatorGenerators = require("../utils/isomorphic/locatorGenerators");
|
|
27
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
28
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
28
29
|
/**
|
|
29
30
|
* Copyright 2017 Google Inc. All rights reserved.
|
|
30
31
|
* Modifications copyright (c) Microsoft Corporation.
|
|
@@ -76,6 +77,9 @@ class Page extends _instrumentation.SdkObject {
|
|
|
76
77
|
this._video = null;
|
|
77
78
|
this._opener = void 0;
|
|
78
79
|
this._isServerSideOnly = false;
|
|
80
|
+
this._locatorHandlers = new Map();
|
|
81
|
+
this._lastLocatorHandlerUid = 0;
|
|
82
|
+
this._locatorHandlerRunningCounter = 0;
|
|
79
83
|
// Aiming at 25 fps by default - each frame is 40ms, but we give some slack with 35ms.
|
|
80
84
|
// When throttling for tracing, 200ms between frames, except for 10 frames around the action.
|
|
81
85
|
this._frameThrottler = new FrameThrottler(10, 35, 200);
|
|
@@ -139,6 +143,7 @@ class Page extends _instrumentation.SdkObject {
|
|
|
139
143
|
async resetForReuse(metadata) {
|
|
140
144
|
this.setDefaultNavigationTimeout(undefined);
|
|
141
145
|
this.setDefaultTimeout(undefined);
|
|
146
|
+
this._locatorHandlers.clear();
|
|
142
147
|
await this._removeExposedBindings();
|
|
143
148
|
await this._removeInitScripts();
|
|
144
149
|
await this.setClientRequestInterceptor(undefined);
|
|
@@ -282,6 +287,43 @@ class Page extends _instrumentation.SdkObject {
|
|
|
282
287
|
return response;
|
|
283
288
|
}), this._timeoutSettings.navigationTimeout(options));
|
|
284
289
|
}
|
|
290
|
+
registerLocatorHandler(selector) {
|
|
291
|
+
const uid = ++this._lastLocatorHandlerUid;
|
|
292
|
+
this._locatorHandlers.set(uid, {
|
|
293
|
+
selector
|
|
294
|
+
});
|
|
295
|
+
return uid;
|
|
296
|
+
}
|
|
297
|
+
resolveLocatorHandler(uid) {
|
|
298
|
+
const handler = this._locatorHandlers.get(uid);
|
|
299
|
+
if (handler) {
|
|
300
|
+
var _handler$resolved;
|
|
301
|
+
(_handler$resolved = handler.resolved) === null || _handler$resolved === void 0 || _handler$resolved.resolve();
|
|
302
|
+
handler.resolved = undefined;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
async performLocatorHandlersCheckpoint(progress) {
|
|
306
|
+
// Do not run locator handlers from inside locator handler callbacks to avoid deadlocks.
|
|
307
|
+
if (this._locatorHandlerRunningCounter) return;
|
|
308
|
+
for (const [uid, handler] of this._locatorHandlers) {
|
|
309
|
+
if (!handler.resolved) {
|
|
310
|
+
if (await this.mainFrame().isVisibleInternal(handler.selector, {
|
|
311
|
+
strict: true
|
|
312
|
+
})) {
|
|
313
|
+
handler.resolved = new _manualPromise.ManualPromise();
|
|
314
|
+
this.emit(Page.Events.LocatorHandlerTriggered, uid);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
if (handler.resolved) {
|
|
318
|
+
++this._locatorHandlerRunningCounter;
|
|
319
|
+
progress.log(` found ${(0, _locatorGenerators.asLocator)(this.attribution.playwright.options.sdkLanguage, handler.selector)}, intercepting action to run the handler`);
|
|
320
|
+
await this.openScope.race(handler.resolved).finally(() => --this._locatorHandlerRunningCounter);
|
|
321
|
+
// Avoid side-effects after long-running operation.
|
|
322
|
+
progress.throwIfAborted();
|
|
323
|
+
progress.log(` interception handler has finished, continuing`);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
285
327
|
async emulateMedia(options) {
|
|
286
328
|
if (options.media !== undefined) this._emulatedMedia.media = options.media;
|
|
287
329
|
if (options.colorScheme !== undefined) this._emulatedMedia.colorScheme = options.colorScheme;
|
|
@@ -347,10 +389,11 @@ class Page extends _instrumentation.SdkObject {
|
|
|
347
389
|
async expectScreenshot(metadata, options = {}) {
|
|
348
390
|
const locator = options.locator;
|
|
349
391
|
const rafrafScreenshot = locator ? async (progress, timeout) => {
|
|
350
|
-
return await locator.frame.rafrafTimeoutScreenshotElementWithProgress(progress, locator.selector, timeout, options
|
|
392
|
+
return await locator.frame.rafrafTimeoutScreenshotElementWithProgress(progress, locator.selector, timeout, options || {});
|
|
351
393
|
} : async (progress, timeout) => {
|
|
394
|
+
await this.performLocatorHandlersCheckpoint(progress);
|
|
352
395
|
await this.mainFrame().rafrafTimeout(timeout);
|
|
353
|
-
return await this._screenshotter.screenshotPage(progress, options
|
|
396
|
+
return await this._screenshotter.screenshotPage(progress, options || {});
|
|
354
397
|
};
|
|
355
398
|
const comparator = (0, _comparators.getComparator)('image/png');
|
|
356
399
|
const controller = new _progress.ProgressController(metadata, this);
|
|
@@ -358,7 +401,7 @@ class Page extends _instrumentation.SdkObject {
|
|
|
358
401
|
errorMessage: '"not" matcher requires expected result'
|
|
359
402
|
};
|
|
360
403
|
try {
|
|
361
|
-
const format = (0, _screenshotter.validateScreenshotOptions)(options
|
|
404
|
+
const format = (0, _screenshotter.validateScreenshotOptions)(options || {});
|
|
362
405
|
if (format !== 'png') throw new Error('Only PNG screenshots are supported');
|
|
363
406
|
} catch (error) {
|
|
364
407
|
return {
|
|
@@ -367,7 +410,7 @@ class Page extends _instrumentation.SdkObject {
|
|
|
367
410
|
}
|
|
368
411
|
let intermediateResult = undefined;
|
|
369
412
|
const areEqualScreenshots = (actual, expected, previous) => {
|
|
370
|
-
const comparatorResult = actual && expected ? comparator(actual, expected, options
|
|
413
|
+
const comparatorResult = actual && expected ? comparator(actual, expected, options) : undefined;
|
|
371
414
|
if (comparatorResult !== undefined && !!comparatorResult === !!options.isNot) return true;
|
|
372
415
|
if (comparatorResult) intermediateResult = {
|
|
373
416
|
errorMessage: comparatorResult.errorMessage,
|
|
@@ -520,6 +563,7 @@ Page.Events = {
|
|
|
520
563
|
FrameAttached: 'frameattached',
|
|
521
564
|
FrameDetached: 'framedetached',
|
|
522
565
|
InternalFrameNavigatedToNewDocument: 'internalframenavigatedtonewdocument',
|
|
566
|
+
LocatorHandlerTriggered: 'locatorhandlertriggered',
|
|
523
567
|
ScreencastFrame: 'screencastframe',
|
|
524
568
|
Video: 'video',
|
|
525
569
|
WebSocket: 'websocket',
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.PipeTransport = void 0;
|
|
7
7
|
var _utils = require("../utils");
|
|
8
|
-
var _debugLogger = require("../
|
|
8
|
+
var _debugLogger = require("../utils/debugLogger");
|
|
9
9
|
/**
|
|
10
10
|
* Copyright 2018 Google Inc. All rights reserved.
|
|
11
11
|
* Modifications copyright (c) Microsoft Corporation.
|
package/lib/server/playwright.js
CHANGED
|
@@ -13,7 +13,7 @@ var _firefox = require("./firefox/firefox");
|
|
|
13
13
|
var _selectors = require("./selectors");
|
|
14
14
|
var _webkit = require("./webkit/webkit");
|
|
15
15
|
var _instrumentation = require("./instrumentation");
|
|
16
|
-
var _debugLogger = require("../
|
|
16
|
+
var _debugLogger = require("../utils/debugLogger");
|
|
17
17
|
var _debugController = require("./debugController");
|
|
18
18
|
/**
|
|
19
19
|
* Copyright (c) Microsoft Corporation.
|
package/lib/server/progress.js
CHANGED
|
@@ -40,7 +40,6 @@ class ProgressController {
|
|
|
40
40
|
this.instrumentation = sdkObject.instrumentation;
|
|
41
41
|
this._forceAbortPromise.catch(e => null); // Prevent unhandled promise rejection.
|
|
42
42
|
}
|
|
43
|
-
|
|
44
43
|
setLogName(logName) {
|
|
45
44
|
this._logName = logName;
|
|
46
45
|
}
|
|
@@ -55,20 +54,12 @@ class ProgressController {
|
|
|
55
54
|
}
|
|
56
55
|
(0, _utils.assert)(this._state === 'before');
|
|
57
56
|
this._state = 'running';
|
|
58
|
-
(_this$sdkObject$attri = this.sdkObject.attribution.context) === null || _this$sdkObject$attri === void 0
|
|
57
|
+
(_this$sdkObject$attri = this.sdkObject.attribution.context) === null || _this$sdkObject$attri === void 0 || _this$sdkObject$attri._activeProgressControllers.add(this);
|
|
59
58
|
const progress = {
|
|
60
59
|
log: message => {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
},
|
|
65
|
-
logEntry: entry => {
|
|
66
|
-
if ('message' in entry) {
|
|
67
|
-
const message = entry.message;
|
|
68
|
-
if (this._state === 'running') this.metadata.log.push(message);
|
|
69
|
-
// Note: we might be sending logs after progress has finished, for example browser logs.
|
|
70
|
-
this.instrumentation.onCallLog(this.sdkObject, this.metadata, this._logName, message);
|
|
71
|
-
}
|
|
60
|
+
if (this._state === 'running') this.metadata.log.push(message);
|
|
61
|
+
// Note: we might be sending logs after progress has finished, for example browser logs.
|
|
62
|
+
this.instrumentation.onCallLog(this.sdkObject, this.metadata, this._logName, message);
|
|
72
63
|
},
|
|
73
64
|
timeUntilDeadline: () => this._deadline ? this._deadline - (0, _utils.monotonicTime)() : 2147483647,
|
|
74
65
|
// 2^31-1 safe setTimeout in Node.
|
|
@@ -97,7 +88,7 @@ class ProgressController {
|
|
|
97
88
|
throw e;
|
|
98
89
|
} finally {
|
|
99
90
|
var _this$sdkObject$attri2;
|
|
100
|
-
(_this$sdkObject$attri2 = this.sdkObject.attribution.context) === null || _this$sdkObject$attri2 === void 0
|
|
91
|
+
(_this$sdkObject$attri2 = this.sdkObject.attribution.context) === null || _this$sdkObject$attri2 === void 0 || _this$sdkObject$attri2._activeProgressControllers.delete(this);
|
|
101
92
|
clearTimeout(timer);
|
|
102
93
|
}
|
|
103
94
|
}
|
|
@@ -138,7 +138,7 @@ class CSharpLanguageGenerator {
|
|
|
138
138
|
return `await Expect(${subject}.${this._asLocator(action.selector)}).ToBeVisibleAsync();`;
|
|
139
139
|
case 'assertValue':
|
|
140
140
|
{
|
|
141
|
-
const assertion = action.value ? `ToHaveValueAsync(${quote(action.value)})` : `
|
|
141
|
+
const assertion = action.value ? `ToHaveValueAsync(${quote(action.value)})` : `ToBeEmptyAsync()`;
|
|
142
142
|
return `await Expect(${subject}.${this._asLocator(action.selector)}).${assertion};`;
|
|
143
143
|
}
|
|
144
144
|
}
|
|
@@ -21,7 +21,7 @@ exports.metadataToCallLog = metadataToCallLog;
|
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
23
|
function metadataToCallLog(metadata, status) {
|
|
24
|
-
var _metadata$params, _metadata$params2, _metadata$error
|
|
24
|
+
var _metadata$params, _metadata$params2, _metadata$error;
|
|
25
25
|
let title = metadata.apiName || metadata.method;
|
|
26
26
|
if (metadata.method === 'waitForEventInfo') title += `(${metadata.params.info.event})`;
|
|
27
27
|
title = title.replace('object.expect', 'expect');
|
|
@@ -40,7 +40,7 @@ function metadataToCallLog(metadata, status) {
|
|
|
40
40
|
messages: metadata.log,
|
|
41
41
|
title,
|
|
42
42
|
status,
|
|
43
|
-
error: (_metadata$error = metadata.error) === null || _metadata$error === void 0
|
|
43
|
+
error: (_metadata$error = metadata.error) === null || _metadata$error === void 0 || (_metadata$error = _metadata$error.error) === null || _metadata$error === void 0 ? void 0 : _metadata$error.message,
|
|
44
44
|
params,
|
|
45
45
|
duration
|
|
46
46
|
};
|
package/lib/server/recorder.js
CHANGED
|
@@ -26,8 +26,8 @@ var _timeoutRunner = require("../utils/timeoutRunner");
|
|
|
26
26
|
var _locatorParser = require("../utils/isomorphic/locatorParser");
|
|
27
27
|
var _stringUtils = require("../utils/isomorphic/stringUtils");
|
|
28
28
|
var _eventsHelper = require("./../utils/eventsHelper");
|
|
29
|
-
function _getRequireWildcardCache(
|
|
30
|
-
function _interopRequireWildcard(
|
|
29
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
30
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
31
31
|
/**
|
|
32
32
|
* Copyright (c) Microsoft Corporation.
|
|
33
33
|
*
|
|
@@ -144,7 +144,7 @@ class Recorder {
|
|
|
144
144
|
var _this$_recorderApp;
|
|
145
145
|
this._recorderSources = data.sources;
|
|
146
146
|
this._pushAllSources();
|
|
147
|
-
(_this$_recorderApp = this._recorderApp) === null || _this$_recorderApp === void 0
|
|
147
|
+
(_this$_recorderApp = this._recorderApp) === null || _this$_recorderApp === void 0 || _this$_recorderApp.setFileIfNeeded(data.primaryFileName);
|
|
148
148
|
});
|
|
149
149
|
await this._context.exposeBinding('__pw_recorderState', false, source => {
|
|
150
150
|
let actionSelector = '';
|
|
@@ -213,7 +213,7 @@ class Recorder {
|
|
|
213
213
|
} of this._debugger.pausedDetails()) {
|
|
214
214
|
if (!this._currentCallsMetadata.has(metadata)) this.onBeforeCall(sdkObject, metadata);
|
|
215
215
|
}
|
|
216
|
-
(_this$_recorderApp3 = this._recorderApp) === null || _this$_recorderApp3 === void 0
|
|
216
|
+
(_this$_recorderApp3 = this._recorderApp) === null || _this$_recorderApp3 === void 0 || _this$_recorderApp3.setPaused(this._debugger.isPaused());
|
|
217
217
|
this._updateUserSources();
|
|
218
218
|
this.updateCallLog([...this._currentCallsMetadata.keys()]);
|
|
219
219
|
}
|
|
@@ -222,7 +222,7 @@ class Recorder {
|
|
|
222
222
|
if (this._mode === mode) return;
|
|
223
223
|
this._highlightedSelector = '';
|
|
224
224
|
this._mode = mode;
|
|
225
|
-
(_this$_recorderApp4 = this._recorderApp) === null || _this$_recorderApp4 === void 0
|
|
225
|
+
(_this$_recorderApp4 = this._recorderApp) === null || _this$_recorderApp4 === void 0 || _this$_recorderApp4.setMode(this._mode);
|
|
226
226
|
this._contextRecorder.setEnabled(this._mode === 'recording' || this._mode === 'assertingText' || this._mode === 'assertingVisibility' || this._mode === 'assertingValue');
|
|
227
227
|
this._debugger.setMuted(this._mode === 'recording' || this._mode === 'assertingText' || this._mode === 'assertingVisibility' || this._mode === 'assertingValue');
|
|
228
228
|
if (this._mode !== 'none' && this._mode !== 'standby' && this._context.pages().length === 1) this._context.pages()[0].bringToFront().catch(() => {});
|
|
@@ -258,7 +258,7 @@ class Recorder {
|
|
|
258
258
|
} else if (metadata.params && metadata.params.selector) {
|
|
259
259
|
var _this$_recorderApp5;
|
|
260
260
|
this._highlightedSelector = metadata.params.selector;
|
|
261
|
-
(_this$_recorderApp5 = this._recorderApp) === null || _this$_recorderApp5 === void 0
|
|
261
|
+
(_this$_recorderApp5 = this._recorderApp) === null || _this$_recorderApp5 === void 0 || _this$_recorderApp5.setSelector(this._highlightedSelector).catch(() => {});
|
|
262
262
|
}
|
|
263
263
|
}
|
|
264
264
|
async onAfterCall(sdkObject, metadata) {
|
|
@@ -306,11 +306,11 @@ class Recorder {
|
|
|
306
306
|
}
|
|
307
307
|
}
|
|
308
308
|
this._pushAllSources();
|
|
309
|
-
if (fileToSelect) (_this$_recorderApp6 = this._recorderApp) === null || _this$_recorderApp6 === void 0
|
|
309
|
+
if (fileToSelect) (_this$_recorderApp6 = this._recorderApp) === null || _this$_recorderApp6 === void 0 || _this$_recorderApp6.setFileIfNeeded(fileToSelect);
|
|
310
310
|
}
|
|
311
311
|
_pushAllSources() {
|
|
312
312
|
var _this$_recorderApp7;
|
|
313
|
-
(_this$_recorderApp7 = this._recorderApp) === null || _this$_recorderApp7 === void 0
|
|
313
|
+
(_this$_recorderApp7 = this._recorderApp) === null || _this$_recorderApp7 === void 0 || _this$_recorderApp7.setSources([...this._recorderSources, ...this._userSources.values()]);
|
|
314
314
|
}
|
|
315
315
|
async onBeforeInputAction(sdkObject, metadata) {}
|
|
316
316
|
async onCallLog(sdkObject, metadata, logName, message) {
|
|
@@ -327,7 +327,7 @@ class Recorder {
|
|
|
327
327
|
if (this._debugger.isPaused(metadata)) status = 'paused';
|
|
328
328
|
logs.push((0, _recorderUtils.metadataToCallLog)(metadata, status));
|
|
329
329
|
}
|
|
330
|
-
(_this$_recorderApp8 = this._recorderApp) === null || _this$_recorderApp8 === void 0
|
|
330
|
+
(_this$_recorderApp8 = this._recorderApp) === null || _this$_recorderApp8 === void 0 || _this$_recorderApp8.updateCallLogs(logs);
|
|
331
331
|
}
|
|
332
332
|
_readSource(fileName) {
|
|
333
333
|
try {
|
|
@@ -384,7 +384,7 @@ class ContextRecorder extends _events.EventEmitter {
|
|
|
384
384
|
};
|
|
385
385
|
source.revealLine = text.split('\n').length - 1;
|
|
386
386
|
this._recorderSources.push(source);
|
|
387
|
-
if (languageGenerator === this._orderedLanguages[0]) (_this$_throttledOutpu = this._throttledOutputFile) === null || _this$_throttledOutpu === void 0
|
|
387
|
+
if (languageGenerator === this._orderedLanguages[0]) (_this$_throttledOutpu = this._throttledOutputFile) === null || _this$_throttledOutpu === void 0 || _this$_throttledOutpu.setContent(source.text);
|
|
388
388
|
}
|
|
389
389
|
this.emit(ContextRecorder.Events.Change, {
|
|
390
390
|
sources: this._recorderSources,
|
|
@@ -393,11 +393,11 @@ class ContextRecorder extends _events.EventEmitter {
|
|
|
393
393
|
});
|
|
394
394
|
context.on(_browserContext.BrowserContext.Events.BeforeClose, () => {
|
|
395
395
|
var _this$_throttledOutpu2;
|
|
396
|
-
(_this$_throttledOutpu2 = this._throttledOutputFile) === null || _this$_throttledOutpu2 === void 0
|
|
396
|
+
(_this$_throttledOutpu2 = this._throttledOutputFile) === null || _this$_throttledOutpu2 === void 0 || _this$_throttledOutpu2.flush();
|
|
397
397
|
});
|
|
398
398
|
this._listeners.push(_eventsHelper.eventsHelper.addEventListener(process, 'exit', () => {
|
|
399
399
|
var _this$_throttledOutpu3;
|
|
400
|
-
(_this$_throttledOutpu3 = this._throttledOutputFile) === null || _this$_throttledOutpu3 === void 0
|
|
400
|
+
(_this$_throttledOutpu3 = this._throttledOutputFile) === null || _this$_throttledOutpu3 === void 0 || _this$_throttledOutpu3.flush();
|
|
401
401
|
}));
|
|
402
402
|
this._generator = generator;
|
|
403
403
|
}
|
|
@@ -409,7 +409,7 @@ class ContextRecorder extends _events.EventEmitter {
|
|
|
409
409
|
languages.delete(primaryLanguage);
|
|
410
410
|
this._orderedLanguages = [primaryLanguage, ...languages];
|
|
411
411
|
this._throttledOutputFile = outputFile ? new ThrottledFile(outputFile) : null;
|
|
412
|
-
(_this$_generator = this._generator) === null || _this$_generator === void 0
|
|
412
|
+
(_this$_generator = this._generator) === null || _this$_generator === void 0 || _this$_generator.restart();
|
|
413
413
|
}
|
|
414
414
|
languageName(id) {
|
|
415
415
|
for (const lang of this._orderedLanguages) {
|
|
@@ -690,7 +690,7 @@ async function findFrameSelector(frame) {
|
|
|
690
690
|
const utility = await parent._utilityContext();
|
|
691
691
|
const injected = await utility.injectedScript();
|
|
692
692
|
const selector = await injected.evaluate((injected, element) => {
|
|
693
|
-
return injected.
|
|
693
|
+
return injected.generateSelectorSimple(element, {
|
|
694
694
|
testIdAttributeName: '',
|
|
695
695
|
omitInternalEngines: true
|
|
696
696
|
});
|
|
@@ -10,7 +10,7 @@ var _os = _interopRequireDefault(require("os"));
|
|
|
10
10
|
var _path = _interopRequireDefault(require("path"));
|
|
11
11
|
var _child_process = _interopRequireDefault(require("child_process"));
|
|
12
12
|
var _fileUtils = require("../../utils/fileUtils");
|
|
13
|
-
var _debugLogger = require("../../
|
|
13
|
+
var _debugLogger = require("../../utils/debugLogger");
|
|
14
14
|
var _manualPromise = require("../../utils/manualPromise");
|
|
15
15
|
var _utilsBundle = require("../../utilsBundle");
|
|
16
16
|
var _ = require(".");
|
|
@@ -126,7 +126,6 @@ function logPolitely(toBeLogged) {
|
|
|
126
126
|
const logLevelDisplay = ['silent', 'error', 'warn'].indexOf(logLevel || '') > -1;
|
|
127
127
|
if (!logLevelDisplay) console.log(toBeLogged); // eslint-disable-line no-console
|
|
128
128
|
}
|
|
129
|
-
|
|
130
129
|
function getDownloadProgress() {
|
|
131
130
|
if (process.stdout.isTTY) return getAnimatedDownloadProgress();
|
|
132
131
|
return getBasicDownloadProgress();
|
|
@@ -21,8 +21,8 @@ var _hostPlatform = require("../../utils/hostPlatform");
|
|
|
21
21
|
var _ = require(".");
|
|
22
22
|
var _nativeDeps = require("./nativeDeps");
|
|
23
23
|
var _userAgent = require("../../utils/userAgent");
|
|
24
|
-
function _getRequireWildcardCache(
|
|
25
|
-
function _interopRequireWildcard(
|
|
24
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
25
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
26
26
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
27
27
|
/**
|
|
28
28
|
* Copyright (c) Microsoft Corporation.
|
|
@@ -166,7 +166,7 @@ async function validateDependenciesWindows(windowsExeAndDllDirectories) {
|
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
168
|
async function validateDependenciesLinux(sdkLanguage, linuxLddDirectories, dlOpenLibraries) {
|
|
169
|
-
var _deps$hostPlatform;
|
|
169
|
+
var _deps$hostPlatform, _process$getuid, _process;
|
|
170
170
|
const directoryPaths = linuxLddDirectories;
|
|
171
171
|
const lddPaths = [];
|
|
172
172
|
for (const directoryPath of directoryPaths) lddPaths.push(...(await executablesOrSharedLibraries(directoryPath)));
|
|
@@ -192,7 +192,7 @@ async function validateDependenciesLinux(sdkLanguage, linuxLddDirectories, dlOpe
|
|
|
192
192
|
missingDeps.delete(missingDep);
|
|
193
193
|
}
|
|
194
194
|
}
|
|
195
|
-
const maybeSudo = process.getuid
|
|
195
|
+
const maybeSudo = (_process$getuid = (_process = process).getuid) !== null && _process$getuid !== void 0 && _process$getuid.call(_process) && os.platform() !== 'win32' ? 'sudo ' : '';
|
|
196
196
|
const dockerInfo = readDockerVersionSync();
|
|
197
197
|
const errorLines = [`Host system is missing dependencies to run browsers.`];
|
|
198
198
|
// Ignore patch versions when comparing docker container version and Playwright version:
|
|
@@ -202,7 +202,7 @@ async function validateDependenciesLinux(sdkLanguage, linuxLddDirectories, dlOpe
|
|
|
202
202
|
// In this case, we know how to install dependencies in it.
|
|
203
203
|
const pwVersion = (0, _userAgent.getPlaywrightVersion)();
|
|
204
204
|
const requiredDockerImage = dockerInfo.dockerImageName.replace(dockerInfo.driverVersion, pwVersion);
|
|
205
|
-
errorLines.push(...[`This is most likely due to
|
|
205
|
+
errorLines.push(...[`This is most likely due to Docker image version not matching Playwright version:`, `- Playwright : ${pwVersion}`, `- Docker image: ${dockerInfo.driverVersion}`, ``, `Either:`, `- (recommended) use Docker image "${requiredDockerImage}"`, `- (alternative 1) run the following command inside Docker to install missing dependencies:`, ``, ` ${maybeSudo}${(0, _.buildPlaywrightCLICommand)(sdkLanguage, 'install-deps')}`, ``, `- (alternative 2) use apt inside Docker:`, ``, ` ${maybeSudo}apt-get install ${[...missingPackages].join('\\\n ')}`, ``, `<3 Playwright Team`]);
|
|
206
206
|
} else if (missingPackages.size && !missingDeps.size) {
|
|
207
207
|
// Only known dependencies are missing for browsers.
|
|
208
208
|
// Suggest installation with a Playwright CLI.
|
|
@@ -301,7 +301,8 @@ function quoteProcessArgs(args) {
|
|
|
301
301
|
});
|
|
302
302
|
}
|
|
303
303
|
async function transformCommandsForRoot(commands) {
|
|
304
|
-
|
|
304
|
+
var _process$getuid2, _process2;
|
|
305
|
+
const isRoot = ((_process$getuid2 = (_process2 = process).getuid) === null || _process$getuid2 === void 0 ? void 0 : _process$getuid2.call(_process2)) === 0;
|
|
305
306
|
if (isRoot) return {
|
|
306
307
|
command: 'sh',
|
|
307
308
|
args: ['-c', `${commands.join('&& ')}`],
|