diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index dfadfbee529b5ebf7bc78d45e91d08b03bcd54d2..ccbd2be5991f936a2f834bd53f6ad728ecd5dc8c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -34,6 +34,21 @@ test: paths: - node_modules/ +web-test: + stage: test + tags: + - nixos-gen3 + script: + - nix develop .#gitlab --command run-ci-tests + # cahe node_modules + cache: + untracked: true + key: + files: + - pnpm-lock.yaml + paths: + - node_modules/ + #deploy: # stage: deploy # tags: diff --git a/flake.lock b/flake.lock index 1affddb717c84d20bfba2c68d924b40629c39100..565c2bca82b12e7f46f55d8fae98578187e5e99d 100644 --- a/flake.lock +++ b/flake.lock @@ -115,11 +115,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1715395895, - "narHash": "sha256-DreMqi6+qa21ffLQqhMQL2XRUkAGt3N7iVB5FhJKie4=", + "lastModified": 1715542476, + "narHash": "sha256-FF593AtlzQqa8JpzrXyRws4CeKbc5W86o8tHt4nRfIg=", "owner": "nixos", "repo": "nixpkgs", - "rev": "71bae31b7dbc335528ca7e96f479ec93462323ff", + "rev": "44072e24566c5bcc0b7aa9178a0104f4cfffab19", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 98cee84ed58f6b62ff4641fc83cb329265da2d66..c055246dfcbebab1556ee0735e9115f9dee5da1e 100644 --- a/flake.nix +++ b/flake.nix @@ -98,6 +98,11 @@ echo_fail "Node modules are not installed, run task init-project" fi + export PLAYWRIGHT_BROWSERS_PATH="${pkgs'.playwright.browsers}" + export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 + export PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS=true + + echo_section "Happy hacking!" ''; }; diff --git a/nix/config/common-packages.nix b/nix/config/common-packages.nix index c91bf2c0d20d64ad4fe60c000b6db4030ab9c178..1d45d81b7b1afcd07fbd5dbee4f62d3ed2db49d3 100644 --- a/nix/config/common-packages.nix +++ b/nix/config/common-packages.nix @@ -33,4 +33,6 @@ with pkgs'; [ vhs wget zlib + + ] diff --git a/nix/scripts/update-files.nix b/nix/scripts/update-files.nix index ecd76f1d0a2810301b47416c1484042227b52ce5..d1261208c2b97c9a577cacead1141e569410b526 100644 --- a/nix/scripts/update-files.nix +++ b/nix/scripts/update-files.nix @@ -1,9 +1,9 @@ { pkgs, lib, + commonScript, ... }: let - common = pkgs.callPackage ./common.nix {}; importJSScript = pkgs.writeTextFile { name = "import.mjs"; @@ -32,7 +32,7 @@ }; in pkgs.writeShellScriptBin "update-files" '' - ${common} + source ${commonScript} echo_section "Update files" diff --git a/package.json b/package.json index d036cebc61607b8cbd6a9693f2b156d23fdeaf5c..f25b5ded65b41cb5a9ab4eb80ef55cb652627780 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "@biomejs/biome": "1.3.3", "@esbuild-plugins/node-modules-polyfill": "^0.2.2", "@peculiar/webcrypto": "^1.4.6", + "@playwright/test": "^1.44.0", "@roarr/cli": "^5.12.4", "autoprefixer": "^10.4.19", "browserslist": "^4.23.0", @@ -64,11 +65,12 @@ "estraverse": "^5.3.0", "flow-bin": "^0.221.0", "fs": "0.0.1-security", - "glob": "^10.3.14", + "glob": "^10.3.15", "graphviz": "^0.0.9", "jsdom": "^22.1.0", "jsdom-global": "^3.0.2", "mocha": "^10.4.0", + "playwright": "^1.44.0", "postcss": "^8.4.38", "postcss-fluid": "^1.4.2", "postcss-for": "^2.1.1", @@ -76,7 +78,7 @@ "postcss-load-config": "^4.0.2", "postcss-mixins": "^9.0.4", "postcss-nested": "^6.0.1", - "postcss-nesting": "^12.1.3", + "postcss-nesting": "^12.1.4", "postcss-normalize": "^10.0.1", "postcss-responsive-type": "^1.0.0", "postcss-rtlcss": "^4.0.9", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ef90617c6cf70f6d2d09c0544b139642b9f36bae..6dab2341d11a49ab3593c1b9a0f3ee9c2e895940 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,6 +24,9 @@ importers: '@peculiar/webcrypto': specifier: ^1.4.6 version: 1.4.6 + '@playwright/test': + specifier: ^1.44.0 + version: 1.44.0 '@roarr/cli': specifier: ^5.12.4 version: 5.12.4 @@ -76,8 +79,8 @@ importers: specifier: 0.0.1-security version: 0.0.1-security glob: - specifier: ^10.3.14 - version: 10.3.14 + specifier: ^10.3.15 + version: 10.3.15 graphviz: specifier: ^0.0.9 version: 0.0.9 @@ -90,6 +93,9 @@ importers: mocha: specifier: ^10.4.0 version: 10.4.0 + playwright: + specifier: ^1.44.0 + version: 1.44.0 postcss: specifier: ^8.4.38 version: 8.4.38 @@ -112,8 +118,8 @@ importers: specifier: ^6.0.1 version: 6.0.1(postcss@8.4.38) postcss-nesting: - specifier: ^12.1.3 - version: 12.1.3(postcss@8.4.38) + specifier: ^12.1.4 + version: 12.1.4(postcss@8.4.38) postcss-normalize: specifier: ^10.0.1 version: 10.0.1(browserslist@4.23.0)(postcss@8.4.38) @@ -315,8 +321,8 @@ packages: peerDependencies: postcss-selector-parser: ^6.0.13 - '@csstools/selector-specificity@3.1.0': - resolution: {integrity: sha512-tGDFEHZ4XJeIt5NF7/nAfLGqPckmDZSnYne5gl67p4agQolE5s4rofdQ3e+VkeukfR91lVtSQ/Jt9DqM1ICiIQ==} + '@csstools/selector-specificity@3.1.1': + resolution: {integrity: sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss-selector-parser: ^6.0.13 @@ -825,6 +831,11 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@playwright/test@1.44.0': + resolution: {integrity: sha512-rNX5lbNidamSUorBhB4XZ9SQTjAqfe5M+p37Z8ic0jPFBMo5iCtQz1kRWkEMg+rYOKSlVycpQmpqjSFq7LXOfg==} + engines: {node: '>=16'} + hasBin: true + '@polka/url@1.0.0-next.25': resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} @@ -1049,8 +1060,8 @@ packages: '@types/node@18.19.33': resolution: {integrity: sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==} - '@types/node@20.12.11': - resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==} + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} '@types/ps-tree@1.1.6': resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} @@ -1259,8 +1270,8 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001617: - resolution: {integrity: sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA==} + caniuse-lite@1.0.30001618: + resolution: {integrity: sha512-p407+D1tIkDvsEAPS22lJxLQQaG8OTBEqo0KhzfABGk0TU4juBNDSfH0hyAp/HRyx+M8L17z/ltyhxh27FTfQg==} chai-dom@1.12.0: resolution: {integrity: sha512-pLP8h6IBR8z1AdeQ+EMcJ7dXPdsax/1Q7gdGZjsnAmSBl3/gItQUYSCo32br1qOy4SlcBjvqId7ilAf3uJ2K1w==} @@ -1578,8 +1589,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.4.763: - resolution: {integrity: sha512-k4J8NrtJ9QrvHLRo8Q18OncqBCB7tIUyqxRcJnlonQ0ioHKYB988GcDFF3ZePmnb8eHEopDs/wPHR/iGAFgoUQ==} + electron-to-chromium@1.4.768: + resolution: {integrity: sha512-z2U3QcvNuxdkk33YV7R1bVMNq7fL23vq3WfO5BHcqrm4TnDGReouBfYKLEFh5umoK1XACjEwp8mmnhXk2EJigw==} element-internals-polyfill@1.3.11: resolution: {integrity: sha512-SQLQNVY4wMdpnP/F/HtalJbpEenQd46Avtjm5hvUdeTs3QU0zHFNX5/AmtQIPPcfzePb0ipCkQGY4GwYJIhLJA==} @@ -1812,6 +1823,11 @@ packages: fs@0.0.1-security: resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -1855,9 +1871,9 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - glob@10.3.14: - resolution: {integrity: sha512-4fkAqu93xe9Mk7le9v0y3VrPDqLKHarNi2s4Pv7f2yOvfhWfhc7hRPHC/JyqMqb8B/Dt/eGS4n7ykwf3fOsl8g==} - engines: {node: '>=16 || 14 >=14.17'} + glob@10.3.15: + resolution: {integrity: sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==} + engines: {node: '>=16 || 14 >=14.18'} hasBin: true glob@7.2.3: @@ -2415,8 +2431,8 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nwsapi@2.2.9: - resolution: {integrity: sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==} + nwsapi@2.2.10: + resolution: {integrity: sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==} object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} @@ -2518,9 +2534,9 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.11.0: - resolution: {integrity: sha512-LNHTaVkzaYaLGlO+0u3rQTz7QrHTFOuKyba9JMTQutkmtNew8dw8wOD7mTU/5fCPZzCWpfW0XnQKzY61P0aTaw==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} path-to-regexp@6.2.2: resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} @@ -2538,8 +2554,8 @@ packages: pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -2554,6 +2570,16 @@ packages: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} + playwright-core@1.44.0: + resolution: {integrity: sha512-ZTbkNpFfYcGWohvTTl+xewITm7EOuqIqex0c7dNZ+aXsbrLj0qI8XlGKfPpipjm0Wny/4Lt4CJsWJk1stVS5qQ==} + engines: {node: '>=16'} + hasBin: true + + playwright@1.44.0: + resolution: {integrity: sha512-F9b3GUCLQ3Nffrfb6dunPOkE5Mh68tR7zN32L4jCk4FjQamgesGay7/dAAe1WaMEGV04DkdJfcJzjoCKygUaRQ==} + engines: {node: '>=16'} + hasBin: true + polyfill-library@4.8.0: resolution: {integrity: sha512-7+EjQmy3C7WJRaqCcVFXDE1DLBAIZ9es3DdvBKBxl98kn4kZCjuFKUi13uKDd618DVqZDkvqorP+pBFs7v5feQ==} engines: {node: '>=12'} @@ -2689,8 +2715,8 @@ packages: peerDependencies: postcss: ^8.2.14 - postcss-nesting@12.1.3: - resolution: {integrity: sha512-8XVmgNNYlmIg1qxSP7O5n76nm0I71noCzlSCl7oqaL2opJ5nSB7r8/726yObKrUTRt6ipjiqHB1wYrMVTM66Sg==} + postcss-nesting@12.1.4: + resolution: {integrity: sha512-CcHOq94K137E+U4Ommu7pexcpp0Tjm24zl4UcqWs1oSLAr5cLI+jLrqQ5h/bdjhMX6cMbzunyustVNnvrzF8Zg==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss: ^8.4 @@ -3084,6 +3110,7 @@ packages: sinon@17.0.2: resolution: {integrity: sha512-uihLiaB9FhzesElPDFZA7hDcNABzsVHwr3YfmM9sBllVwab3l0ltGlRV1XhpNfIacNDLGD1QRZNLs5nU5+hTuA==} + deprecated: There sirv@2.0.4: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} @@ -3366,8 +3393,8 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - update-browserslist-db@1.0.15: - resolution: {integrity: sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==} + update-browserslist-db@1.0.16: + resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -3691,7 +3718,7 @@ snapshots: '@babel/code-frame@7.24.2': dependencies: '@babel/highlight': 7.24.5 - picocolors: 1.0.0 + picocolors: 1.0.1 '@babel/compat-data@7.24.4': {} @@ -3781,7 +3808,7 @@ snapshots: '@babel/helper-validator-identifier': 7.24.5 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.0 + picocolors: 1.0.1 '@babel/parser@7.24.5': dependencies: @@ -3849,7 +3876,7 @@ snapshots: dependencies: postcss-selector-parser: 6.0.16 - '@csstools/selector-specificity@3.1.0(postcss-selector-parser@6.0.16)': + '@csstools/selector-specificity@3.1.1(postcss-selector-parser@6.0.16)': dependencies: postcss-selector-parser: 6.0.16 @@ -4189,6 +4216,10 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@playwright/test@1.44.0': + dependencies: + playwright: 1.44.0 + '@polka/url@1.0.0-next.25': {} '@popperjs/core@2.11.8': {} @@ -4422,7 +4453,7 @@ snapshots: dependencies: undici-types: 5.26.5 - '@types/node@20.12.11': + '@types/node@20.12.12': dependencies: undici-types: 5.26.5 optional: true @@ -4433,7 +4464,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 20.12.11 + '@types/node': 20.12.12 optional: true '@wesbos/code-icons@1.2.4(rollup@4.17.2)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0)': @@ -4533,10 +4564,10 @@ snapshots: autoprefixer@10.4.19(postcss@8.4.38): dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001617 + caniuse-lite: 1.0.30001618 fraction.js: 4.3.7 normalize-range: 0.1.2 - picocolors: 1.0.0 + picocolors: 1.0.1 postcss: 8.4.38 postcss-value-parser: 4.2.0 @@ -4578,10 +4609,10 @@ snapshots: browserslist@4.23.0: dependencies: - caniuse-lite: 1.0.30001617 - electron-to-chromium: 1.4.763 + caniuse-lite: 1.0.30001618 + electron-to-chromium: 1.4.768 node-releases: 2.0.14 - update-browserslist-db: 1.0.15(browserslist@4.23.0) + update-browserslist-db: 1.0.16(browserslist@4.23.0) btoa@1.2.1: {} @@ -4638,11 +4669,11 @@ snapshots: caniuse-api@3.0.0: dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001617 + caniuse-lite: 1.0.30001618 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001617: {} + caniuse-lite@1.0.30001618: {} chai-dom@1.12.0(chai@4.4.1): dependencies: @@ -5004,7 +5035,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.4.763: {} + electron-to-chromium@1.4.768: {} element-internals-polyfill@1.3.11: {} @@ -5322,6 +5353,9 @@ snapshots: fs@0.0.1-security: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -5362,13 +5396,13 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.3.14: + glob@10.3.15: dependencies: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.4 minipass: 7.1.1 - path-scurry: 1.11.0 + path-scurry: 1.11.1 glob@7.2.3: dependencies: @@ -5392,7 +5426,7 @@ snapshots: fs.realpath: 1.0.0 minimatch: 8.0.4 minipass: 4.2.8 - path-scurry: 1.11.0 + path-scurry: 1.11.1 global-agent@3.0.0: dependencies: @@ -5634,7 +5668,7 @@ snapshots: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.9 + nwsapi: 2.2.10 parse5: 7.1.2 rrweb-cssom: 0.6.0 saxes: 6.0.0 @@ -5921,7 +5955,7 @@ snapshots: dependencies: boolbase: 1.0.0 - nwsapi@2.2.9: {} + nwsapi@2.2.10: {} object-inspect@1.13.1: {} @@ -6020,7 +6054,7 @@ snapshots: path-parse@1.0.7: {} - path-scurry@1.11.0: + path-scurry@1.11.1: dependencies: lru-cache: 10.2.2 minipass: 7.1.1 @@ -6037,7 +6071,7 @@ snapshots: pend@1.2.0: {} - picocolors@1.0.0: {} + picocolors@1.0.1: {} picomatch@2.3.1: {} @@ -6045,6 +6079,14 @@ snapshots: pify@2.3.0: {} + playwright-core@1.44.0: {} + + playwright@1.44.0: + dependencies: + playwright-core: 1.44.0 + optionalDependencies: + fsevents: 2.3.2 + polyfill-library@4.8.0: dependencies: '@financial-times/polyfill-useragent-normaliser': 2.0.1 @@ -6176,10 +6218,10 @@ snapshots: postcss: 8.4.38 postcss-selector-parser: 6.0.16 - postcss-nesting@12.1.3(postcss@8.4.38): + postcss-nesting@12.1.4(postcss@8.4.38): dependencies: '@csstools/selector-resolve-nested': 1.1.0(postcss-selector-parser@6.0.16) - '@csstools/selector-specificity': 3.1.0(postcss-selector-parser@6.0.16) + '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.0.16) postcss: 8.4.38 postcss-selector-parser: 6.0.16 @@ -6309,7 +6351,7 @@ snapshots: postcss@8.4.38: dependencies: nanoid: 3.3.7 - picocolors: 1.0.0 + picocolors: 1.0.1 source-map-js: 1.2.0 pretty-bytes@6.1.1: {} @@ -6525,7 +6567,7 @@ snapshots: rtlcss@4.1.1: dependencies: escalade: 3.1.2 - picocolors: 1.0.0 + picocolors: 1.0.1 postcss: 8.4.38 strip-json-comments: 3.1.1 @@ -6783,7 +6825,7 @@ snapshots: css-tree: 2.3.1 css-what: 6.1.0 csso: 5.0.5 - picocolors: 1.0.0 + picocolors: 1.0.1 symbol-tree@3.2.4: {} @@ -6897,11 +6939,11 @@ snapshots: unpipe@1.0.0: {} - update-browserslist-db@1.0.15(browserslist@4.23.0): + update-browserslist-db@1.0.16(browserslist@4.23.0): dependencies: browserslist: 4.23.0 escalade: 3.1.2 - picocolors: 1.0.0 + picocolors: 1.0.1 uri-js@4.4.1: dependencies: @@ -7003,7 +7045,7 @@ snapshots: fast-glob: 3.3.2 mockjs: 1.1.0 path-to-regexp: 6.2.2 - picocolors: 1.0.0 + picocolors: 1.0.1 vite: 5.2.7(@types/node@18.19.33)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0) transitivePeerDependencies: - supports-color diff --git a/test/web/playwright.mjs b/test/web/playwright.mjs new file mode 100644 index 0000000000000000000000000000000000000000..20dd9b180a281b7a478a02545fdccff61395d587 --- /dev/null +++ b/test/web/playwright.mjs @@ -0,0 +1,28 @@ +import { chromium } from 'playwright'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +// Nötig, um __dirname in ES-Modulen zu verwenden +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +(async () => { + // Starten Sie den Browser + const browser = await chromium.launch({ headless: false }); // Setzen Sie headless auf false, um den Browser sichtbar zu machen + const page = await browser.newPage(); + + // Navigieren Sie zur lokalen HTML-Datei + const filePath = path.resolve(__dirname, 'test.html'); + const fileUrl = 'file://' + filePath; + await page.goto(fileUrl); + + // Überprüfen Sie den Titel der Seite + const title = await page.title(); + console.log(`Title: ${title}`); + + // Machen Sie einen Screenshot + await page.screenshot({ path: 'example.png' }); + + // Browser schließen + await browser.close(); +})(); diff --git a/test/web/puppeteer.mjs b/test/web/puppeteer.mjs new file mode 100644 index 0000000000000000000000000000000000000000..f66aa140b552c01704dda7e0c9a2f8e32f220792 --- /dev/null +++ b/test/web/puppeteer.mjs @@ -0,0 +1,39 @@ +import path from "path"; +import puppeteer from 'puppeteer'; + +(async () => { + // Launch the browser and open a new blank page + const browser = await puppeteer.launch({ + headless: 'new', + }); + const page = await browser.newPage(); + + // Navigate the page to a URL + const filePath = path.resolve(__dirname, 'test.html'); + const fileUrl = 'file://' + filePath; + + + await page.goto(fileUrl); + + // Set screen size + await page.setViewport({width: 1080, height: 1024}); + + // Type into search box + await page.type('.devsite-search-field', 'automate beyond recorder'); + + // Wait and click on first result + const searchResultSelector = '.devsite-result-item-link'; + await page.waitForSelector(searchResultSelector); + await page.click(searchResultSelector); + + // Locate the full title with a unique string + const textSelector = await page.waitForSelector( + 'text/Customize and automate' + ); + const fullTitle = await textSelector?.evaluate(el => el.textContent); + + // Print the full title + console.log('The title of this blog post is "%s".', fullTitle); + + await browser.close(); +})(); \ No newline at end of file