{"_id":"@e2e-dev/web","_rev":"7-619180a9c24e4ae5fcfbc6fd6fda9719","name":"@e2e-dev/web","dist-tags":{"canary":"0.11.0-canary-20260929180659","latest":"0.13.0"},"versions":{"0.11.0-canary-20260928184528":{"name":"@e2e-dev/web","version":"0.11.0-canary-20260928184528","keywords":["e2e","testing","agentic","end-to-end","playwright","engine"],"license":"Apache-2.0","_id":"@e2e-dev/web@0.11.0-canary-20260928184528","maintainers":[{"name":"szymonrybczak","email":"szymon.rybczak@gmail.com"},{"name":"okwasniewski","email":"oskar@okwasniewski.com"}],"contributors":["Oskar Kwaśniewski <oskar@tester.army>","Szymon Rybczak <szymon@tester.army>"],"homepage":"https://github.com/tester-army/e2e/tree/main/packages/web#readme","bugs":{"url":"https://github.com/tester-army/e2e/issues"},"dist":{"shasum":"87b8a523a449d24baee9c201e72d280af66c8a43","tarball":"https://registry.npmjs.org/@e2e-dev/web/-/web-0.11.0-canary-20260928184528.tgz","fileCount":121,"integrity":"sha512-5145tQJLiI7Bi5ZKL0qscLO3TQ+Ut9E6CdIto9l7cUEIP31qZldNRZP2NoG29Ci+VW9zxMtOT8uDhqajtGhELw==","signatures":[{"sig":"MEUCIGvNKvZ6VHsSafCle2OIkogR5jrVRLEacDyKV8ystcYiAiEAqME4QO02Cvk2HzCI/VsOWXyxGkUXqHpuGVa/p2XASrs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":589241},"type":"module","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc --project tsconfig.build.json && node ../../scripts/stamp-dist.ts","test:unit":"vitest run tests/unit","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"okwasniewski","email":"oskar@okwasniewski.com"},"repository":{"url":"git+https://github.com/tester-army/e2e.git","type":"git","directory":"packages/web"},"description":"Web engine for e2e agentic end-to-end testing, built on Playwright","directories":{},"publishConfig":{"tag":"beta","access":"public","registry":"https://registry.npmjs.org/","provenance":false},"_hasShrinkwrap":false,"devDependencies":{"e2e":"0.15.0-canary-20260928184528","pngjs":"7.0.0","vitest":"5.0.1","playwright":"1.63.0","typescript":"7.0.2","@types/node":"26.6.2","@types/pngjs":"6.0.5"},"peerDependencies":{"e2e":"0.15.0-canary-20260928184528","playwright":">=1.63.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/web_0.11.0-canary-20260928184528_1790621190811_0.4093789946906743","host":"s3://npm-registry-packages-npm-production"}},"0.11.0-canary-20260929180659":{"name":"@e2e-dev/web","version":"0.11.0-canary-20260929180659","keywords":["e2e","testing","agentic","end-to-end","playwright","engine"],"license":"Apache-2.0","_id":"@e2e-dev/web@0.11.0-canary-20260929180659","maintainers":[{"name":"szymonrybczak","email":"szymon.rybczak@gmail.com"},{"name":"okwasniewski","email":"oskar@okwasniewski.com"}],"contributors":["Oskar Kwaśniewski <oskar@tester.army>","Szymon Rybczak <szymon@tester.army>"],"homepage":"https://github.com/tester-army/e2e/tree/main/packages/web#readme","bugs":{"url":"https://github.com/tester-army/e2e/issues"},"dist":{"shasum":"e0513a49c5ba852cbca5fa94f9986fb909ed8116","tarball":"https://registry.npmjs.org/@e2e-dev/web/-/web-0.11.0-canary-20260929180659.tgz","fileCount":125,"integrity":"sha512-xIXtF2VTLQmhHA+etIhSwMyOU8nL32b421I2G8sVwrIkk++G5L0msMvnCEr3S62J9GftLU3JKHuy8a31wZ8xWw==","signatures":[{"sig":"MEQCICx/QR2J3XH3qCKKuiUW+QN0CTwlGVvU0h4h4GovAQT1AiAFpZysvVc4A3J6HpkEZ/PBIopY8K4dbWeEgL43akqYqw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDMgpUJ53jnbIei+ZzeDNA5D9jC8VX9xSUXY2i46FVwtQIhAMGvNf7hUNGuJ5UUC5qcXbzH13Hh/jNsmBVFPhDd8wFi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":629618},"type":"module","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc --project tsconfig.build.json && node ../../scripts/stamp-dist.ts","test:unit":"vitest run tests/unit","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"okwasniewski","email":"oskar@okwasniewski.com"},"repository":{"url":"git+https://github.com/tester-army/e2e.git","type":"git","directory":"packages/web"},"description":"Web engine for e2e agentic end-to-end testing, built on Playwright","directories":{},"publishConfig":{"tag":"beta","access":"public","registry":"https://registry.npmjs.org/","provenance":false},"_hasShrinkwrap":false,"devDependencies":{"e2e":"0.15.0-canary-20260929180659","pngjs":"7.0.0","vitest":"5.0.1","playwright":"1.63.0","typescript":"7.0.2","@types/node":"26.6.2","@types/pngjs":"6.0.5"},"peerDependencies":{"e2e":"0.15.0-canary-20260929180659","playwright":">=1.63.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/web_0.11.0-canary-20260929180659_1790705987383_0.676846248367188","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@e2e-dev/web","version":"0.11.0","keywords":["e2e","testing","agentic","end-to-end","playwright","engine"],"license":"Apache-2.0","_id":"@e2e-dev/web@0.11.0","maintainers":[{"name":"szymonrybczak","email":"szymon.rybczak@gmail.com"},{"name":"okwasniewski","email":"oskar@okwasniewski.com"}],"contributors":["Oskar Kwaśniewski <oskar@tester.army>","Szymon Rybczak <szymon@tester.army>"],"homepage":"https://github.com/tester-army/e2e/tree/main/packages/web#readme","bugs":{"url":"https://github.com/tester-army/e2e/issues"},"dist":{"shasum":"ed90ecd742377f6725820811c8bc29c0923b0fc0","tarball":"https://registry.npmjs.org/@e2e-dev/web/-/web-0.11.0.tgz","fileCount":129,"integrity":"sha512-w7mIHR91tqBmhx2Rapqffz4kQ82su/+lsHmONka+mQLpkue2QLZTlK4F/l2uPiUXIRBp1m3Z7dWJY1AGm2Xs/Q==","signatures":[{"sig":"MEUCIGVslrR0m5azNbsno9d5ryfy8e4NQihJyyKO1Ip4C2haAiEAlLyUub/QxfCvSwQQXgFzfrXmFFezvjOPVrAkHguoTOY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDEHgex9D4SYRYFbztyA0WMFTiLZ8aliQknT5dUY7qePQIgeqVoU6tD5O3LgaFBkopALBzaUr0u4BFDNqrpN5AApl0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":667931},"type":"module","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc --project tsconfig.build.json && node ../../scripts/stamp-dist.ts","test:unit":"vitest run tests/unit","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"okwasniewski","email":"oskar@okwasniewski.com"},"repository":{"url":"git+https://github.com/tester-army/e2e.git","type":"git","directory":"packages/web"},"description":"Web engine for e2e agentic end-to-end testing, built on Playwright","directories":{},"publishConfig":{"tag":"latest","access":"public","registry":"https://registry.npmjs.org/","provenance":false},"_hasShrinkwrap":false,"devDependencies":{"e2e":"0.15.0","pngjs":"7.0.0","vitest":"5.0.1","playwright":"1.63.0","typescript":"7.0.2","@types/node":"26.6.2","@types/pngjs":"6.0.5"},"peerDependencies":{"e2e":">=0.15.0 <1","playwright":">=1.63.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/web_0.11.0_1790795281984_0.11630841812393378","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"@e2e-dev/web","version":"0.11.1","keywords":["e2e","end-to-end","testing","ai-testing","web-testing","browser-testing","browser-automation","playwright","chromium"],"license":"Apache-2.0","_id":"@e2e-dev/web@0.11.1","maintainers":[{"name":"szymonrybczak","email":"szymon.rybczak@gmail.com"},{"name":"okwasniewski","email":"oskar@okwasniewski.com"}],"contributors":["Oskar Kwaśniewski <oskar@tester.army>","Szymon Rybczak <szymon@tester.army>"],"homepage":"https://github.com/tester-army/e2e/tree/main/packages/web#readme","bugs":{"url":"https://github.com/tester-army/e2e/issues"},"dist":{"shasum":"3bd835dd8172935aad96a897359ae0ac475a29e3","tarball":"https://registry.npmjs.org/@e2e-dev/web/-/web-0.11.1.tgz","fileCount":129,"integrity":"sha512-ZmCTlkVei9sLRyObs4jftNewarv1tKYVE18ThOv3+96w3M5PC7vwBjYJxxPti9byzdSNF2MJYlQCXLAnguMIJQ==","signatures":[{"sig":"MEUCIC87qmazk2R9KiBaHQjcTihBDaXZvK0agCKLP3Gti5AzAiEAjMfMt6hzTFJaQ5RzdG5/HHLbDiiUWydwv0o1yAM9USY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIB7YqLjCjKPUDDPocSLK/lKgOjPRp0CCS2DNxEzDN8FwAiEAn/5rn/y0Q4Bf8cxKl6AL6vPoL6kkt3jac9QrGUoc7O8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@e2e-dev%2fweb@0.11.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":667979},"type":"module","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc --project tsconfig.build.json && node ../../scripts/stamp-dist.ts","test:unit":"vitest run tests/unit","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"0ab2679d-9a98-4ab6-87cb-613060393b58"}},"repository":{"url":"git+https://github.com/tester-army/e2e.git","type":"git","directory":"packages/web"},"description":"Web engine for e2e agentic end-to-end testing, built on Playwright","directories":{},"publishConfig":{"tag":"latest","access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"e2e":"0.15.1","pngjs":"7.0.0","vitest":"5.0.1","playwright":"1.63.0","typescript":"7.0.2","@types/node":"26.6.2","@types/pngjs":"6.0.5"},"peerDependencies":{"e2e":">=0.15.0 <1","playwright":">=1.63.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/web_0.11.1_1790848115589_0.6322859267117911","host":"s3://npm-registry-packages-npm-production"}},"0.11.2":{"name":"@e2e-dev/web","version":"0.11.2","keywords":["e2e","end-to-end","testing","ai-testing","web-testing","browser-testing","browser-automation","playwright","chromium"],"license":"Apache-2.0","_id":"@e2e-dev/web@0.11.2","maintainers":[{"name":"szymonrybczak","email":"szymon.rybczak@gmail.com"},{"name":"okwasniewski","email":"oskar@okwasniewski.com"}],"contributors":["Oskar Kwaśniewski <oskar@tester.army>","Szymon Rybczak <szymon@tester.army>"],"homepage":"https://github.com/tester-army/e2e/tree/main/packages/web#readme","bugs":{"url":"https://github.com/tester-army/e2e/issues"},"dist":{"shasum":"70c49c85caf0171e163b72649161359e04b6a0a5","tarball":"https://registry.npmjs.org/@e2e-dev/web/-/web-0.11.2.tgz","fileCount":69,"integrity":"sha512-2JzH42fklbKFxmg1Pp8EnZJC/Y+6lDNnYm2+d71CTaHjx6NGTWi6SjpPVW8zAyRsj1hLFliQcURI+pBJMXNFoA==","signatures":[{"sig":"MEYCIQCv6ruDoch7Z116kYjCGehrhkzhmcXXIq69QRqxf998EgIhAODGQdFXtiw0Xwh0OFRokr4h5UJcRYjlQ2XFDjUXE1EZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDpGfAUvAXWqypKTu4YyHmHT+mp4KFGBRPo9khNIEYR/gIgYoAgI50Ux4XM8AdIE6Q2lTFBkCA26KAuiyflh/cPOQk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@e2e-dev%2fweb@0.11.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":423160},"type":"module","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc --project tsconfig.build.json && node ../../scripts/stamp-dist.ts","test:unit":"vitest run tests/unit","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"0ab2679d-9a98-4ab6-87cb-613060393b58"}},"repository":{"url":"git+https://github.com/tester-army/e2e.git","type":"git","directory":"packages/web"},"description":"Web engine for e2e agentic end-to-end testing, built on Playwright","directories":{},"publishConfig":{"tag":"latest","access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"e2e":"0.16.0","pngjs":"7.0.0","vitest":"5.0.1","playwright":"1.63.0","typescript":"7.0.2","@types/node":"26.6.2","@types/pngjs":"6.0.5"},"peerDependencies":{"e2e":">=0.15.0 <1","playwright":">=1.63.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/web_0.11.2_1790961547045_0.216505515872484","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@e2e-dev/web","version":"0.12.0","keywords":["e2e","end-to-end","testing","ai-testing","web-testing","browser-testing","browser-automation","playwright","chromium"],"license":"Apache-2.0","_id":"@e2e-dev/web@0.12.0","maintainers":[{"name":"szymonrybczak","email":"szymon.rybczak@gmail.com"},{"name":"okwasniewski","email":"oskar@okwasniewski.com"}],"contributors":["Oskar Kwaśniewski <oskar@tester.army>","Szymon Rybczak <szymon@tester.army>"],"homepage":"https://github.com/tester-army/e2e/tree/main/packages/web#readme","bugs":{"url":"https://github.com/tester-army/e2e/issues"},"bin":{"e2e-web":"./dist/bin.js"},"dist":{"shasum":"a5f6ba27f6c4541b9a86a3e3a84f3ef12a04c58d","tarball":"https://registry.npmjs.org/@e2e-dev/web/-/web-0.12.0.tgz","fileCount":79,"integrity":"sha512-Ee5QaVZHSvjhVx5p2/kcYCxFerNr8BA8zLbja7OsvzF5Jp4Ku2mEri2KoMRol7i+DpCmfSUPSxI4KrzIPpJqdg==","signatures":[{"sig":"MEYCIQDOEm4jYCZscBbWDRae0ZKkx0LinxN3XTD089G84FjjeQIhAP0KaTKohQjRGQ1pj2IVJ/MihbkedR1Y4pjGkZGnzgIT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFjCvMUx3qVrFbUuW5B/3czje640rsFlvUyibUOIfxb1AiAq46d7xtdFaxALqyfhyuGxKnTtMZ+vMDdz7qnPvLqPYw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@e2e-dev%2fweb@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":470912},"type":"module","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc --project tsconfig.build.json && node ../../scripts/stamp-dist.ts","test:unit":"vitest run tests/unit","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"0ab2679d-9a98-4ab6-87cb-613060393b58"}},"repository":{"url":"git+https://github.com/tester-army/e2e.git","type":"git","directory":"packages/web"},"description":"Web engine for e2e agentic end-to-end testing, built on Playwright","directories":{},"dependencies":{"playwright-core":"1.63.0"},"publishConfig":{"tag":"latest","access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"e2e":"0.17.0","pngjs":"7.0.0","vitest":"5.0.1","typescript":"7.0.2","@types/node":"26.6.2","@types/pngjs":"6.0.5"},"peerDependencies":{"e2e":">=0.15.0 <1"},"_npmOperationalInternal":{"tmp":"tmp/web_0.12.0_1791098117796_0.13890037745530726","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"_id":"@e2e-dev/web@0.13.0","bin":{"e2e-web":"./dist/bin.js"},"bugs":{"url":"https://github.com/tester-army/e2e/issues"},"dist":{"shasum":"9eb149f16831053e45ac0107aada81488d0862cb","tarball":"https://registry.npmjs.org/@e2e-dev/web/-/web-0.13.0.tgz","fileCount":79,"integrity":"sha512-tG7IIi8Ip8km7uEoHkXlQLplQZJ+6qJptrwHsdiPrBttTEsj4ME0x3PQ5KC2m/KfZBlENTKqy6xLz70tMk4Vig==","signatures":[{"sig":"MEUCIQCD/ixTYZtn2GbZN8ZXXsqCZG4yY3KEOdB7CYuN0uavsQIgEJ1Ae5tlhzuQyjrreeKEG70RDr2niL383RkAaSEoBN0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAZMRy7vAOGMbaIFbdT3me/5ZyxMbhzd8NGpKo8JN4k0AiEA1MiVzgBo9e5BnnST1vY/gZzXguhNBquuu8KW9+acbHw="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@e2e-dev%2fweb@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":482885},"name":"@e2e-dev/web","type":"module","engines":{"node":"^22.22.3 || >=24.8.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"license":"Apache-2.0","scripts":{"test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc --project tsconfig.build.json && node ../../scripts/stamp-dist.ts","test:unit":"vitest run tests/unit","typecheck":"tsc --noEmit","test:watch":"vitest"},"version":"0.13.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"0ab2679d-9a98-4ab6-87cb-613060393b58"}},"homepage":"https://github.com/tester-army/e2e/tree/main/packages/web#readme","keywords":["e2e","end-to-end","testing","ai-testing","web-testing","browser-testing","browser-automation","playwright","chromium"],"repository":{"url":"git+https://github.com/tester-army/e2e.git","type":"git","directory":"packages/web"},"description":"Web engine for e2e agentic end-to-end testing, built on Playwright","directories":{},"maintainers":[{"name":"szymonrybczak","email":"szymon.rybczak@gmail.com"},{"name":"okwasniewski","email":"oskar@okwasniewski.com"}],"contributors":["Oskar Kwaśniewski <oskar@tester.army>","Szymon Rybczak <szymon@tester.army>"],"dependencies":{"playwright-core":"1.63.0"},"publishConfig":{"tag":"latest","access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"e2e":"0.18.0","pngjs":"7.0.0","vitest":"5.0.1","typescript":"7.0.2","@types/node":"26.6.2","@types/pngjs":"6.0.5"},"peerDependencies":{"e2e":">=0.18.0 <1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/web_0.13.0_1791291082154_0.7920831530622332"}}},"time":{"created":"2026-09-28T18:46:30.217Z","modified":"2026-10-06T12:51:22.683Z","0.11.0-canary-20260928184528":"2026-09-28T18:46:30.981Z","0.11.0-canary-20260929180659":"2026-09-29T18:19:47.502Z","0.11.0":"2026-09-30T19:08:02.087Z","0.11.1":"2026-10-01T09:48:35.707Z","0.11.2":"2026-10-02T17:19:07.173Z","0.12.0":"2026-10-04T07:15:17.898Z","0.13.0":"2026-10-06T12:51:22.287Z"},"bugs":{"url":"https://github.com/tester-army/e2e/issues"},"license":"Apache-2.0","homepage":"https://github.com/tester-army/e2e/tree/main/packages/web#readme","keywords":["e2e","end-to-end","testing","ai-testing","web-testing","browser-testing","browser-automation","playwright","chromium"],"repository":{"url":"git+https://github.com/tester-army/e2e.git","type":"git","directory":"packages/web"},"description":"Web engine for e2e agentic end-to-end testing, built on Playwright","contributors":["Oskar Kwaśniewski <oskar@tester.army>","Szymon Rybczak <szymon@tester.army>"],"maintainers":[{"name":"szymonrybczak","email":"szymon.rybczak@gmail.com"},{"name":"okwasniewski","email":"oskar@okwasniewski.com"}],"readme":"# @e2e-dev/web\n\nThe browser engine for [`e2e`](https://www.npmjs.com/package/e2e), built on\n[Playwright](https://playwright.dev).\n\n`e2e` ships no engine of its own: every target names the engine that drives\nit, and this package is the one for browsers. It implements the public\n`e2e/engine` contract, so a device or desktop engine plugs into the same\nseam with no privilege either way.\n\n## Install\n\n```bash\nnpm install --save-dev e2e @e2e-dev/web\n```\n\nThis package depends on `playwright-core` pinned to an exact version, so the\nengine always runs the Playwright it was tested against. An app that depends\non Playwright itself keeps its own copy; the two share a browser cache only\nwhen their versions match.\n\n```ts title=\"e2e.config.ts\"\nimport type { E2EConfig } from 'e2e';\nimport { web } from '@e2e-dev/web';\n\nexport default {\n  targets: [{ name: 'web', engine: web(), app: { url: 'http://localhost:3000' } }],\n} satisfies E2EConfig;\n```\n\nThe target declares the app; the engine only drives it. The target's `app`\ntakes `url` (the base URL `app.open()` opens; required on a `web()` target),\n`command` (a process the runner starts before the run and stops after it,\nwith `readyUrl` to poll, default `url`), `environment` (`test`, `staging`,\n`production`; inferred from the host), and `identity` (a stable cache and\nsession key when the origin is ephemeral). `web({ url })` and the other old\napp options are `INVALID_CONFIG`. A target with `app.url` is a `browser`\ntarget, so a test can `requires: ['browser']`. Browser options:\n`browser` (`chromium`, `firefox`, `webkit`; default `chromium`; or a\n`BrowserProvider` that leases hosted browsers, see below), `viewport`\n(`{ width, height }`; default 1280x720), `testIdAttribute` (the attribute\n`getByTestId` and a node's `testId` read; default `data-testid`), `userAgent`\n(the `User-Agent` every attempt sends and `navigator.userAgent` reports),\n`locale` and `timezoneId` (the language and time zone every attempt runs in,\nsuch as `de-DE` and `Europe/Berlin`), `initScripts` (scripts every document\nruns before the page's own), and\n`connect` — attach to a remote browser over CDP instead of launching a local\none.\n\n### Attaching to a remote browser (`connect`)\n\nSet `connect.cdpEndpoint` to attach over the Chrome DevTools Protocol rather\nthan launch. The resolver is async and called at worker init, and again at the\nstart of any attempt that finds the session dropped, so a hosted browser whose\nendpoint is provisioned per run — a cloud session URL that is not known at\nconfig load — resolves each time it is needed. The resolver receives an\n`AbortSignal` that fires when the init or attempt is cancelled or exceeds its\nbudget; a browser that connects after that is detached, never used. CDP attach\nis chromium-only, and disposing the engine detaches the session without\nkilling the remote process the host owns.\n\n```ts\nengine: web({\n  connect: { cdpEndpoint: async () => acquireCloudBrowserSession() },\n});\n```\n\nFor transport recovery, add `connect.reconnectEndpoint(signal)`. This opts\ninto the remote browser's persistent default context. `cdpEndpoint` then\nprovisions a fresh, dedicated browser for every attempt, including retries;\n`reconnectEndpoint` must return that same browser after a disconnect. The\nengine verifies the default context ID and active page target ID, clears stale\nreferences, and never repeats a dispatched operation. A missing target fails\nthe attempt. The host owns deleting the remote browser after cleanup.\n\nThis mode does not support `headers`, `basicAuth`, `userAgent`, `locale`, `timezoneId`, context reset, or session\nstate capture and restore. Recording resumes after reconnect, but a segment\nlost during the disconnect remains unavailable. See the\n[Playwright reference](../../docs/reference/web.mdx#recovering-a-cdp-transport)\nfor the lifecycle and ownership contract.\n\n### Leasing hosted browsers (`browser`)\n\n`connect` has no lifecycle: nothing tells the host when to delete the browser\nit provisioned. Pass a `BrowserProvider` as `browser` instead and the engine\nasks for a browser when one is needed and gives it back when its scope ends,\non every exit path. `scope: 'worker'` (the default) leases one browser per\nworker slot in `prepare` and releases them in `finish`; a worker whose browser\ndrops leases a replacement itself. `scope: 'attempt'` leases a fresh browser in\nevery `startAttempt` and releases it in `endAttempt`, reattaching through the\nlease's `reconnectEndpoint` after a transport drop, with the limits of\n`connect.reconnectEndpoint`. A provider implies chromium and excludes\n`connect`; no vendor ships in the package. See\n[Hosted browsers](../../docs/browser.mdx#hosted-browsers) for the contract\nand an example against a generic session API.\n\n```ts\nengine: web({\n  browser: {\n    name: 'hosted-browsers',\n    acquire: async (request) => ({ id: session.id, cdpEndpoint: session.cdpUrl }),\n    release: async (lease) => stopSession(lease.id),\n  },\n});\n```\n\n## The `browser` fixture\n\nThe engine contributes `browser`: navigation, routes, cookies, dialogs, frames,\ndownloads, keyboard and mouse, plus `expect(browser).toHaveURL()` and\n`toHaveTitle()` and `toHaveClass()`. Import `test` from this package to have it\ntyped; it is the same runtime `test` as `e2e`'s.\n\n```ts\nimport { test } from '@e2e-dev/web';\nimport { expect } from 'e2e';\n\ntest('signs in', async ({ app, screen, browser }) => {\n  await app.open('/login');\n  await screen.getByLabel('Email').fill('user@example.test');\n  await expect(browser).toHaveURL('/dashboard');\n});\n```\n\n## Browsers\n\nA missing browser is downloaded once per run, in the runner process, after the\ntests are collected and before the app starts: the progress prints in the run\nlog, the run's clock starts only once the download is done, and no launch or\ntest timeout ever includes it. Workers launch the browser the runner installed.\n\nIn CI, install browsers as their own step instead, so the cost is visible and\ncacheable:\n\n```bash\nnpx @e2e-dev/web install chromium --with-deps\n```\n\nIt downloads the browsers for the Playwright version this package pins, the\nones the engine launches. Under pnpm, run the bin by name:\n`pnpm exec e2e-web install chromium --with-deps`.\n\n`--with-deps` also installs the system libraries a slim container image lacks.\n\n## Documentation\n\nFull documentation lives at [e2e.tester.army/docs](https://e2e.tester.army/docs).\n","readmeFilename":""}