testplane 9.0.0-rc.4 → 9.0.0
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/build/package.json +11 -11
- package/build/src/base-testplane.d.ts +6 -2
- package/build/src/base-testplane.js +18 -5
- package/build/src/base-testplane.js.map +1 -1
- package/build/src/browser/browser.d.ts +2 -0
- package/build/src/browser/browser.js +8 -4
- package/build/src/browser/browser.js.map +1 -1
- package/build/src/browser/calibrator.js +19 -17
- package/build/src/browser/calibrator.js.map +1 -1
- package/build/src/browser/camera/index.d.ts +6 -2
- package/build/src/browser/camera/index.js +18 -14
- package/build/src/browser/camera/index.js.map +1 -1
- package/build/src/browser/camera/utils.d.ts +11 -1
- package/build/src/browser/camera/utils.js +27 -1
- package/build/src/browser/camera/utils.js.map +1 -1
- package/build/src/browser/cdp/connection.d.ts +2 -39
- package/build/src/browser/cdp/connection.js +73 -353
- package/build/src/browser/cdp/connection.js.map +1 -1
- package/build/src/browser/cdp/constants.d.ts +0 -10
- package/build/src/browser/cdp/constants.js +1 -11
- package/build/src/browser/cdp/constants.js.map +1 -1
- package/build/src/browser/cdp/domains/css.d.ts +14 -6
- package/build/src/browser/cdp/domains/css.js +4 -0
- package/build/src/browser/cdp/domains/css.js.map +1 -1
- package/build/src/browser/cdp/domains/debugger.d.ts +1 -1
- package/build/src/browser/cdp/domains/fetch.d.ts +163 -0
- package/build/src/browser/cdp/domains/fetch.js +51 -0
- package/build/src/browser/cdp/domains/fetch.js.map +1 -0
- package/build/src/browser/cdp/domains/network.d.ts +290 -0
- package/build/src/browser/cdp/domains/network.js +75 -0
- package/build/src/browser/cdp/domains/network.js.map +1 -0
- package/build/src/browser/cdp/domains/page.d.ts +378 -0
- package/build/src/browser/cdp/domains/page.js +114 -0
- package/build/src/browser/cdp/domains/page.js.map +1 -0
- package/build/src/browser/cdp/emitter.d.ts +2 -1
- package/build/src/browser/cdp/emitter.js +2 -2
- package/build/src/browser/cdp/emitter.js.map +1 -1
- package/build/src/browser/cdp/error.d.ts +14 -20
- package/build/src/browser/cdp/error.js +29 -32
- package/build/src/browser/cdp/error.js.map +1 -1
- package/build/src/browser/cdp/index.d.ts +6 -0
- package/build/src/browser/cdp/index.js +21 -6
- package/build/src/browser/cdp/index.js.map +1 -1
- package/build/src/browser/cdp/selectivity/constants.d.ts +2 -0
- package/build/src/browser/cdp/selectivity/constants.js +3 -1
- package/build/src/browser/cdp/selectivity/constants.js.map +1 -1
- package/build/src/browser/cdp/selectivity/css-selectivity.d.ts +13 -3
- package/build/src/browser/cdp/selectivity/css-selectivity.js +211 -62
- package/build/src/browser/cdp/selectivity/css-selectivity.js.map +1 -1
- package/build/src/browser/cdp/selectivity/fs-cache.d.ts +12 -0
- package/build/src/browser/cdp/selectivity/fs-cache.js +122 -0
- package/build/src/browser/cdp/selectivity/fs-cache.js.map +1 -0
- package/build/src/browser/cdp/selectivity/hash-provider.d.ts +1 -0
- package/build/src/browser/cdp/selectivity/hash-provider.js +5 -3
- package/build/src/browser/cdp/selectivity/hash-provider.js.map +1 -1
- package/build/src/browser/cdp/selectivity/hash-reader.d.ts +2 -3
- package/build/src/browser/cdp/selectivity/hash-reader.js +39 -26
- package/build/src/browser/cdp/selectivity/hash-reader.js.map +1 -1
- package/build/src/browser/cdp/selectivity/hash-writer.d.ts +2 -2
- package/build/src/browser/cdp/selectivity/hash-writer.js +16 -62
- package/build/src/browser/cdp/selectivity/hash-writer.js.map +1 -1
- package/build/src/browser/cdp/selectivity/index.d.ts +6 -2
- package/build/src/browser/cdp/selectivity/index.js +147 -24
- package/build/src/browser/cdp/selectivity/index.js.map +1 -1
- package/build/src/browser/cdp/selectivity/js-selectivity.d.ts +11 -4
- package/build/src/browser/cdp/selectivity/js-selectivity.js +200 -87
- package/build/src/browser/cdp/selectivity/js-selectivity.js.map +1 -1
- package/build/src/browser/cdp/selectivity/json-utils.d.ts +5 -0
- package/build/src/browser/cdp/selectivity/json-utils.js +19 -9
- package/build/src/browser/cdp/selectivity/json-utils.js.map +1 -1
- package/build/src/browser/cdp/selectivity/merge-dumps/index.d.ts +2 -0
- package/build/src/browser/cdp/selectivity/merge-dumps/index.js +28 -0
- package/build/src/browser/cdp/selectivity/merge-dumps/index.js.map +1 -0
- package/build/src/browser/cdp/selectivity/merge-dumps/merge-hashes.d.ts +2 -0
- package/build/src/browser/cdp/selectivity/merge-dumps/merge-hashes.js +39 -0
- package/build/src/browser/cdp/selectivity/merge-dumps/merge-hashes.js.map +1 -0
- package/build/src/browser/cdp/selectivity/merge-dumps/merge-tests.d.ts +2 -0
- package/build/src/browser/cdp/selectivity/merge-dumps/merge-tests.js +129 -0
- package/build/src/browser/cdp/selectivity/merge-dumps/merge-tests.js.map +1 -0
- package/build/src/browser/cdp/selectivity/modes.d.ts +4 -0
- package/build/src/browser/cdp/selectivity/modes.js +11 -0
- package/build/src/browser/cdp/selectivity/modes.js.map +1 -0
- package/build/src/browser/cdp/selectivity/runner.d.ts +5 -0
- package/build/src/browser/cdp/selectivity/runner.js +114 -22
- package/build/src/browser/cdp/selectivity/runner.js.map +1 -1
- package/build/src/browser/cdp/selectivity/test-dependencies-reader.js +1 -1
- package/build/src/browser/cdp/selectivity/test-dependencies-reader.js.map +1 -1
- package/build/src/browser/cdp/selectivity/test-dependencies-writer.js +1 -1
- package/build/src/browser/cdp/selectivity/test-dependencies-writer.js.map +1 -1
- package/build/src/browser/cdp/selectivity/testplane-selectivity.d.ts +3 -1
- package/build/src/browser/cdp/selectivity/testplane-selectivity.js +64 -13
- package/build/src/browser/cdp/selectivity/testplane-selectivity.js.map +1 -1
- package/build/src/browser/cdp/selectivity/types.d.ts +6 -0
- package/build/src/browser/cdp/selectivity/types.js.map +1 -1
- package/build/src/browser/cdp/selectivity/used-dumps-tracker.d.ts +7 -0
- package/build/src/browser/cdp/selectivity/used-dumps-tracker.js +25 -0
- package/build/src/browser/cdp/selectivity/used-dumps-tracker.js.map +1 -0
- package/build/src/browser/cdp/selectivity/utils.d.ts +18 -9
- package/build/src/browser/cdp/selectivity/utils.js +111 -34
- package/build/src/browser/cdp/selectivity/utils.js.map +1 -1
- package/build/src/browser/cdp/types.d.ts +214 -0
- package/build/src/browser/cdp/utils.d.ts +0 -6
- package/build/src/browser/cdp/utils.js +1 -6
- package/build/src/browser/cdp/utils.js.map +1 -1
- package/build/src/browser/client-scripts/calibrate.js +2 -2
- package/build/src/browser/client-scripts/rrweb-record.min.js +2 -2
- package/build/src/browser/client-scripts/screen-shooter/build/bundle.compat.js +10 -10
- package/build/src/browser/client-scripts/screen-shooter/build/bundle.native.js +10 -10
- package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/implementation.js +21 -8
- package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/operations.js +57 -29
- package/build/src/browser/commands/assert-view/errors/image-diff-error.d.ts +1 -0
- package/build/src/browser/commands/assert-view/index.js +23 -3
- package/build/src/browser/commands/assert-view/index.js.map +1 -1
- package/build/src/browser/commands/openAndWait.js +23 -26
- package/build/src/browser/commands/openAndWait.js.map +1 -1
- package/build/src/browser/commands/restoreState/index.js +19 -8
- package/build/src/browser/commands/restoreState/index.js.map +1 -1
- package/build/src/browser/commands/saveState/index.d.ts +1 -2
- package/build/src/browser/commands/saveState/index.js +8 -12
- package/build/src/browser/commands/saveState/index.js.map +1 -1
- package/build/src/browser/commands/switchToRepl.js +27 -9
- package/build/src/browser/commands/switchToRepl.js.map +1 -1
- package/build/src/browser/existing-browser.d.ts +2 -0
- package/build/src/browser/existing-browser.js +15 -0
- package/build/src/browser/existing-browser.js.map +1 -1
- package/build/src/browser/history/index.d.ts +8 -1
- package/build/src/browser/history/index.js +41 -17
- package/build/src/browser/history/index.js.map +1 -1
- package/build/src/browser/history/rrweb.d.ts +3 -1
- package/build/src/browser/history/rrweb.js +122 -27
- package/build/src/browser/history/rrweb.js.map +1 -1
- package/build/src/browser/isomorphic/tsconfig.tsbuildinfo +1 -1
- package/build/src/browser/new-browser.d.ts +1 -1
- package/build/src/browser/new-browser.js +6 -12
- package/build/src/browser/new-browser.js.map +1 -1
- package/build/src/browser/screen-shooter/composite-image/index.d.ts +23 -0
- package/build/src/browser/screen-shooter/composite-image/index.js +161 -14
- package/build/src/browser/screen-shooter/composite-image/index.js.map +1 -1
- package/build/src/browser/screen-shooter/debug.d.ts +3 -0
- package/build/src/browser/screen-shooter/debug.js +25 -0
- package/build/src/browser/screen-shooter/debug.js.map +1 -0
- package/build/src/browser/screen-shooter/elements-screen-shooter.d.ts +0 -1
- package/build/src/browser/screen-shooter/elements-screen-shooter.js +127 -75
- package/build/src/browser/screen-shooter/elements-screen-shooter.js.map +1 -1
- package/build/src/browser/screen-shooter/full-page-screen-shooter.d.ts +3 -2
- package/build/src/browser/screen-shooter/full-page-screen-shooter.js +19 -15
- package/build/src/browser/screen-shooter/full-page-screen-shooter.js.map +1 -1
- package/build/src/browser/screen-shooter/operations/index.d.ts +1 -0
- package/build/src/browser/screen-shooter/operations/index.js +3 -1
- package/build/src/browser/screen-shooter/operations/index.js.map +1 -1
- package/build/src/browser/screen-shooter/operations/pointer-events.js +7 -0
- package/build/src/browser/screen-shooter/operations/pointer-events.js.map +1 -1
- package/build/src/browser/screen-shooter/operations/wait-for-selectors-to-settle.d.ts +2 -0
- package/build/src/browser/screen-shooter/operations/wait-for-selectors-to-settle.js +133 -0
- package/build/src/browser/screen-shooter/operations/wait-for-selectors-to-settle.js.map +1 -0
- package/build/src/browser/screen-shooter/viewport-screen-shooter.d.ts +2 -1
- package/build/src/browser/screen-shooter/viewport-screen-shooter.js +3 -5
- package/build/src/browser/screen-shooter/viewport-screen-shooter.js.map +1 -1
- package/build/src/browser/types.d.ts +6 -4
- package/build/src/browser/wsdriver/compression.d.ts +5 -0
- package/build/src/browser/wsdriver/compression.js +79 -0
- package/build/src/browser/wsdriver/compression.js.map +1 -0
- package/build/src/browser/wsdriver/constants.d.ts +11 -0
- package/build/src/browser/wsdriver/constants.js +15 -0
- package/build/src/browser/wsdriver/constants.js.map +1 -0
- package/build/src/browser/wsdriver/debug.d.ts +2 -0
- package/build/src/browser/wsdriver/debug.js +9 -0
- package/build/src/browser/wsdriver/debug.js.map +1 -0
- package/build/src/browser/wsdriver/error.d.ts +18 -0
- package/build/src/browser/wsdriver/error.js +36 -0
- package/build/src/browser/wsdriver/error.js.map +1 -0
- package/build/src/browser/wsdriver/index.d.ts +23 -0
- package/build/src/browser/wsdriver/index.js +261 -0
- package/build/src/browser/wsdriver/index.js.map +1 -0
- package/build/src/browser/wsdriver/request.d.ts +10 -0
- package/build/src/browser/wsdriver/request.js +58 -0
- package/build/src/browser/wsdriver/request.js.map +1 -0
- package/build/src/browser/wsdriver/response.d.ts +3 -0
- package/build/src/browser/wsdriver/response.js +111 -0
- package/build/src/browser/wsdriver/response.js.map +1 -0
- package/build/src/browser/wsdriver/types.d.ts +71 -0
- package/build/src/browser/wsdriver/types.js +27 -0
- package/build/src/browser/wsdriver/types.js.map +1 -0
- package/build/src/browser-pool/basic-pool.js +3 -1
- package/build/src/browser-pool/basic-pool.js.map +1 -1
- package/build/src/cli/commands/selectivity-merge-dumps/index.d.ts +2 -0
- package/build/src/cli/commands/selectivity-merge-dumps/index.js +50 -0
- package/build/src/cli/commands/selectivity-merge-dumps/index.js.map +1 -0
- package/build/src/cli/constants.d.ts +1 -0
- package/build/src/cli/constants.js +1 -0
- package/build/src/cli/constants.js.map +1 -1
- package/build/src/cli/index.js +3 -5
- package/build/src/cli/index.js.map +1 -1
- package/build/src/config/browser-options.js +11 -3
- package/build/src/config/browser-options.js.map +1 -1
- package/build/src/config/defaults.d.ts +7 -2
- package/build/src/config/defaults.js +10 -5
- package/build/src/config/defaults.js.map +1 -1
- package/build/src/config/index.d.ts +10 -6
- package/build/src/config/index.js +67 -42
- package/build/src/config/index.js.map +1 -1
- package/build/src/config/types.d.ts +59 -14
- package/build/src/config/types.js +15 -5
- package/build/src/config/types.js.map +1 -1
- package/build/src/config/utils.d.ts +2 -2
- package/build/src/config/utils.js +11 -6
- package/build/src/config/utils.js.map +1 -1
- package/build/src/constants/config.d.ts +0 -1
- package/build/src/constants/config.js +1 -2
- package/build/src/constants/config.js.map +1 -1
- package/build/src/constants/png.d.ts +1 -0
- package/build/src/constants/repl.d.ts +2 -0
- package/build/src/constants/repl.js +6 -0
- package/build/src/constants/repl.js.map +1 -0
- package/build/src/dev-server/index.d.ts +1 -1
- package/build/src/dev-server/index.js +1 -1
- package/build/src/dev-server/index.js.map +1 -1
- package/build/src/globals.d.ts +7 -0
- package/build/src/globals.js +10 -0
- package/build/src/globals.js.map +1 -0
- package/build/src/image.d.ts +6 -1
- package/build/src/image.js +56 -2
- package/build/src/image.js.map +1 -1
- package/build/src/index.d.ts +3 -13
- package/build/src/index.js +5 -1
- package/build/src/index.js.map +1 -1
- package/build/src/runner/browser-env/vite/browser-modules/driver.js +6 -8
- package/build/src/runner/browser-env/vite/browser-modules/driver.js.map +1 -1
- package/build/src/runner/browser-env/vite/browser-modules/tsconfig.tsbuildinfo +1 -1
- package/build/src/runner/browser-env/vite/browser-modules/types.d.ts +1 -1
- package/build/src/runner/index.js +1 -0
- package/build/src/runner/index.js.map +1 -1
- package/build/src/runner/suite-monitor.d.ts +1 -1
- package/build/src/runner/test-runner/regular-test-runner.js +2 -2
- package/build/src/runner/test-runner/regular-test-runner.js.map +1 -1
- package/build/src/signal-handler.d.ts +2 -2
- package/build/src/signal-handler.js +24 -11
- package/build/src/signal-handler.js.map +1 -1
- package/build/src/test-reader/mocha-reader/mocha-event-bus.d.ts +1 -1
- package/build/src/test-reader/test-parser.js +3 -3
- package/build/src/test-reader/test-parser.js.map +1 -1
- package/build/src/testplane.d.ts +4 -5
- package/build/src/testplane.js +20 -10
- package/build/src/testplane.js.map +1 -1
- package/build/src/types/globals.d.ts +16 -0
- package/build/src/types/globals.js +3 -0
- package/build/src/types/globals.js.map +1 -0
- package/build/src/types/index.d.ts +2 -3
- package/build/src/utils/crypto.d.ts +1 -0
- package/build/src/utils/crypto.js +2 -1
- package/build/src/utils/crypto.js.map +1 -1
- package/build/src/utils/eight-bit-rgba-to-png.d.ts +1 -0
- package/build/src/utils/repl-instrumentation/index.d.ts +1 -0
- package/build/src/utils/repl-instrumentation/index.js +46 -0
- package/build/src/utils/repl-instrumentation/index.js.map +1 -0
- package/build/src/utils/repl-instrumentation/typescript.d.ts +7 -0
- package/build/src/utils/repl-instrumentation/typescript.js +307 -0
- package/build/src/utils/repl-instrumentation/typescript.js.map +1 -0
- package/build/src/utils/repl-module-hooks.d.ts +1 -0
- package/build/src/utils/repl-module-hooks.js +111 -0
- package/build/src/utils/repl-module-hooks.js.map +1 -0
- package/build/src/utils/workers-registry.d.ts +2 -2
- package/build/src/utils/workers-registry.js +1 -0
- package/build/src/utils/workers-registry.js.map +1 -1
- package/build/src/vendors/expect-webdriverio/matchers-overrides.d.ts +49 -0
- package/build/src/vendors/expect-webdriverio/matchers-overrides.js +3 -0
- package/build/src/vendors/expect-webdriverio/matchers-overrides.js.map +1 -0
- package/build/src/worker/runner/browser-pool.js +4 -1
- package/build/src/worker/runner/browser-pool.js.map +1 -1
- package/build/src/worker/runner/index.js +6 -3
- package/build/src/worker/runner/index.js.map +1 -1
- package/build/src/worker/runner/sequence-test-parser.js +5 -7
- package/build/src/worker/runner/sequence-test-parser.js.map +1 -1
- package/build/src/worker/runner/test-runner/capture-fail-screenshot.js +2 -3
- package/build/src/worker/runner/test-runner/capture-fail-screenshot.js.map +1 -1
- package/build/src/worker/runner/test-runner/execution-thread.d.ts +0 -1
- package/build/src/worker/runner/test-runner/execution-thread.js +0 -5
- package/build/src/worker/runner/test-runner/execution-thread.js.map +1 -1
- package/build/src/worker/runner/test-runner/index.d.ts +1 -0
- package/build/src/worker/runner/test-runner/index.js +47 -2
- package/build/src/worker/runner/test-runner/index.js.map +1 -1
- package/build/src/worker/testplane-facade.js +5 -3
- package/build/src/worker/testplane-facade.js.map +1 -1
- package/build/src/worker/testplane.d.ts +1 -0
- package/build/src/worker/testplane.js +4 -1
- package/build/src/worker/testplane.js.map +1 -1
- package/build/src/ws-connection/constants.d.ts +13 -0
- package/build/src/ws-connection/constants.js +17 -0
- package/build/src/ws-connection/constants.js.map +1 -0
- package/build/src/ws-connection/error.d.ts +52 -0
- package/build/src/ws-connection/error.js +84 -0
- package/build/src/ws-connection/error.js.map +1 -0
- package/build/src/ws-connection/index.d.ts +83 -0
- package/build/src/ws-connection/index.js +397 -0
- package/build/src/ws-connection/index.js.map +1 -0
- package/build/src/ws-connection/utils.d.ts +6 -0
- package/build/src/ws-connection/utils.js +9 -0
- package/build/src/ws-connection/utils.js.map +1 -0
- package/package.json +11 -11
package/build/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "testplane",
|
|
3
|
-
"version": "9.0.0
|
|
3
|
+
"version": "9.0.0",
|
|
4
4
|
"description": "Tests framework based on mocha and wdio",
|
|
5
5
|
"main": "build/src/index.js",
|
|
6
6
|
"files": [
|
|
@@ -30,12 +30,13 @@
|
|
|
30
30
|
"lint": "eslint --cache . && prettier --check .",
|
|
31
31
|
"reformat": "eslint --fix . && prettier --write .",
|
|
32
32
|
"prettier-watch": "onchange '**' --exclude-path .prettierignore -- prettier --write {{changed}}",
|
|
33
|
-
"test-unit": "_mocha \"test/!(integration|e2e|browser-env)/**/*.[jt]s\"",
|
|
34
|
-
"test-unit:coverage": "c8 --all --src=src --reporter=html --reporter=text-summary --exclude=\"build/**\" --exclude=\"test/**\" --exclude=\"**/*.d.ts\" _mocha \"test/!(integration|browser-env|e2e)/**/*.[jt]s\"",
|
|
33
|
+
"test-unit": "node scripts/run-node-without-type-stripping.js ./node_modules/mocha/bin/_mocha \"test/!(integration|e2e|browser-env|fixtures)/**/*.[jt]s\"",
|
|
34
|
+
"test-unit:coverage": "c8 --all --src=src --reporter=html --reporter=text-summary --exclude=\"build/**\" --exclude=\"test/**\" --exclude=\"**/*.d.ts\" node scripts/run-node-without-type-stripping.js ./node_modules/mocha/bin/_mocha \"test/!(integration|browser-env|e2e)/**/*.[jt]s\"",
|
|
35
35
|
"test-unit:generate-fixtures": "TS_NODE_PROJECT=test/tsconfig.json node -r ts-node/register -r tsconfig-paths/register test/src/browser/screen-shooter/composite-image/fixtures/generate.ts generate",
|
|
36
36
|
"test": "npm run test-unit && npm run check-types && npm run lint",
|
|
37
|
-
"test-integration": "TS_NODE_TRANSPILE_ONLY=1 mocha -r ts-node/register test/integration/*/**",
|
|
38
|
-
"test-e2e": "npm run test-e2e:generate-fixtures && npm run test-e2e:run-tests",
|
|
37
|
+
"test-integration": "TS_NODE_TRANSPILE_ONLY=1 node scripts/run-node-without-type-stripping.js ./node_modules/mocha/bin/_mocha -r ts-node/register test/integration/*/**",
|
|
38
|
+
"test-e2e": "npm run test-e2e-repl && npm run test-e2e:generate-fixtures && npm run test-e2e:run-tests",
|
|
39
|
+
"test-e2e-repl": "_mocha \"test/e2e/**/*.test.js\" --ignore \"test/e2e/**/fixture-project/**\"",
|
|
39
40
|
"test-e2e:run-tests": "node bin/testplane --config test/e2e/testplane.config.ts",
|
|
40
41
|
"test-e2e:generate-fixtures": "node bin/testplane --config test/e2e/fixtures/basic-report/testplane.config.ts || true",
|
|
41
42
|
"test-e2e:gui": "node bin/testplane --config test/e2e/testplane.config.ts gui",
|
|
@@ -57,7 +58,7 @@
|
|
|
57
58
|
},
|
|
58
59
|
"homepage": "https://testplane.io/",
|
|
59
60
|
"engines": {
|
|
60
|
-
"node": ">=
|
|
61
|
+
"node": ">= 22"
|
|
61
62
|
},
|
|
62
63
|
"keywords": [
|
|
63
64
|
"testplane",
|
|
@@ -77,10 +78,9 @@
|
|
|
77
78
|
"@jspm/core": "2.0.1",
|
|
78
79
|
"@jsquash/png": "3.1.1",
|
|
79
80
|
"@puppeteer/browsers": "2.7.1",
|
|
80
|
-
"@testplane/devtools": "8.32.5",
|
|
81
81
|
"@testplane/wdio-protocols": "9.4.7",
|
|
82
82
|
"@testplane/wdio-utils": "9.5.4",
|
|
83
|
-
"@testplane/webdriverio": "9.5.
|
|
83
|
+
"@testplane/webdriverio": "9.5.28",
|
|
84
84
|
"@vitest/spy": "2.1.4",
|
|
85
85
|
"buffer-crc32": "1.0.0",
|
|
86
86
|
"chalk": "2.4.2",
|
|
@@ -92,7 +92,6 @@
|
|
|
92
92
|
"esbuild": "0.25.8",
|
|
93
93
|
"expect-webdriverio": "3.6.0",
|
|
94
94
|
"extract-zip": "2.0.1",
|
|
95
|
-
"fastq": "1.13.0",
|
|
96
95
|
"fs-extra": "7.0.1",
|
|
97
96
|
"geckodriver": "4.5.0",
|
|
98
97
|
"gemini-configparser": "1.4.2",
|
|
@@ -103,6 +102,7 @@
|
|
|
103
102
|
"looks-same": "10.0.1",
|
|
104
103
|
"micromatch": "4.0.5",
|
|
105
104
|
"mocha": "10.2.0",
|
|
105
|
+
"p-limit": "3.1.0",
|
|
106
106
|
"pirates": "4.0.7",
|
|
107
107
|
"plugins-loader": "1.3.4",
|
|
108
108
|
"png-validator": "1.1.0",
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
"@rrweb/record": "2.0.0-alpha.18",
|
|
134
134
|
"@sinonjs/fake-timers": "10.3.0",
|
|
135
135
|
"@swc/core": "1.13.3",
|
|
136
|
-
"@testplane/wdio-types": "9.5.
|
|
136
|
+
"@testplane/wdio-types": "9.5.5",
|
|
137
137
|
"@types/babel__code-frame": "7.0.6",
|
|
138
138
|
"@types/browserify": "12.0.40",
|
|
139
139
|
"@types/chai": "4.3.4",
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
"@types/lodash": "4.14.191",
|
|
148
148
|
"@types/micromatch": "4.0.9",
|
|
149
149
|
"@types/mocha": "10.0.1",
|
|
150
|
-
"@types/node": "
|
|
150
|
+
"@types/node": "24.13.1",
|
|
151
151
|
"@types/proper-lockfile": "4.1.4",
|
|
152
152
|
"@types/proxyquire": "1.3.28",
|
|
153
153
|
"@types/set-cookie-parser": "2.4.10",
|
|
@@ -5,9 +5,13 @@ import { ConfigInput } from "./config/types";
|
|
|
5
5
|
export declare abstract class BaseTestplane extends AsyncEmitter {
|
|
6
6
|
protected _interceptors: Interceptor[];
|
|
7
7
|
protected _config: Config;
|
|
8
|
-
|
|
8
|
+
protected _initEventEmited: boolean;
|
|
9
|
+
private _pendingConfig?;
|
|
10
|
+
static create<T extends BaseTestplane>(this: new (config?: string | ConfigInput) => T, config?: string | ConfigInput): Promise<T>;
|
|
9
11
|
protected constructor(config?: string | ConfigInput);
|
|
10
|
-
protected
|
|
12
|
+
protected _setup(): Promise<void>;
|
|
13
|
+
/** @note Only the first call returns a promise to wait for INIT handlers to complete, subsequent calls return immediately to avoid deadlocks */
|
|
14
|
+
protected _emitInitEventOnce(): Promise<void>;
|
|
11
15
|
get config(): Config;
|
|
12
16
|
get events(): Events;
|
|
13
17
|
get errors(): typeof Errors;
|
|
@@ -10,22 +10,35 @@ const config_1 = require("./config");
|
|
|
10
10
|
const events_1 = require("./events");
|
|
11
11
|
const errors_1 = __importDefault(require("./errors"));
|
|
12
12
|
const typescript_1 = require("./utils/typescript");
|
|
13
|
+
const repl_module_hooks_1 = require("./utils/repl-module-hooks");
|
|
13
14
|
class BaseTestplane extends events_1.AsyncEmitter {
|
|
14
|
-
static create(config) {
|
|
15
|
-
|
|
15
|
+
static async create(config) {
|
|
16
|
+
const instance = new this(config);
|
|
17
|
+
await instance._setup();
|
|
18
|
+
return instance;
|
|
16
19
|
}
|
|
17
20
|
constructor(config) {
|
|
18
21
|
super();
|
|
19
22
|
this._interceptors = [];
|
|
23
|
+
this._initEventEmited = false;
|
|
20
24
|
this._interceptors = [];
|
|
25
|
+
this._pendingConfig = config;
|
|
26
|
+
}
|
|
27
|
+
async _setup() {
|
|
28
|
+
(0, repl_module_hooks_1.registerReplModuleHooks)();
|
|
21
29
|
(0, typescript_1.registerTransformHook)(this.isWorker());
|
|
22
|
-
this._config = config_1.Config.create(
|
|
30
|
+
this._config = await config_1.Config.create(this._pendingConfig);
|
|
31
|
+
this._pendingConfig = undefined;
|
|
23
32
|
(0, typescript_1.updateTransformHook)(this._config);
|
|
24
33
|
this._setLogLevel();
|
|
25
34
|
this._loadPlugins();
|
|
26
35
|
}
|
|
27
|
-
|
|
28
|
-
|
|
36
|
+
/** @note Only the first call returns a promise to wait for INIT handlers to complete, subsequent calls return immediately to avoid deadlocks */
|
|
37
|
+
async _emitInitEventOnce() {
|
|
38
|
+
if (this._initEventEmited) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
this._initEventEmited = true;
|
|
29
42
|
await this.emitAndWait(events_1.MasterEvents.INIT);
|
|
30
43
|
}
|
|
31
44
|
get config() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-testplane.js","sourceRoot":"","sources":["../../src/base-testplane.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAuB;AACvB,oEAA2C;AAC3C,qCAAkC;AAClC,qCAQkB;AAClB,sDAA8B;AAC9B,mDAAgF;
|
|
1
|
+
{"version":3,"file":"base-testplane.js","sourceRoot":"","sources":["../../src/base-testplane.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAuB;AACvB,oEAA2C;AAC3C,qCAAkC;AAClC,qCAQkB;AAClB,sDAA8B;AAC9B,mDAAgF;AAChF,iEAAoE;AAGpE,MAAsB,aAAc,SAAQ,qBAAY;IAMpD,MAAM,CAAC,KAAK,CAAC,MAAM,CAEf,MAA6B;QAE7B,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;QAElC,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;QAExB,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,YAAsB,MAA6B;QAC/C,KAAK,EAAE,CAAC;QAjBF,kBAAa,GAAkB,EAAE,CAAC;QAElC,qBAAgB,GAAY,KAAK,CAAC;QAiBxC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;IACjC,CAAC;IAES,KAAK,CAAC,MAAM;QAClB,IAAA,2CAAuB,GAAE,CAAC;QAC1B,IAAA,kCAAqB,EAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,MAAM,eAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACxD,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAA,gCAAmB,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAElC,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,gJAAgJ;IACtI,KAAK,CAAC,kBAAkB;QAC9B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,MAAM,IAAI,CAAC,WAAW,CAAC,qBAAY,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAI,MAAM;QACN,OAAO,gBAAC,CAAC,MAAM,CAAC,EAAE,EAAE,qBAAY,EAAE,qBAAY,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,MAAM;QACN,OAAO,gBAAM,CAAC;IAClB,CAAC;IAED,SAAS,CAAC,KAAuB,EAAE,OAAyB;QACxD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAE5C,OAAO,IAAI,CAAC;IAChB,CAAC;IAIS,YAAY;QAClB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,gBAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC/F,CAAC;IACL,CAAC;IAES,YAAY;QAClB,wBAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC;CACJ;AA1ED,sCA0EC"}
|
|
@@ -31,6 +31,7 @@ export declare class Browser {
|
|
|
31
31
|
protected _customCommands: Set<CustomCommand>;
|
|
32
32
|
protected _wdPool?: WebdriverPool;
|
|
33
33
|
protected _wdProcess: WdProcess | null;
|
|
34
|
+
protected _exitError?: Error;
|
|
34
35
|
/** This Promise is awaited after test is finished. Can be used for cleanup.
|
|
35
36
|
Right now is used to wait for time travel snapshots to finish collecting */
|
|
36
37
|
protected _snapshotsPromiseRef: history.PromiseRef;
|
|
@@ -58,4 +59,5 @@ export declare class Browser {
|
|
|
58
59
|
get snapshotsPromiseRef(): history.PromiseRef;
|
|
59
60
|
get customCommands(): CustomCommand[];
|
|
60
61
|
get emitter(): AsyncEmitter;
|
|
62
|
+
get exitError(): Error | undefined;
|
|
61
63
|
}
|
|
@@ -109,11 +109,12 @@ class Browser {
|
|
|
109
109
|
if (!lodash_1.default.isNull(this._config[optName])) {
|
|
110
110
|
req = this._config[optName](req);
|
|
111
111
|
}
|
|
112
|
-
|
|
113
|
-
|
|
112
|
+
const requestHeaders = req.headers;
|
|
113
|
+
if (!requestHeaders["X-Request-ID"]) {
|
|
114
|
+
requestHeaders["X-Request-ID"] = `${this.state.testXReqId}${browser_1.X_REQUEST_ID_DELIMITER}${crypto_1.default.randomUUID()}`;
|
|
114
115
|
}
|
|
115
|
-
if (!
|
|
116
|
-
|
|
116
|
+
if (!requestHeaders["traceparent"] && this.state.traceparent) {
|
|
117
|
+
requestHeaders["traceparent"] = this.state.traceparent;
|
|
117
118
|
}
|
|
118
119
|
return req;
|
|
119
120
|
};
|
|
@@ -166,6 +167,9 @@ class Browser {
|
|
|
166
167
|
get emitter() {
|
|
167
168
|
return this._emitter;
|
|
168
169
|
}
|
|
170
|
+
get exitError() {
|
|
171
|
+
return this._exitError;
|
|
172
|
+
}
|
|
169
173
|
}
|
|
170
174
|
exports.Browser = Browser;
|
|
171
175
|
//# sourceMappingURL=browser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/browser/browser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAA4B;AAE5B,oDAAuB;AAEvB,gDAAwD;AACxD,kDAA8D;AAC9D,mDAAqC;AACrC,6CAAkD;AAClD,iDAA4E;AAC5E,iEAAmD;AAOnD,MAAM,mBAAmB,GAAG;IACxB,WAAW;IACX,OAAO;IACP,SAAS;IACT,kBAAkB;IAClB,mBAAmB;IACnB,WAAW;IACX,qBAAqB;IACrB,MAAM;IACN,KAAK;IACL,QAAQ;CACX,CAAC;AAmBF,MAAa,OAAO;
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/browser/browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,8 +52,11 @@ class Calibrator {
|
|
|
52
52
|
const image = await browser.captureViewportImage();
|
|
53
53
|
const { innerWidth, pixelRatio } = features;
|
|
54
54
|
const hasPixelRatio = Boolean(pixelRatio && pixelRatio > 1.0);
|
|
55
|
-
const screenshotSize =
|
|
56
|
-
const
|
|
55
|
+
const screenshotSize = image.getSize();
|
|
56
|
+
const searchColor = image.hasICCPChunk
|
|
57
|
+
? await image.getRGB(Math.floor(screenshotSize.width / 2), Math.floor(screenshotSize.height / 2))
|
|
58
|
+
: { R: 148, G: 250, B: 0 };
|
|
59
|
+
const imageFeatures = await this._findMarkerAreaInImage(image, searchColor);
|
|
57
60
|
if (!imageFeatures) {
|
|
58
61
|
const screenshotPath = path_1.default.join(node_os_1.default.tmpdir(), "testplane-calibration-page.png");
|
|
59
62
|
await image.save(screenshotPath);
|
|
@@ -71,11 +74,11 @@ class Calibrator {
|
|
|
71
74
|
this._cache[browser.id] = calibratedFeatures;
|
|
72
75
|
return calibratedFeatures;
|
|
73
76
|
}
|
|
74
|
-
async _findMarkerAreaInImage(image) {
|
|
75
|
-
const imageHeight =
|
|
77
|
+
async _findMarkerAreaInImage(image, searchColor) {
|
|
78
|
+
const imageHeight = image.getSize().height;
|
|
76
79
|
let topPart = null;
|
|
77
80
|
for (let y = 0; y < imageHeight; y++) {
|
|
78
|
-
const result = await findMarkerXBandInRow(y, image);
|
|
81
|
+
const result = await findMarkerXBandInRow(y, image, searchColor);
|
|
79
82
|
if (result) {
|
|
80
83
|
topPart = {
|
|
81
84
|
top: y,
|
|
@@ -90,7 +93,7 @@ class Calibrator {
|
|
|
90
93
|
return null;
|
|
91
94
|
}
|
|
92
95
|
for (let y = (imageHeight - 1); y >= 0; y--) {
|
|
93
|
-
const result = await findMarkerXBandInRow(y, image);
|
|
96
|
+
const result = await findMarkerXBandInRow(y, image, searchColor);
|
|
94
97
|
if (result) {
|
|
95
98
|
const bottomPart = {
|
|
96
99
|
top: 0,
|
|
@@ -105,12 +108,12 @@ class Calibrator {
|
|
|
105
108
|
}
|
|
106
109
|
}
|
|
107
110
|
exports.Calibrator = Calibrator;
|
|
108
|
-
async function findMarkerXBandInRow(row, image) {
|
|
109
|
-
const markerStart = await findMarkerStartInRow(row, image);
|
|
111
|
+
async function findMarkerXBandInRow(row, image, searchColor) {
|
|
112
|
+
const markerStart = await findMarkerStartInRow(row, image, searchColor);
|
|
110
113
|
if (markerStart === null) {
|
|
111
114
|
return null;
|
|
112
115
|
}
|
|
113
|
-
const markerEnd = await findMarkerEndInRow(row, image);
|
|
116
|
+
const markerEnd = await findMarkerEndInRow(row, image, searchColor);
|
|
114
117
|
if (markerEnd === null) {
|
|
115
118
|
return null;
|
|
116
119
|
}
|
|
@@ -119,24 +122,23 @@ async function findMarkerXBandInRow(row, image) {
|
|
|
119
122
|
width: (0, isomorphic_1.getWidth)(markerStart, (markerEnd + 1)),
|
|
120
123
|
};
|
|
121
124
|
}
|
|
122
|
-
async function isMarkerColorAtPoint(image, x, y) {
|
|
123
|
-
const searchColor = { R: 148, G: 250, B: 0 };
|
|
125
|
+
async function isMarkerColorAtPoint(image, x, y, searchColor) {
|
|
124
126
|
const color = await image.getRGB(x, y);
|
|
125
127
|
return looks_same_1.default.colors(color, searchColor);
|
|
126
128
|
}
|
|
127
|
-
async function findMarkerStartInRow(row, image) {
|
|
128
|
-
const imageWidth =
|
|
129
|
+
async function findMarkerStartInRow(row, image, searchColor) {
|
|
130
|
+
const imageWidth = image.getSize().width;
|
|
129
131
|
for (let x = 0; x < imageWidth; x++) {
|
|
130
|
-
if (await isMarkerColorAtPoint(image, x, row)) {
|
|
132
|
+
if (await isMarkerColorAtPoint(image, x, row, searchColor)) {
|
|
131
133
|
return x;
|
|
132
134
|
}
|
|
133
135
|
}
|
|
134
136
|
return null;
|
|
135
137
|
}
|
|
136
|
-
async function findMarkerEndInRow(row, image) {
|
|
137
|
-
const imageWidth =
|
|
138
|
+
async function findMarkerEndInRow(row, image, searchColor) {
|
|
139
|
+
const imageWidth = image.getSize().width;
|
|
138
140
|
for (let x = (imageWidth - 1); x >= 0; x--) {
|
|
139
|
-
if (await isMarkerColorAtPoint(image, x, row)) {
|
|
141
|
+
if (await isMarkerColorAtPoint(image, x, row, searchColor)) {
|
|
140
142
|
return x;
|
|
141
143
|
}
|
|
142
144
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calibrator.js","sourceRoot":"","sources":["../../../src/browser/calibrator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,4DAAmC;AACnC,6CAAyC;AAGzC,6CAAsG;AACtG,wDAA0C;AAC1C,sDAAyB;AACzB,kDAA8B;AAE9B,MAAM,KAAK,GAAG,IAAA,eAAS,EAAC,kCAAkC,CAAC,CAAC;AAc5D,MAAa,UAAU;IAInB;QACI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;IACnG,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAwB;QACpC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC;QAED,KAAK,CAAC,wBAAwB,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAE5C,MAAM,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,UAAU,CAAkB,IAAI,CAAC,OAAO,CAAC,CAAC;QACzE,KAAK,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC;QAEnD,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC;QAC5C,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,IAAI,UAAU,GAAG,GAAG,CAAC,CAAC;QAC9D,MAAM,cAAc,GAAG,CAAC,MAAM,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"calibrator.js","sourceRoot":"","sources":["../../../src/browser/calibrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { Image } from "../../image";
|
|
2
|
+
import type { CropMargins } from "./utils";
|
|
2
3
|
import { type Point, type Rect, type Size } from "../isomorphic/geometry";
|
|
3
4
|
export type ScreenshotMode = "fullpage" | "viewport" | "auto";
|
|
5
|
+
export type { CropMargins } from "./utils";
|
|
4
6
|
export interface CaptureViewportImageOpts {
|
|
5
7
|
viewportOffset: Point<"page", "device">;
|
|
6
8
|
viewportSize: Size<"device">;
|
|
7
9
|
/** Delay before taking the screenshot, in milliseconds. */
|
|
8
10
|
screenshotDelay?: number;
|
|
11
|
+
/** Additional raw screenshot margins to crop, in physical pixels. */
|
|
12
|
+
cropMargins?: CropMargins;
|
|
9
13
|
}
|
|
10
14
|
export declare class Camera {
|
|
11
15
|
private _screenshotMode;
|
|
@@ -15,8 +19,8 @@ export declare class Camera {
|
|
|
15
19
|
private _debugTmpDir;
|
|
16
20
|
static create(screenshotMode: ScreenshotMode, takeScreenshot: () => Promise<string>): Camera;
|
|
17
21
|
constructor(screenshotMode: ScreenshotMode, takeScreenshot: () => Promise<string>);
|
|
18
|
-
calibrate(calibratedArea: Rect<"image", "device">, screenshotSize
|
|
22
|
+
calibrate(calibratedArea: Rect<"image", "device">, screenshotSize: Size<"device">): void;
|
|
19
23
|
captureViewportImage(opts?: CaptureViewportImageOpts): Promise<Image>;
|
|
20
|
-
private
|
|
24
|
+
private _cropAreaToIntersection;
|
|
21
25
|
private _cropAreaToViewport;
|
|
22
26
|
}
|
|
@@ -54,7 +54,7 @@ class Camera {
|
|
|
54
54
|
calibrate(calibratedArea, screenshotSize) {
|
|
55
55
|
debug("Setting calibrated area: %O for screenshot size: %O", calibratedArea, screenshotSize ?? null);
|
|
56
56
|
this._calibratedArea = calibratedArea;
|
|
57
|
-
this._calibrationScreenshotSize = screenshotSize
|
|
57
|
+
this._calibrationScreenshotSize = screenshotSize;
|
|
58
58
|
}
|
|
59
59
|
async captureViewportImage(opts) {
|
|
60
60
|
if (opts?.screenshotDelay) {
|
|
@@ -62,35 +62,39 @@ class Camera {
|
|
|
62
62
|
}
|
|
63
63
|
const base64 = await this._takeScreenshot();
|
|
64
64
|
const image = image_1.Image.fromBase64(base64);
|
|
65
|
-
const { width, height } =
|
|
65
|
+
const { width, height } = image.getSize();
|
|
66
66
|
const imageArea = {
|
|
67
67
|
left: 0,
|
|
68
68
|
top: 0,
|
|
69
69
|
width,
|
|
70
70
|
height,
|
|
71
71
|
};
|
|
72
|
-
const shouldApplyCalibration = this._calibrationScreenshotSize
|
|
73
|
-
|
|
72
|
+
const shouldApplyCalibration = this._calibrationScreenshotSize !== null &&
|
|
73
|
+
this._calibrationScreenshotSize.width === width &&
|
|
74
|
+
this._calibrationScreenshotSize.height === height;
|
|
74
75
|
const calibrationArea = shouldApplyCalibration ? this._calibratedArea : null;
|
|
75
|
-
|
|
76
|
-
|
|
76
|
+
const calibratedImageArea = this._cropAreaToIntersection(imageArea, calibrationArea);
|
|
77
|
+
const cropMarginsArea = utils.cropMarginsToRect(imageArea, opts?.cropMargins);
|
|
78
|
+
const croppedImageArea = (0, geometry_1.getIntersection)(calibratedImageArea, cropMarginsArea);
|
|
79
|
+
if (croppedImageArea === null) {
|
|
80
|
+
throw new Error(`Invalid cropMargins option: resulting screenshot crop area is empty. ` +
|
|
81
|
+
`imageSize: ${(0, geometry_1.prettySize)(imageArea)}, cropMargins: ${JSON.stringify(opts?.cropMargins)}`);
|
|
77
82
|
}
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
await utils.saveViewportImageForDebugIfNeeded(image, calibratedArea, this._debugTmpDir);
|
|
83
|
+
const viewportCroppedArea = this._cropAreaToViewport(croppedImageArea, { width, height }, croppedImageArea, opts);
|
|
84
|
+
await utils.saveViewportImageForDebugIfNeeded(image, croppedImageArea, this._debugTmpDir);
|
|
81
85
|
if (viewportCroppedArea.width !== width || viewportCroppedArea.height !== height) {
|
|
82
86
|
await image.crop(viewportCroppedArea);
|
|
83
87
|
}
|
|
84
88
|
return image;
|
|
85
89
|
}
|
|
86
|
-
|
|
87
|
-
if (!
|
|
90
|
+
_cropAreaToIntersection(imageArea, cropArea) {
|
|
91
|
+
if (!cropArea) {
|
|
88
92
|
return imageArea;
|
|
89
93
|
}
|
|
90
|
-
const intersection = (0, geometry_1.getIntersection)(imageArea,
|
|
94
|
+
const intersection = (0, geometry_1.getIntersection)(imageArea, cropArea);
|
|
91
95
|
if (intersection === null) {
|
|
92
|
-
logger.warn(`No intersection found between image area and
|
|
93
|
-
`imageArea: ${(0, geometry_1.prettyRect)(imageArea)},
|
|
96
|
+
logger.warn(`No intersection found between image area and crop area, falling back to original image area.\n` +
|
|
97
|
+
`imageArea: ${(0, geometry_1.prettyRect)(imageArea)}, cropArea: ${(0, geometry_1.prettyRect)(cropArea)}\n` +
|
|
94
98
|
`This likely means Testplane incorrectly determined area free of system UI elements. You can let us know at ${help_1.NEW_ISSUE_LINK}, providing this log and browser used.`);
|
|
95
99
|
return imageArea;
|
|
96
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/browser/camera/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAAyB;AACzB,0DAA6B;AAC7B,kDAA8B;AAE9B,uCAAoC;AACpC,+CAAiC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/browser/camera/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,15 @@
|
|
|
1
|
-
import { ScreenshotMode } from ".";
|
|
1
|
+
import type { ScreenshotMode } from ".";
|
|
2
2
|
import { Image } from "../../image";
|
|
3
3
|
import { Rect, Size } from "../isomorphic/geometry";
|
|
4
|
+
export interface CropMargins {
|
|
5
|
+
top?: number;
|
|
6
|
+
right?: number;
|
|
7
|
+
bottom?: number;
|
|
8
|
+
left?: number;
|
|
9
|
+
}
|
|
10
|
+
type NormalizedCropMargins = Required<CropMargins>;
|
|
4
11
|
export declare const isFullPage: (imageSize: Rect<"image", "device">, viewportSize: Size<"device">, calibratedArea: Rect<"image", "device">, screenshotMode: ScreenshotMode) => boolean;
|
|
12
|
+
export declare const normalizeCropMargins: (cropMargins?: CropMargins) => NormalizedCropMargins;
|
|
13
|
+
export declare const cropMarginsToRect: (imageArea: Rect<"image", "device">, cropMargins?: CropMargins) => Rect<"image", "device">;
|
|
5
14
|
export declare function saveViewportImageForDebugIfNeeded(viewportImage: Image, viewportCroppedArea: Rect<"image", "device">, debugDir: string | null): Promise<void>;
|
|
15
|
+
export {};
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.saveViewportImageForDebugIfNeeded = exports.isFullPage = void 0;
|
|
6
|
+
exports.saveViewportImageForDebugIfNeeded = exports.cropMarginsToRect = exports.normalizeCropMargins = exports.isFullPage = void 0;
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
8
|
const fs_1 = __importDefault(require("fs"));
|
|
9
9
|
const geometry_1 = require("../isomorphic/geometry");
|
|
@@ -21,6 +21,32 @@ const isFullPage = (imageSize, viewportSize, calibratedArea, screenshotMode) =>
|
|
|
21
21
|
}
|
|
22
22
|
};
|
|
23
23
|
exports.isFullPage = isFullPage;
|
|
24
|
+
const normalizeCropMargins = (cropMargins) => {
|
|
25
|
+
const result = {
|
|
26
|
+
top: cropMargins?.top ?? 0,
|
|
27
|
+
right: cropMargins?.right ?? 0,
|
|
28
|
+
bottom: cropMargins?.bottom ?? 0,
|
|
29
|
+
left: cropMargins?.left ?? 0,
|
|
30
|
+
};
|
|
31
|
+
for (const side of ["top", "right", "bottom", "left"]) {
|
|
32
|
+
const value = result[side];
|
|
33
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value < 0 || Math.floor(value) !== value) {
|
|
34
|
+
throw new Error(`Invalid cropMargins.${side} option: expected a non-negative integer, got ${String(value)}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
exports.normalizeCropMargins = normalizeCropMargins;
|
|
40
|
+
const cropMarginsToRect = (imageArea, cropMargins) => {
|
|
41
|
+
const margins = (0, exports.normalizeCropMargins)(cropMargins);
|
|
42
|
+
return {
|
|
43
|
+
top: margins.top,
|
|
44
|
+
left: margins.left,
|
|
45
|
+
width: imageArea.width - margins.left - margins.right,
|
|
46
|
+
height: imageArea.height - margins.top - margins.bottom,
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
exports.cropMarginsToRect = cropMarginsToRect;
|
|
24
50
|
async function saveViewportImageForDebugIfNeeded(viewportImage, viewportCroppedArea, debugDir) {
|
|
25
51
|
if (!process.env.TESTPLANE_DEBUG_SCREENSHOTS || !debugDir) {
|
|
26
52
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/browser/camera/utils.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,4CAAoB;AAGpB,qDAA+D;AAC/D,+EAAgG;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/browser/camera/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,50 +3,13 @@ import type { Browser } from "../types";
|
|
|
3
3
|
type OnEventMessageFn = (cdpEventMessage: CDPEvent) => unknown;
|
|
4
4
|
export declare class CDPConnection {
|
|
5
5
|
onEventMessage: OnEventMessageFn | null;
|
|
6
|
-
private readonly
|
|
7
|
-
private readonly _headers?;
|
|
8
|
-
private _onPong;
|
|
9
|
-
private _pingInterval;
|
|
10
|
-
private _pingSubsequentFails;
|
|
11
|
-
private _onConnectionCloseFn;
|
|
12
|
-
private _wsConnectionStatus;
|
|
13
|
-
private _wsConnection;
|
|
14
|
-
private _wsConnectionPromise;
|
|
15
|
-
private _requestId;
|
|
16
|
-
private _pendingRequests;
|
|
6
|
+
private readonly _wsConnection;
|
|
17
7
|
private constructor();
|
|
18
8
|
/** @description Creates CDPConnection without establishing it */
|
|
19
9
|
static create(browser: Browser): Promise<CDPConnection>;
|
|
20
|
-
|
|
21
|
-
private _tryToEstablishWsConnection;
|
|
22
|
-
/**
|
|
23
|
-
* @description creates ws connection with retries or returns existing one
|
|
24
|
-
* @note Concurrent requests with same params produce same ws connection
|
|
25
|
-
*/
|
|
26
|
-
private _getWsConnection;
|
|
27
|
-
/** @description Handles websocket incoming messages, resolving pending requests */
|
|
10
|
+
close(): void;
|
|
28
11
|
private _onMessage;
|
|
29
|
-
/**
|
|
30
|
-
* @description Produces connection-"uniq" request ids
|
|
31
|
-
* @note Theoretically, it can collide, but given "CDP_MAX_REQUEST_ID" is INT32_MAX, it wont
|
|
32
|
-
*/
|
|
33
|
-
private _getRequestId;
|
|
34
|
-
/** @description establishes ws connection, sends request with timeout and waits for response */
|
|
35
|
-
private _tryToSendRequest;
|
|
36
12
|
/** @description Performs high-level CDP request with retries and timeouts */
|
|
37
13
|
request<T = void>(method: CDPRequest["method"], { params, sessionId }?: Omit<CDPRequest, "id" | "method">): Promise<T>;
|
|
38
|
-
private _closeWsConnection;
|
|
39
|
-
/**
|
|
40
|
-
* @description Tries to re-establish connection after network drops
|
|
41
|
-
* @note Silently gives up after failed "CDP_CONNECTION_RETRIES" attempts
|
|
42
|
-
*/
|
|
43
|
-
private _tryToReconnect;
|
|
44
|
-
/** @description Used to abort all pending requests when connection is closed */
|
|
45
|
-
private _abortPendingRequests;
|
|
46
|
-
/** @description Closes websocket connection, terminating all pending requests */
|
|
47
|
-
close(): void;
|
|
48
|
-
private _pingHealthCheckStop;
|
|
49
|
-
private _isWebSocketActive;
|
|
50
|
-
private _pingHealthCheckStart;
|
|
51
14
|
}
|
|
52
15
|
export {};
|