@checkly/playwright-core 1.41.26 → 1.42.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.
- package/ThirdPartyNotices.txt +3 -3
- package/bin/reinstall_chrome_beta_win.ps1 +2 -1
- package/bin/reinstall_chrome_stable_win.ps1 +2 -1
- package/bin/reinstall_msedge_beta_win.ps1 +2 -1
- package/bin/reinstall_msedge_dev_win.ps1 +2 -1
- package/bin/reinstall_msedge_stable_win.ps1 +2 -1
- package/browsers.json +14 -15
- package/cli.js +2 -1
- package/lib/checkly/fetch.js +28 -1
- package/lib/cli/driver.js +9 -1
- package/lib/cli/program.js +12 -4
- package/lib/client/browserContext.js +1 -1
- package/lib/client/channelOwner.js +1 -1
- package/lib/client/clientHelper.js +5 -1
- package/lib/client/connection.js +1 -1
- package/lib/client/consoleMessage.js +1 -1
- package/lib/client/electron.js +3 -0
- package/lib/client/events.js +1 -0
- package/lib/client/frame.js +2 -1
- package/lib/client/harRouter.js +7 -1
- package/lib/client/page.js +25 -6
- package/lib/common/socksProxy.js +1 -1
- 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 +1 -1
- package/lib/protocol/validator.js +60 -30
- package/lib/remote/playwrightConnection.js +1 -1
- package/lib/remote/playwrightServer.js +72 -166
- package/lib/server/android/android.js +1 -1
- package/lib/server/browserType.js +2 -2
- package/lib/server/chromium/chromium.js +5 -4
- package/lib/server/chromium/crConnection.js +1 -1
- package/lib/server/chromium/crNetworkManager.js +1 -3
- package/lib/server/chromium/crPage.js +45 -2
- package/lib/server/chromium/crPdf.js +8 -2
- 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 +3 -2
- package/lib/server/dispatchers/dispatcher.js +9 -10
- package/lib/server/dispatchers/electronDispatcher.js +13 -0
- package/lib/server/dispatchers/frameDispatcher.js +0 -6
- package/lib/server/dispatchers/networkDispatchers.js +1 -0
- package/lib/server/dispatchers/pageDispatcher.js +14 -10
- package/lib/server/dom.js +130 -167
- package/lib/server/electron/electron.js +38 -12
- package/lib/server/electron/loader.js +4 -2
- package/lib/server/fetch.js +1 -0
- package/lib/server/firefox/ffAccessibility.js +2 -1
- package/lib/server/firefox/ffConnection.js +1 -1
- package/lib/server/firefox/ffPage.js +1 -1
- package/lib/server/frames.js +39 -20
- package/lib/server/helper.js +1 -1
- package/lib/server/page.js +49 -5
- package/lib/server/pipeTransport.js +1 -1
- package/lib/server/playwright.js +1 -1
- package/lib/server/progress.js +3 -11
- package/lib/server/recorder/csharp.js +1 -1
- package/lib/server/recorder/java.js +36 -4
- package/lib/server/recorder.js +2 -2
- package/lib/server/registry/browserFetcher.js +1 -1
- package/lib/server/registry/dependencies.js +5 -4
- package/lib/server/registry/index.js +48 -30
- package/lib/server/registry/nativeDeps.js +0 -94
- package/lib/server/trace/recorder/snapshotter.js +1 -1
- package/lib/server/trace/recorder/tracing.js +5 -2
- package/lib/server/trace/viewer/traceViewer.js +1 -1
- package/lib/server/transport.js +4 -2
- package/lib/server/webkit/wkConnection.js +1 -1
- package/lib/server/webkit/wkPage.js +2 -2
- package/lib/utils/comparators.js +4 -4
- package/lib/utils/fileUtils.js +4 -0
- package/lib/utils/hostPlatform.js +1 -1
- package/lib/utils/index.js +33 -0
- package/lib/utils/isomorphic/locatorParser.js +6 -4
- package/lib/utils/isomorphic/stringUtils.js +5 -0
- package/lib/utils/network.js +32 -0
- package/lib/utils/processLauncher.js +7 -0
- package/lib/utils/rtti.js +7 -4
- package/lib/utils/wsServer.js +5 -3
- package/lib/utilsBundleImpl/index.js +4 -4
- package/lib/vite/htmlReport/index.html +11 -11
- package/lib/vite/traceViewer/assets/{codeMirrorModule-2ImvVqMb.js → codeMirrorModule-BK3t1EEu.js} +1 -1
- package/lib/vite/traceViewer/assets/codeMirrorModule-V7N6ppkd.js +15585 -0
- package/lib/vite/traceViewer/assets/{codeMirrorModule-y3M3aAqy.js → codeMirrorModule-Vg1kIqMp.js} +1 -1
- package/lib/vite/traceViewer/assets/{codeMirrorModule-fqJB1XDu.js → codeMirrorModule-wLpsbIhd.js} +13 -13
- package/lib/vite/traceViewer/assets/{wsPort-L8WBvZfK.js → wsPort-964mA9MZ.js} +18 -18
- package/lib/vite/traceViewer/assets/wsPort-EUvw-dwH.js +18540 -0
- package/lib/vite/traceViewer/assets/{wsPort-uVqol1LI.js → wsPort-RIoVGhlT.js} +18 -18
- package/lib/vite/traceViewer/assets/wsPort-f2dAQL4I.js +69 -0
- package/lib/vite/traceViewer/assets/xtermModule-_6TC5FYT.js +6529 -0
- package/lib/vite/traceViewer/codeMirrorModule.svF_VrcJ.css +344 -0
- package/lib/vite/traceViewer/{index.LR1HufLs.js → index.-_8-eHEE.js} +1 -1
- package/lib/vite/traceViewer/index.5mge2rY_.css +124 -0
- package/lib/vite/traceViewer/index.6KJ-JQ0L.js +180 -0
- package/lib/vite/traceViewer/{index.4X7zDysg.js → index.cbtHmFgM.js} +1 -1
- package/lib/vite/traceViewer/index.html +3 -3
- package/lib/vite/traceViewer/{index.4xhUWj1f.js → index.qOFdH9Ja.js} +1 -1
- package/lib/vite/traceViewer/sw.bundle.js +4 -4
- package/lib/vite/traceViewer/{uiMode.PlLkrJDI.js → uiMode.9CwNsWc6.js} +1 -1
- package/lib/vite/traceViewer/{uiMode.qpn6w4df.js → uiMode.fcU_T5Nf.js} +1 -1
- package/lib/vite/traceViewer/uiMode.html +3 -3
- package/lib/vite/traceViewer/{uiMode.GTNzARcV.js → uiMode.iNIhieBM.js} +1 -1
- package/lib/vite/traceViewer/uiMode.iq7CyYy7.js +1490 -0
- package/lib/vite/traceViewer/uiMode.xvJHbkzl.css +1324 -0
- package/lib/vite/traceViewer/wsPort.p5jUwABW.css +3450 -0
- package/lib/vite/traceViewer/xtermModule.OKEVRlkP.css +209 -0
- package/package.json +6 -5
- package/types/protocol.d.ts +367 -53
- package/types/types.d.ts +220 -50
- package/LICENSE +0 -202
- package/NOTICE +0 -5
- package/lib/cli/cli.js +0 -61
- package/lib/common/debugLogger.js +0 -89
- package/lib/vite/traceViewer/assets/codeMirrorModule-2mdjgmqe.js +0 -24
- package/lib/vite/traceViewer/assets/codeMirrorModule-56536a77.js +0 -24
- package/lib/vite/traceViewer/assets/codeMirrorModule-75b0ca4f.js +0 -24
- package/lib/vite/traceViewer/assets/codeMirrorModule-A2_PGeGB.js +0 -24
- package/lib/vite/traceViewer/assets/codeMirrorModule-GJA8DRmd.js +0 -24
- package/lib/vite/traceViewer/assets/codeMirrorModule-GluP1cQ1.js +0 -24
- package/lib/vite/traceViewer/assets/codeMirrorModule-aUzO-LID.js +0 -24
- package/lib/vite/traceViewer/assets/codeMirrorModule-b361a51f.js +0 -24
- package/lib/vite/traceViewer/assets/codeMirrorModule-c1454a2e.js +0 -24
- package/lib/vite/traceViewer/assets/codeMirrorModule-f333a775.js +0 -24
- package/lib/vite/traceViewer/assets/wsPort-722747dc.js +0 -64
- package/lib/vite/traceViewer/assets/wsPort-762c6840.js +0 -64
- package/lib/vite/traceViewer/assets/wsPort-93o0i57c.js +0 -69
- package/lib/vite/traceViewer/assets/wsPort-98e00a94.js +0 -64
- package/lib/vite/traceViewer/assets/wsPort-Rvwd4WC-.js +0 -69
- package/lib/vite/traceViewer/assets/wsPort-db501ca9.js +0 -64
- package/lib/vite/traceViewer/assets/wsPort-dlD7vDkY.js +0 -69
- package/lib/vite/traceViewer/assets/wsPort-ee2830d7.js +0 -64
- package/lib/vite/traceViewer/assets/wsPort-qI0zJPR7.js +0 -69
- package/lib/vite/traceViewer/assets/wsPort-qOE2NWrO.js +0 -69
- package/lib/vite/traceViewer/assets/wsPort-sh0wpjYp.js +0 -69
- package/lib/vite/traceViewer/assets/xtermModule-443332e6.js +0 -9
- package/lib/vite/traceViewer/codeMirrorModule.5d0f417c.css +0 -1
- package/lib/vite/traceViewer/codicon.79f233d0.ttf +0 -0
- package/lib/vite/traceViewer/index.0d08c336.js +0 -2
- package/lib/vite/traceViewer/index.1a1fe659.css +0 -1
- package/lib/vite/traceViewer/index.HkJgzlGy.js +0 -2
- package/lib/vite/traceViewer/index.Ox-CymYJ.js +0 -2
- package/lib/vite/traceViewer/index.a265fbdb.js +0 -2
- package/lib/vite/traceViewer/index.d05939c9.js +0 -2
- package/lib/vite/traceViewer/index.decad628.js +0 -2
- package/lib/vite/traceViewer/index.ed9a3c58.js +0 -2
- package/lib/vite/traceViewer/index.kRjx5sAJ.js +0 -2
- package/lib/vite/traceViewer/index.krETyIB_.js +0 -2
- package/lib/vite/traceViewer/index.o6j3Cv4u.js +0 -2
- package/lib/vite/traceViewer/uiMode.08ab2d90.js +0 -4
- package/lib/vite/traceViewer/uiMode.0d0d667b.js +0 -4
- package/lib/vite/traceViewer/uiMode.1Wcp_Kto.js +0 -10
- package/lib/vite/traceViewer/uiMode.3ff70f7d.js +0 -4
- package/lib/vite/traceViewer/uiMode.8b41a49d.css +0 -1
- package/lib/vite/traceViewer/uiMode.8e0454c4.js +0 -4
- package/lib/vite/traceViewer/uiMode.Rcwfn0db.js +0 -10
- package/lib/vite/traceViewer/uiMode.YGPXSUMv.js +0 -10
- package/lib/vite/traceViewer/uiMode.YYFJGvtV.js +0 -10
- package/lib/vite/traceViewer/uiMode.c1ebfc43.js +0 -4
- package/lib/vite/traceViewer/uiMode.zV-7Lf9v.js +0 -10
- package/lib/vite/traceViewer/wsPort.9c9a6767.css +0 -1
- package/lib/vite/traceViewer/wsPort.kSgQKQ0y.css +0 -1
- package/lib/vite/traceViewer/xtermModule.6428296b.css +0 -32
package/ThirdPartyNotices.txt
CHANGED
|
@@ -23,7 +23,7 @@ This project incorporates components from the projects listed below. The origina
|
|
|
23
23
|
- get-stream@5.2.0 (https://github.com/sindresorhus/get-stream)
|
|
24
24
|
- graceful-fs@4.2.10 (https://github.com/isaacs/node-graceful-fs)
|
|
25
25
|
- https-proxy-agent@5.0.0 (https://github.com/TooTallNate/node-https-proxy-agent)
|
|
26
|
-
- ip@2.0.
|
|
26
|
+
- ip@2.0.1 (https://github.com/indutny/node-ip)
|
|
27
27
|
- is-docker@2.2.1 (https://github.com/sindresorhus/is-docker)
|
|
28
28
|
- is-wsl@2.2.0 (https://github.com/sindresorhus/is-wsl)
|
|
29
29
|
- jpeg-js@0.4.4 (https://github.com/eugeneware/jpeg-js)
|
|
@@ -740,7 +740,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
740
740
|
=========================================
|
|
741
741
|
END OF https-proxy-agent@5.0.0 AND INFORMATION
|
|
742
742
|
|
|
743
|
-
%% ip@2.0.
|
|
743
|
+
%% ip@2.0.1 NOTICES AND INFORMATION BEGIN HERE
|
|
744
744
|
=========================================
|
|
745
745
|
# IP
|
|
746
746
|
[](https://www.npmjs.com/package/ip)
|
|
@@ -833,7 +833,7 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
|
833
833
|
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
834
834
|
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
835
835
|
=========================================
|
|
836
|
-
END OF ip@2.0.
|
|
836
|
+
END OF ip@2.0.1 AND INFORMATION
|
|
837
837
|
|
|
838
838
|
%% is-docker@2.2.1 NOTICES AND INFORMATION BEGIN HERE
|
|
839
839
|
=========================================
|
|
@@ -18,6 +18,7 @@ if (Test-Path "${env:ProgramFiles(x86)}$suffix") {
|
|
|
18
18
|
} elseif (Test-Path "${env:ProgramFiles}$suffix") {
|
|
19
19
|
(Get-Item "${env:ProgramFiles}$suffix").VersionInfo
|
|
20
20
|
} else {
|
|
21
|
-
Write-Host "ERROR:
|
|
21
|
+
Write-Host "ERROR: Failed to install Google Chrome Beta."
|
|
22
|
+
Write-Host "ERROR: This could be due to insufficient privileges, in which case re-running as Administrator may help."
|
|
22
23
|
exit 1
|
|
23
24
|
}
|
|
@@ -18,6 +18,7 @@ if (Test-Path "${env:ProgramFiles(x86)}$suffix") {
|
|
|
18
18
|
} elseif (Test-Path "${env:ProgramFiles}$suffix") {
|
|
19
19
|
(Get-Item "${env:ProgramFiles}$suffix").VersionInfo
|
|
20
20
|
} else {
|
|
21
|
-
Write-Host "ERROR:
|
|
21
|
+
Write-Host "ERROR: Failed to install Google Chrome."
|
|
22
|
+
Write-Host "ERROR: This could be due to insufficient privileges, in which case re-running as Administrator may help."
|
|
22
23
|
exit 1
|
|
23
24
|
}
|
|
@@ -17,6 +17,7 @@ if (Test-Path "${env:ProgramFiles(x86)}$suffix") {
|
|
|
17
17
|
} elseif (Test-Path "${env:ProgramFiles}$suffix") {
|
|
18
18
|
(Get-Item "${env:ProgramFiles}$suffix").VersionInfo
|
|
19
19
|
} else {
|
|
20
|
-
Write-Host "ERROR:
|
|
20
|
+
Write-Host "ERROR: Failed to install Microsoft Edge Beta."
|
|
21
|
+
Write-Host "ERROR: This could be due to insufficient privileges, in which case re-running as Administrator may help."
|
|
21
22
|
exit 1
|
|
22
23
|
}
|
|
@@ -17,6 +17,7 @@ if (Test-Path "${env:ProgramFiles(x86)}$suffix") {
|
|
|
17
17
|
} elseif (Test-Path "${env:ProgramFiles}$suffix") {
|
|
18
18
|
(Get-Item "${env:ProgramFiles}$suffix").VersionInfo
|
|
19
19
|
} else {
|
|
20
|
-
Write-Host "ERROR:
|
|
20
|
+
Write-Host "ERROR: Failed to install Microsoft Edge Dev."
|
|
21
|
+
Write-Host "ERROR: This could be due to insufficient privileges, in which case re-running as Administrator may help."
|
|
21
22
|
exit 1
|
|
22
23
|
}
|
|
@@ -18,6 +18,7 @@ if (Test-Path "${env:ProgramFiles(x86)}$suffix") {
|
|
|
18
18
|
} elseif (Test-Path "${env:ProgramFiles}$suffix") {
|
|
19
19
|
(Get-Item "${env:ProgramFiles}$suffix").VersionInfo
|
|
20
20
|
} else {
|
|
21
|
-
Write-Host "ERROR:
|
|
21
|
+
Write-Host "ERROR: Failed to install Microsoft Edge."
|
|
22
|
+
Write-Host "ERROR: This could be due to insufficient privileges, in which case re-running as Administrator may help."
|
|
22
23
|
exit 1
|
|
23
24
|
}
|
package/browsers.json
CHANGED
|
@@ -3,50 +3,49 @@
|
|
|
3
3
|
"browsers": [
|
|
4
4
|
{
|
|
5
5
|
"name": "chromium",
|
|
6
|
-
"revision": "
|
|
6
|
+
"revision": "1105",
|
|
7
7
|
"installByDefault": true,
|
|
8
|
-
"browserVersion": "
|
|
8
|
+
"browserVersion": "123.0.6312.4"
|
|
9
9
|
},
|
|
10
10
|
{
|
|
11
11
|
"name": "chromium-with-symbols",
|
|
12
|
-
"revision": "
|
|
12
|
+
"revision": "1105",
|
|
13
13
|
"installByDefault": false,
|
|
14
|
-
"browserVersion": "
|
|
14
|
+
"browserVersion": "123.0.6312.4"
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
17
|
"name": "chromium-tip-of-tree",
|
|
18
|
-
"revision": "
|
|
18
|
+
"revision": "1195",
|
|
19
19
|
"installByDefault": false,
|
|
20
|
-
"browserVersion": "
|
|
20
|
+
"browserVersion": "123.0.6312.0"
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
23
|
"name": "firefox",
|
|
24
|
-
"revision": "
|
|
24
|
+
"revision": "1440",
|
|
25
25
|
"installByDefault": true,
|
|
26
|
-
"browserVersion": "
|
|
26
|
+
"browserVersion": "123.0"
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
29
|
"name": "firefox-asan",
|
|
30
|
-
"revision": "
|
|
30
|
+
"revision": "1440",
|
|
31
31
|
"installByDefault": false,
|
|
32
|
-
"browserVersion": "
|
|
32
|
+
"browserVersion": "123.0"
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
"name": "firefox-beta",
|
|
36
|
-
"revision": "
|
|
36
|
+
"revision": "1440",
|
|
37
37
|
"installByDefault": false,
|
|
38
|
-
"browserVersion": "
|
|
38
|
+
"browserVersion": "124.0b3"
|
|
39
39
|
},
|
|
40
40
|
{
|
|
41
41
|
"name": "webkit",
|
|
42
|
-
"revision": "
|
|
42
|
+
"revision": "1983",
|
|
43
43
|
"installByDefault": true,
|
|
44
44
|
"revisionOverrides": {
|
|
45
45
|
"mac10.14": "1446",
|
|
46
46
|
"mac10.15": "1616",
|
|
47
47
|
"mac11": "1816",
|
|
48
|
-
"mac11-arm64": "1816"
|
|
49
|
-
"ubuntu18.04-x64": "1728"
|
|
48
|
+
"mac11-arm64": "1816"
|
|
50
49
|
},
|
|
51
50
|
"browserVersion": "17.4"
|
|
52
51
|
},
|
package/cli.js
CHANGED
|
@@ -14,4 +14,5 @@
|
|
|
14
14
|
* See the License for the specific language governing permissions and
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
|
-
|
|
17
|
+
const { program } = require('./lib/cli/programWithTestStub');
|
|
18
|
+
program.parse(process.argv);
|
package/lib/checkly/fetch.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.setSWatcherCurrentStepData = exports.parseQueryParameters = exports.initializeTimings = exports.getTimings = exports.getRequestHeaders = exports.getClientCertificates = exports.getBody = exports.addRequestListeners = void 0;
|
|
6
|
+
exports.setSWatcherCurrentStepData = exports.parseQueryParameters = exports.initializeTimings = exports.getTimings = exports.getRequestHeaders = exports.getRequestBody = exports.getClientCertificates = exports.getBody = exports.addRequestListeners = void 0;
|
|
7
7
|
/**
|
|
8
8
|
* Get client custom certificates.
|
|
9
9
|
*
|
|
@@ -37,6 +37,33 @@ const getRequestHeaders = headers => {
|
|
|
37
37
|
});
|
|
38
38
|
};
|
|
39
39
|
exports.getRequestHeaders = getRequestHeaders;
|
|
40
|
+
const getRequestBody = (postData, multipartData, options) => {
|
|
41
|
+
const requestBody = {};
|
|
42
|
+
if (postData) {
|
|
43
|
+
requestBody.data = getBody(postData);
|
|
44
|
+
} else if (multipartData && multipartData.length > 0) {
|
|
45
|
+
requestBody.multipart = multipartData.map(field => {
|
|
46
|
+
var _field$file, _field$file2, _field$file3;
|
|
47
|
+
const multiPartBuffer = getBody(((_field$file = field.file) === null || _field$file === void 0 ? void 0 : _field$file.buffer) || Buffer.from(''));
|
|
48
|
+
return {
|
|
49
|
+
name: field.name,
|
|
50
|
+
value: field.value,
|
|
51
|
+
file: {
|
|
52
|
+
name: (_field$file2 = field.file) === null || _field$file2 === void 0 ? void 0 : _field$file2.name,
|
|
53
|
+
mimeType: (_field$file3 = field.file) === null || _field$file3 === void 0 ? void 0 : _field$file3.mimeType,
|
|
54
|
+
buffer: multiPartBuffer
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
for (const [key, value] of Object.entries(options)) {
|
|
60
|
+
if (key !== 'headers' && key !== 'method') {
|
|
61
|
+
requestBody[key] = value;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return requestBody;
|
|
65
|
+
};
|
|
66
|
+
exports.getRequestBody = getRequestBody;
|
|
40
67
|
const parseQueryParameters = url => {
|
|
41
68
|
const searchParams = new URL(url).searchParams;
|
|
42
69
|
const parameters = [];
|
package/lib/cli/driver.js
CHANGED
|
@@ -50,7 +50,15 @@ function runDriver() {
|
|
|
50
50
|
});
|
|
51
51
|
const transport = new _transport.PipeTransport(process.stdout, process.stdin);
|
|
52
52
|
transport.onmessage = message => dispatcherConnection.dispatch(JSON.parse(message));
|
|
53
|
-
|
|
53
|
+
// Certain Language Binding JSON parsers (e.g. .NET) do not like strings with lone surrogates.
|
|
54
|
+
const isJavaScriptLanguageBinding = !process.env.PW_LANG_NAME || process.env.PW_LANG_NAME === 'javascript';
|
|
55
|
+
const replacer = !isJavaScriptLanguageBinding && String.prototype.toWellFormed ? (key, value) => {
|
|
56
|
+
if (typeof value === 'string')
|
|
57
|
+
// @ts-expect-error
|
|
58
|
+
return value.toWellFormed();
|
|
59
|
+
return value;
|
|
60
|
+
} : undefined;
|
|
61
|
+
dispatcherConnection.onmessage = message => transport.send(JSON.stringify(message, replacer));
|
|
54
62
|
transport.onclose = () => {
|
|
55
63
|
// Drop any messages during shutdown on the floor.
|
|
56
64
|
dispatcherConnection.onmessage = () => {};
|
package/lib/cli/program.js
CHANGED
|
@@ -3,7 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports
|
|
6
|
+
Object.defineProperty(exports, "program", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _utilsBundle.program;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
7
12
|
var _fs = _interopRequireDefault(require("fs"));
|
|
8
13
|
var _os = _interopRequireDefault(require("os"));
|
|
9
14
|
var _path = _interopRequireDefault(require("path"));
|
|
@@ -51,7 +56,7 @@ Examples:
|
|
|
51
56
|
|
|
52
57
|
$ open
|
|
53
58
|
$ open -b webkit https://example.com`);
|
|
54
|
-
commandWithOpenOptions('codegen [url]', 'open page and generate code for user actions', [['-o, --output <file name>', 'saves the generated script to a file'], ['--target <language>', `language to generate, one of javascript, playwright-test, python, python-async, python-pytest, csharp, csharp-mstest, csharp-nunit, java`, codegenId()], ['--save-trace <filename>', 'record a trace for the session and save it to a file'], ['--test-id-attribute <attributeName>', 'use the specified attribute to generate data test ID selectors']]).action(function (url, options) {
|
|
59
|
+
commandWithOpenOptions('codegen [url]', 'open page and generate code for user actions', [['-o, --output <file name>', 'saves the generated script to a file'], ['--target <language>', `language to generate, one of javascript, playwright-test, python, python-async, python-pytest, csharp, csharp-mstest, csharp-nunit, java, java-junit`, codegenId()], ['--save-trace <filename>', 'record a trace for the session and save it to a file'], ['--test-id-attribute <attributeName>', 'use the specified attribute to generate data test ID selectors']]).action(function (url, options) {
|
|
55
60
|
codegen(options, url).catch(logErrorAndExit);
|
|
56
61
|
}).addHelpText('afterAll', `
|
|
57
62
|
Examples:
|
|
@@ -111,6 +116,10 @@ _utilsBundle.program.command('install [browser...]').description('ensure browser
|
|
|
111
116
|
} else {
|
|
112
117
|
const forceReinstall = hasNoArguments ? false : !!options.force;
|
|
113
118
|
await _server.registry.install(executables, forceReinstall);
|
|
119
|
+
await _server.registry.validateHostRequirementsForExecutablesIfNeeded(executables, process.env.PW_LANG_NAME || 'javascript').catch(e => {
|
|
120
|
+
e.name = 'Playwright Host validation warning';
|
|
121
|
+
console.error(e);
|
|
122
|
+
});
|
|
114
123
|
}
|
|
115
124
|
} catch (e) {
|
|
116
125
|
console.log(`Failed to install browsers\n${e}`);
|
|
@@ -570,5 +579,4 @@ function buildBasePlaywrightCLICommand(cliTargetLang) {
|
|
|
570
579
|
return `${packageManagerCommand} playwright`;
|
|
571
580
|
}
|
|
572
581
|
}
|
|
573
|
-
}
|
|
574
|
-
var _default = exports.default = _utilsBundle.program;
|
|
582
|
+
}
|
|
@@ -504,6 +504,6 @@ async function prepareBrowserContextParams(options) {
|
|
|
504
504
|
}
|
|
505
505
|
function toAcceptDownloadsProtocol(acceptDownloads) {
|
|
506
506
|
if (acceptDownloads === undefined) return undefined;
|
|
507
|
-
if (acceptDownloads
|
|
507
|
+
if (acceptDownloads) return 'accept';
|
|
508
508
|
return 'deny';
|
|
509
509
|
}
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.ChannelOwner = void 0;
|
|
7
7
|
var _events = require("events");
|
|
8
8
|
var _validator = require("../protocol/validator");
|
|
9
|
-
var _debugLogger = require("../
|
|
9
|
+
var _debugLogger = require("../utils/debugLogger");
|
|
10
10
|
var _stackTrace = require("../utils/stackTrace");
|
|
11
11
|
var _utils = require("../utils");
|
|
12
12
|
var _zones = require("../utils/zones");
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.addSourceUrlToScript = addSourceUrlToScript;
|
|
6
7
|
exports.envObjectToArray = envObjectToArray;
|
|
7
8
|
exports.evaluationScript = evaluationScript;
|
|
8
9
|
var _fs = _interopRequireDefault(require("fs"));
|
|
@@ -46,8 +47,11 @@ async function evaluationScript(fun, arg, addSourceUrl = true) {
|
|
|
46
47
|
if (fun.content !== undefined) return fun.content;
|
|
47
48
|
if (fun.path !== undefined) {
|
|
48
49
|
let source = await _fs.default.promises.readFile(fun.path, 'utf8');
|
|
49
|
-
if (addSourceUrl) source
|
|
50
|
+
if (addSourceUrl) source = addSourceUrlToScript(source, fun.path);
|
|
50
51
|
return source;
|
|
51
52
|
}
|
|
52
53
|
throw new Error('Either path or content property must be present');
|
|
54
|
+
}
|
|
55
|
+
function addSourceUrlToScript(source, path) {
|
|
56
|
+
return `${source}\n//# sourceURL=${path.replace(/\n/g, '')}`;
|
|
53
57
|
}
|
package/lib/client/connection.js
CHANGED
|
@@ -21,7 +21,7 @@ var _playwright = require("./playwright");
|
|
|
21
21
|
var _electron = require("./electron");
|
|
22
22
|
var _stream = require("./stream");
|
|
23
23
|
var _writableStream = require("./writableStream");
|
|
24
|
-
var _debugLogger = require("../
|
|
24
|
+
var _debugLogger = require("../utils/debugLogger");
|
|
25
25
|
var _selectors = require("./selectors");
|
|
26
26
|
var _android = require("./android");
|
|
27
27
|
var _artifact = require("./artifact");
|
|
@@ -30,7 +30,7 @@ class ConsoleMessage {
|
|
|
30
30
|
constructor(event) {
|
|
31
31
|
this._page = void 0;
|
|
32
32
|
this._event = void 0;
|
|
33
|
-
this._page = event.page ? _page.Page.from(event.page) : null;
|
|
33
|
+
this._page = 'page' in event && event.page ? _page.Page.from(event.page) : null;
|
|
34
34
|
this._event = event;
|
|
35
35
|
}
|
|
36
36
|
page() {
|
package/lib/client/electron.js
CHANGED
|
@@ -10,6 +10,7 @@ var _channelOwner = require("./channelOwner");
|
|
|
10
10
|
var _clientHelper = require("./clientHelper");
|
|
11
11
|
var _events = require("./events");
|
|
12
12
|
var _jsHandle = require("./jsHandle");
|
|
13
|
+
var _consoleMessage = require("./consoleMessage");
|
|
13
14
|
var _waiter = require("./waiter");
|
|
14
15
|
var _errors = require("./errors");
|
|
15
16
|
let _Symbol$asyncDispose;
|
|
@@ -65,6 +66,8 @@ class ElectronApplication extends _channelOwner.ChannelOwner {
|
|
|
65
66
|
this._isClosed = true;
|
|
66
67
|
this.emit(_events.Events.ElectronApplication.Close);
|
|
67
68
|
});
|
|
69
|
+
this._channel.on('console', event => this.emit(_events.Events.ElectronApplication.Console, new _consoleMessage.ConsoleMessage(event)));
|
|
70
|
+
this._setEventToSubscriptionMapping(new Map([[_events.Events.ElectronApplication.Console, 'console']]));
|
|
68
71
|
}
|
|
69
72
|
process() {
|
|
70
73
|
return this._toImpl().process();
|
package/lib/client/events.js
CHANGED
package/lib/client/frame.js
CHANGED
|
@@ -18,6 +18,7 @@ var _waiter = require("./waiter");
|
|
|
18
18
|
var _events2 = require("./events");
|
|
19
19
|
var _types = require("./types");
|
|
20
20
|
var _network2 = require("../utils/network");
|
|
21
|
+
var _clientHelper = require("./clientHelper");
|
|
21
22
|
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); }
|
|
22
23
|
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; }
|
|
23
24
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -270,7 +271,7 @@ class Frame extends _channelOwner.ChannelOwner {
|
|
|
270
271
|
};
|
|
271
272
|
if (copy.path) {
|
|
272
273
|
copy.content = (await _fs.default.promises.readFile(copy.path)).toString();
|
|
273
|
-
copy.content
|
|
274
|
+
copy.content = (0, _clientHelper.addSourceUrlToScript)(copy.content, copy.path);
|
|
274
275
|
}
|
|
275
276
|
return _elementHandle.ElementHandle.from((await this._channel.addScriptTag({
|
|
276
277
|
...copy
|
package/lib/client/harRouter.js
CHANGED
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.HarRouter = void 0;
|
|
7
|
-
var _debugLogger = require("../
|
|
7
|
+
var _debugLogger = require("../utils/debugLogger");
|
|
8
8
|
let _Symbol$asyncDispose;
|
|
9
9
|
/**
|
|
10
10
|
* Copyright (c) Microsoft Corporation.
|
|
@@ -59,6 +59,12 @@ class HarRouter {
|
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
61
61
|
if (response.action === 'fulfill') {
|
|
62
|
+
// If the response status is -1, the request was canceled or stalled, so we just stall it here.
|
|
63
|
+
// See https://github.com/microsoft/playwright/issues/29311.
|
|
64
|
+
// TODO: it'd be better to abort such requests, but then we likely need to respect the timing,
|
|
65
|
+
// because the request might have been stalled for a long time until the very end of the
|
|
66
|
+
// test when HAR was recorded but we'd abort it immediately.
|
|
67
|
+
if (response.status === -1) return;
|
|
62
68
|
await route.fulfill({
|
|
63
69
|
status: response.status,
|
|
64
70
|
headers: Object.fromEntries(response.headers.map(h => [h.name, h.value])),
|
package/lib/client/page.js
CHANGED
|
@@ -79,6 +79,7 @@ class Page extends _channelOwner.ChannelOwner {
|
|
|
79
79
|
this._closeReason = void 0;
|
|
80
80
|
this._closeWasCalled = false;
|
|
81
81
|
this._harRouters = [];
|
|
82
|
+
this._locatorHandlers = new Map();
|
|
82
83
|
this._browserContext = parent;
|
|
83
84
|
this._timeoutSettings = new _timeoutSettings.TimeoutSettings(this._browserContext._timeoutSettings);
|
|
84
85
|
this.accessibility = new _accessibility.Accessibility(this._channel);
|
|
@@ -115,6 +116,9 @@ class Page extends _channelOwner.ChannelOwner {
|
|
|
115
116
|
this._channel.on('frameDetached', ({
|
|
116
117
|
frame
|
|
117
118
|
}) => this._onFrameDetached(_frame.Frame.from(frame)));
|
|
119
|
+
this._channel.on('locatorHandlerTriggered', ({
|
|
120
|
+
uid
|
|
121
|
+
}) => this._onLocatorHandlerTriggered(uid));
|
|
118
122
|
this._channel.on('route', ({
|
|
119
123
|
route
|
|
120
124
|
}) => this._onRoute(_network2.Route.from(route)));
|
|
@@ -304,6 +308,25 @@ class Page extends _channelOwner.ChannelOwner {
|
|
|
304
308
|
waitUntil
|
|
305
309
|
})).response);
|
|
306
310
|
}
|
|
311
|
+
async addLocatorHandler(locator, handler) {
|
|
312
|
+
if (locator._frame !== this._mainFrame) throw new Error(`Locator must belong to the main frame of this page`);
|
|
313
|
+
const {
|
|
314
|
+
uid
|
|
315
|
+
} = await this._channel.registerLocatorHandler({
|
|
316
|
+
selector: locator._selector
|
|
317
|
+
});
|
|
318
|
+
this._locatorHandlers.set(uid, handler);
|
|
319
|
+
}
|
|
320
|
+
async _onLocatorHandlerTriggered(uid) {
|
|
321
|
+
try {
|
|
322
|
+
const handler = this._locatorHandlers.get(uid);
|
|
323
|
+
await (handler === null || handler === void 0 ? void 0 : handler());
|
|
324
|
+
} finally {
|
|
325
|
+
this._wrapApiCall(() => this._channel.resolveLocatorHandlerNoReply({
|
|
326
|
+
uid
|
|
327
|
+
}), true).catch(() => {});
|
|
328
|
+
}
|
|
329
|
+
}
|
|
307
330
|
async waitForLoadState(state, options) {
|
|
308
331
|
return await this._mainFrame.waitForLoadState(state, options);
|
|
309
332
|
}
|
|
@@ -462,8 +485,7 @@ class Page extends _channelOwner.ChannelOwner {
|
|
|
462
485
|
return result.binary;
|
|
463
486
|
}
|
|
464
487
|
async _expectScreenshot(options) {
|
|
465
|
-
|
|
466
|
-
const mask = (_options$screenshotOp = options.screenshotOptions) !== null && _options$screenshotOp !== void 0 && _options$screenshotOp.mask ? (_options$screenshotOp2 = options.screenshotOptions) === null || _options$screenshotOp2 === void 0 ? void 0 : _options$screenshotOp2.mask.map(locator => ({
|
|
488
|
+
const mask = options !== null && options !== void 0 && options.mask ? options === null || options === void 0 ? void 0 : options.mask.map(locator => ({
|
|
467
489
|
frame: locator._frame._channel,
|
|
468
490
|
selector: locator._selector
|
|
469
491
|
})) : undefined;
|
|
@@ -475,10 +497,7 @@ class Page extends _channelOwner.ChannelOwner {
|
|
|
475
497
|
...options,
|
|
476
498
|
isNot: !!options.isNot,
|
|
477
499
|
locator,
|
|
478
|
-
|
|
479
|
-
...options.screenshotOptions,
|
|
480
|
-
mask
|
|
481
|
-
}
|
|
500
|
+
mask
|
|
482
501
|
});
|
|
483
502
|
}
|
|
484
503
|
async title() {
|
package/lib/common/socksProxy.js
CHANGED
|
@@ -7,7 +7,7 @@ exports.SocksProxyHandler = exports.SocksProxy = void 0;
|
|
|
7
7
|
exports.parsePattern = parsePattern;
|
|
8
8
|
var _events = _interopRequireDefault(require("events"));
|
|
9
9
|
var _net = _interopRequireDefault(require("net"));
|
|
10
|
-
var _debugLogger = require("
|
|
10
|
+
var _debugLogger = require("../utils/debugLogger");
|
|
11
11
|
var _happyEyeballs = require("../utils/happy-eyeballs");
|
|
12
12
|
var _utils = require("../utils");
|
|
13
13
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|