testcafe 1.13.0 → 1.14.2
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/CHANGELOG.md +88 -10
- package/LICENSE +21 -21
- package/README.md +52 -48
- package/bin/testcafe-with-v8-flag-filter.js +0 -0
- package/lib/api/exportable-lib/index.js +50 -50
- package/lib/api/request-hooks/assert-type.js +7 -7
- package/lib/api/request-hooks/hook-method-names.js +11 -0
- package/lib/api/request-hooks/hook.js +33 -39
- package/lib/api/request-hooks/interfaces.js +3 -3
- package/lib/api/request-hooks/request-logger.js +113 -111
- package/lib/api/request-hooks/request-mock/create-request-mock.js +12 -0
- package/lib/api/request-hooks/request-mock/index.js +46 -0
- package/lib/api/request-hooks/request-mock.js +47 -48
- package/lib/api/structure/base-unit.js +11 -11
- package/lib/api/structure/fixture.js +75 -75
- package/lib/api/structure/interfaces.js +2 -2
- package/lib/api/structure/test-file.js +31 -31
- package/lib/api/structure/test-timeout.js +9 -9
- package/lib/api/structure/test.js +85 -85
- package/lib/api/structure/testing-unit.js +89 -89
- package/lib/api/structure/unit-type.js +9 -9
- package/lib/api/test-controller/assertion.js +88 -88
- package/lib/api/test-controller/execution-context.js +82 -82
- package/lib/api/test-controller/index.js +359 -319
- package/lib/api/test-controller/proxy.js +28 -28
- package/lib/api/test-page-url.js +60 -60
- package/lib/api/test-run-tracker.js +68 -68
- package/lib/api/wrap-test-function.js +49 -49
- package/lib/assertions/executor.js +74 -74
- package/lib/assertions/get-fn.js +46 -46
- package/lib/assertions/type.js +20 -20
- package/lib/assets/content-types.js +9 -9
- package/lib/assets/injectables.js +18 -18
- package/lib/browser/connection/command.js +10 -10
- package/lib/browser/connection/error-hints.js +9 -9
- package/lib/browser/connection/gateway.js +159 -159
- package/lib/browser/connection/get-hints.js +33 -33
- package/lib/browser/connection/heartbeat-status.js +8 -8
- package/lib/browser/connection/index.js +328 -328
- package/lib/browser/connection/remotes-queue.js +46 -46
- package/lib/browser/connection/service-routes.js +12 -12
- package/lib/browser/connection/status.js +12 -12
- package/lib/browser/interfaces.js +2 -2
- package/lib/browser/provider/built-in/dedicated/base.js +80 -80
- package/lib/browser/provider/built-in/dedicated/chrome/browser-client.js +204 -204
- package/lib/browser/provider/built-in/dedicated/chrome/build-chrome-args.js +17 -17
- package/lib/browser/provider/built-in/dedicated/chrome/config.js +110 -110
- package/lib/browser/provider/built-in/dedicated/chrome/create-temp-profile.js +45 -45
- package/lib/browser/provider/built-in/dedicated/chrome/elapsed-upperbounds.js +15 -15
- package/lib/browser/provider/built-in/dedicated/chrome/index.js +102 -102
- package/lib/browser/provider/built-in/dedicated/chrome/interfaces.js +2 -2
- package/lib/browser/provider/built-in/dedicated/chrome/local-chrome.js +24 -24
- package/lib/browser/provider/built-in/dedicated/chrome/runtime-info.js +29 -29
- package/lib/browser/provider/built-in/dedicated/edge/index.js +10 -10
- package/lib/browser/provider/built-in/dedicated/edge/runtime-info.js +29 -29
- package/lib/browser/provider/built-in/dedicated/firefox/config.js +33 -33
- package/lib/browser/provider/built-in/dedicated/firefox/create-temp-profile.js +78 -78
- package/lib/browser/provider/built-in/dedicated/firefox/index.js +73 -73
- package/lib/browser/provider/built-in/dedicated/firefox/local-firefox.js +36 -36
- package/lib/browser/provider/built-in/dedicated/firefox/marionette-client/commands.js +13 -13
- package/lib/browser/provider/built-in/dedicated/firefox/marionette-client/index.js +200 -200
- package/lib/browser/provider/built-in/dedicated/firefox/runtime-info.js +17 -17
- package/lib/browser/provider/built-in/index.js +21 -21
- package/lib/browser/provider/built-in/locally-installed.js +30 -30
- package/lib/browser/provider/built-in/path.js +47 -47
- package/lib/browser/provider/built-in/remote.js +58 -58
- package/lib/browser/provider/index.js +303 -303
- package/lib/browser/provider/parse-provider-name.js +16 -16
- package/lib/browser/provider/plugin-host.js +121 -121
- package/lib/browser/provider/pool.js +115 -115
- package/lib/browser/provider/utils/argument-parsing.js +74 -74
- package/lib/browser/provider/utils/browser-starter.js +34 -34
- package/lib/browser/provider/utils/client-functions.js +24 -24
- package/lib/browser/provider/utils/get-maximized-headless-window-size.js +9 -9
- package/lib/cli/argument-parser.js +284 -279
- package/lib/cli/authentication-helper.js +35 -35
- package/lib/cli/cli.js +134 -134
- package/lib/cli/correct-browsers-and-sources.js +40 -40
- package/lib/cli/index.js +19 -19
- package/lib/cli/log.js +43 -43
- package/lib/cli/remotes-wizard.js +36 -36
- package/lib/cli/termination-handler.js +38 -38
- package/lib/client/automation/index.js +144 -46
- package/lib/client/automation/index.min.js +1 -1
- package/lib/client/browser/idle-page/index.html.mustache +35 -35
- package/lib/client/browser/idle-page/logo.svg +86 -86
- package/lib/client/browser/service-worker.js +4 -6
- package/lib/client/core/index.js +19 -13
- package/lib/client/core/index.min.js +1 -1
- package/lib/client/driver/index.js +1807 -451
- package/lib/client/driver/index.min.js +1 -1
- package/lib/client/driver/internal-properties.js +9 -9
- package/lib/client/test-run/iframe.js.mustache +17 -17
- package/lib/client/test-run/index.js.mustache +51 -51
- package/lib/client/ui/index.js +14 -12
- package/lib/client/ui/index.min.js +1 -1
- package/lib/client/ui/sprite.svg +42 -42
- package/lib/client-functions/builder-symbol.js +4 -4
- package/lib/client-functions/client-function-builder.js +156 -135
- package/lib/client-functions/replicator.js +61 -61
- package/lib/client-functions/return-single-prop-mode.js +8 -8
- package/lib/client-functions/selector-api-execution-mode.js +22 -0
- package/lib/client-functions/selectors/add-api.js +646 -588
- package/lib/client-functions/selectors/create-snapshot-methods.js +13 -13
- package/lib/client-functions/selectors/prepare-api-args.js +20 -20
- package/lib/client-functions/selectors/selector-attribute-filter.js +22 -22
- package/lib/client-functions/selectors/selector-builder.js +154 -150
- package/lib/client-functions/selectors/selector-text-filter.js +43 -43
- package/lib/client-functions/selectors/snapshot-properties.js +48 -48
- package/lib/client-functions/types.js +18 -18
- package/lib/compiler/babel/format-babel-produced-code.js +10 -10
- package/lib/compiler/babel/get-base-babel-options.js +11 -11
- package/lib/compiler/babel/load-libs.js +64 -62
- package/lib/compiler/babel/preset-stage-2.js +19 -19
- package/lib/compiler/compile-client-function.js +73 -73
- package/lib/compiler/compilers.js +33 -33
- package/lib/compiler/index.js +92 -92
- package/lib/compiler/interfaces.js +2 -2
- package/lib/compiler/test-file/api-based.js +146 -146
- package/lib/compiler/test-file/base.js +36 -36
- package/lib/compiler/test-file/exportble-lib-path.js +5 -5
- package/lib/compiler/test-file/formats/coffeescript/compiler.js +38 -38
- package/lib/compiler/test-file/formats/coffeescript/get-test-list.js +29 -29
- package/lib/compiler/test-file/formats/es-next/compiler.js +43 -43
- package/lib/compiler/test-file/formats/es-next/get-test-list.js +166 -166
- package/lib/compiler/test-file/formats/es-next/is-flow-code.js +7 -7
- package/lib/compiler/test-file/formats/raw.js +85 -85
- package/lib/compiler/test-file/formats/typescript/compiler.js +135 -135
- package/lib/compiler/test-file/formats/typescript/get-test-list.js +185 -185
- package/lib/compiler/test-file/test-file-parser-base.js +214 -214
- package/lib/configuration/configuration-base.js +165 -165
- package/lib/configuration/constants.js +9 -9
- package/lib/configuration/customizable-compilers.js +7 -7
- package/lib/configuration/default-values.js +51 -51
- package/lib/configuration/interfaces.js +3 -3
- package/lib/configuration/option-names.js +53 -53
- package/lib/configuration/option-source.js +9 -9
- package/lib/configuration/option.js +14 -14
- package/lib/configuration/quarantine-option-names.js +10 -0
- package/lib/configuration/run-option-names.js +26 -26
- package/lib/configuration/screenshot-option-names.js +10 -10
- package/lib/configuration/testcafe-configuration.js +164 -165
- package/lib/configuration/types.js +2 -2
- package/lib/configuration/typescript-configuration.js +62 -62
- package/lib/custom-client-scripts/assert-type.js +7 -7
- package/lib/custom-client-scripts/client-script-init.js +3 -3
- package/lib/custom-client-scripts/client-script.js +107 -108
- package/lib/custom-client-scripts/get-code.js +11 -11
- package/lib/custom-client-scripts/get-url.js +6 -6
- package/lib/custom-client-scripts/load.js +15 -15
- package/lib/custom-client-scripts/problematic-scripts.js +2 -2
- package/lib/custom-client-scripts/routing.js +36 -36
- package/lib/custom-client-scripts/utils.js +60 -60
- package/lib/embedding-utils.js +83 -83
- package/lib/errors/create-stack-filter.js +18 -18
- package/lib/errors/error-list.js +26 -26
- package/lib/errors/get-callsite.js +31 -31
- package/lib/errors/internal-modules-prefix.js +8 -8
- package/lib/errors/is-internal-stack-frame.js +46 -46
- package/lib/errors/process-test-fn-error.js +37 -37
- package/lib/errors/runtime/index.js +123 -123
- package/lib/errors/runtime/templates.js +116 -114
- package/lib/errors/runtime/type-assertions.js +112 -112
- package/lib/errors/stack-cleaning-hook.js +64 -64
- package/lib/errors/test-run/formattable-adapter.js +59 -59
- package/lib/errors/test-run/index.js +302 -302
- package/lib/errors/test-run/render-error-template.js +31 -31
- package/lib/errors/test-run/templates.js +93 -95
- package/lib/errors/test-run/utils.js +90 -85
- package/lib/errors/types.js +157 -155
- package/lib/index.js +81 -81
- package/lib/live/bootstrapper.js +44 -44
- package/lib/live/controller.js +107 -107
- package/lib/live/file-watcher/index.js +67 -67
- package/lib/live/file-watcher/modules-graph.js +58 -58
- package/lib/live/keyboard-observer.js +76 -76
- package/lib/live/logger/index.js +64 -64
- package/lib/live/test-run-controller.js +96 -96
- package/lib/live/test-run-state.js +6 -6
- package/lib/live/test-run.js +56 -56
- package/lib/live/test-runner.js +168 -168
- package/lib/load-assets.js +29 -29
- package/lib/notifications/add-rendered-warning.js +16 -16
- package/lib/notifications/debug-logger.js +78 -78
- package/lib/notifications/deprecated.js +24 -24
- package/lib/notifications/information-message.js +12 -12
- package/lib/notifications/warning-log.js +32 -31
- package/lib/notifications/warning-message.js +48 -48
- package/lib/reporter/command/command-formatter.js +120 -109
- package/lib/reporter/command/format-command.js +8 -8
- package/lib/reporter/command/interfaces.js +2 -2
- package/lib/reporter/index.js +319 -314
- package/lib/reporter/interfaces.js +2 -2
- package/lib/reporter/plugin-host.js +136 -137
- package/lib/reporter/plugin-methods.js +12 -12
- package/lib/role/index.js +74 -74
- package/lib/role/marker-symbol.js +7 -7
- package/lib/role/phase.js +9 -9
- package/lib/runner/bootstrapper.js +272 -272
- package/lib/runner/browser-job-result.js +9 -9
- package/lib/runner/browser-job.js +153 -123
- package/lib/runner/browser-set.js +114 -114
- package/lib/runner/fixture-hook-controller.js +85 -85
- package/lib/runner/index.js +450 -442
- package/lib/runner/interfaces.js +3 -3
- package/lib/runner/reporter-stream-controller.js +28 -28
- package/lib/runner/task/index.js +152 -133
- package/lib/runner/task/phase.js +9 -9
- package/lib/runner/test-run-controller.js +166 -185
- package/lib/runner/tested-app.js +73 -72
- package/lib/screenshots/capturer.js +141 -141
- package/lib/screenshots/constants.js +11 -11
- package/lib/screenshots/crop.js +111 -111
- package/lib/screenshots/default-extension.js +4 -4
- package/lib/screenshots/index.js +67 -67
- package/lib/screenshots/utils.js +39 -39
- package/lib/services/compiler/host.js +190 -106
- package/lib/services/compiler/io.js +9 -9
- package/lib/services/compiler/protocol.js +17 -16
- package/lib/services/compiler/service.js +225 -106
- package/lib/services/compiler/test-run-proxy.js +111 -73
- package/lib/services/interfaces.js +3 -0
- package/lib/services/process-title.js +8 -8
- package/lib/services/serialization/prepare-options.js +17 -17
- package/lib/services/serialization/replicator/create-replicator.js +27 -0
- package/lib/services/serialization/replicator/custom-error-transform.js +28 -0
- package/lib/services/serialization/test-structure.js +93 -77
- package/lib/services/utils/ipc/interfaces.js +30 -30
- package/lib/services/utils/ipc/io.js +108 -108
- package/lib/services/utils/ipc/message.js +76 -73
- package/lib/services/utils/ipc/packet.js +55 -55
- package/lib/services/utils/ipc/proxy.js +110 -118
- package/lib/services/utils/ipc/transport.js +64 -64
- package/lib/shared/errors/index.js +382 -382
- package/lib/shared/node-modules-folder-name.js +4 -4
- package/lib/test-run/bookmark.js +90 -90
- package/lib/test-run/browser-console-messages.js +73 -73
- package/lib/test-run/browser-manipulation-queue.js +92 -92
- package/lib/test-run/client-messages.js +9 -9
- package/lib/test-run/commands/actions.js +486 -425
- package/lib/test-run/commands/assertion.js +45 -45
- package/lib/test-run/commands/base.js +14 -14
- package/lib/test-run/commands/browser-manipulation.js +95 -95
- package/lib/test-run/commands/from-object.js +82 -82
- package/lib/test-run/commands/observation.js +61 -61
- package/lib/test-run/commands/options.js +231 -215
- package/lib/test-run/commands/service.js +54 -48
- package/lib/test-run/commands/type.js +65 -60
- package/lib/test-run/commands/utils.js +87 -87
- package/lib/test-run/commands/validations/argument.js +90 -90
- package/lib/test-run/commands/validations/factories.js +47 -47
- package/lib/test-run/commands/validations/initializers.js +44 -44
- package/lib/test-run/debug-log.js +32 -32
- package/lib/test-run/execute-js-expression.js +74 -74
- package/lib/test-run/index.js +823 -752
- package/lib/test-run/marker-symbol.js +7 -7
- package/lib/test-run/observed-callsites-storage.js +17 -17
- package/lib/test-run/phase.js +16 -16
- package/lib/test-run/session-controller.js +104 -104
- package/lib/testcafe.js +119 -114
- package/lib/utils/assignable.js +39 -39
- package/lib/utils/async-event-emitter.js +28 -28
- package/lib/utils/async-queue.js +14 -14
- package/lib/utils/browser-connection-timeouts.js +19 -19
- package/lib/utils/callsite.js +17 -17
- package/lib/utils/check-file-path.js +31 -31
- package/lib/utils/check-url.js +51 -51
- package/lib/utils/convert-to-best-fit-type.js +16 -16
- package/lib/utils/correct-file-path.js +21 -21
- package/lib/utils/define-lazy-property.js +13 -13
- package/lib/utils/delay.js +6 -6
- package/lib/utils/delegated-api.js +44 -44
- package/lib/utils/detect-display.js +6 -6
- package/lib/utils/detect-ffmpeg.js +44 -44
- package/lib/utils/diff/colors.js +29 -29
- package/lib/utils/diff/index.js +53 -53
- package/lib/utils/diff/util.js +24 -22
- package/lib/utils/diff.js +29 -29
- package/lib/utils/escape-user-agent.js +10 -10
- package/lib/utils/flag-list.js +17 -17
- package/lib/utils/get-any-key.js +8 -8
- package/lib/utils/get-browser.js +8 -8
- package/lib/utils/get-common-path.js +34 -34
- package/lib/utils/get-filter-fn.js +40 -40
- package/lib/utils/get-options/base.js +36 -36
- package/lib/utils/get-options/compiler.js +33 -33
- package/lib/utils/get-options/grep.js +15 -15
- package/lib/utils/get-options/index.js +21 -19
- package/lib/utils/get-options/meta.js +22 -22
- package/lib/utils/get-options/quarantine.js +92 -0
- package/lib/utils/get-options/screenshot.js +17 -17
- package/lib/utils/get-options/ssl.js +45 -45
- package/lib/utils/get-options/video.js +10 -10
- package/lib/utils/get-viewport-width.js +18 -18
- package/lib/utils/guard-time-execution.js +10 -10
- package/lib/utils/handle-errors.js +74 -74
- package/lib/utils/handle-tag-args.js +8 -8
- package/lib/utils/http.js +30 -30
- package/lib/utils/is-localhost.js +11 -11
- package/lib/utils/is-password-input.js +11 -0
- package/lib/utils/is-repl.js +12 -0
- package/lib/utils/is-window-in-iframe.js +6 -6
- package/lib/utils/limit-number.js +10 -10
- package/lib/utils/make-reg-exp.js +7 -7
- package/lib/utils/moment-loader.js +20 -20
- package/lib/utils/parse-file-list.js +71 -71
- package/lib/utils/parse-user-agent.js +55 -55
- package/lib/utils/path-pattern.js +114 -114
- package/lib/utils/prepare-reporters.js +30 -30
- package/lib/utils/prerender-callsite.js +18 -18
- package/lib/utils/process.js +119 -119
- package/lib/utils/promisified-functions.js +46 -46
- package/lib/utils/re-executable-promise.js +39 -39
- package/lib/utils/render-callsite-sync.js +29 -29
- package/lib/utils/render-template.js +10 -10
- package/lib/utils/reporter.js +30 -30
- package/lib/utils/resolve-path-relatively-cwd.js +7 -7
- package/lib/utils/string.js +105 -105
- package/lib/utils/temp-directory/cleanup-process/commands.js +7 -7
- package/lib/utils/temp-directory/cleanup-process/index.js +143 -143
- package/lib/utils/temp-directory/cleanup-process/worker.js +58 -58
- package/lib/utils/temp-directory/index.js +87 -87
- package/lib/utils/temp-directory/lockfile.js +56 -56
- package/lib/utils/thennable.js +7 -7
- package/lib/utils/timer.js +15 -15
- package/lib/utils/to-posix-path.js +8 -8
- package/lib/utils/types.js +2 -2
- package/lib/video-recorder/interfaces.js +2 -2
- package/lib/video-recorder/process.js +126 -126
- package/lib/video-recorder/recorder.js +136 -136
- package/lib/video-recorder/test-run-video-recorder.js +69 -69
- package/lib/video-recorder/videos.js +37 -37
- package/package.json +7 -7
- package/ts-defs/index.d.ts +109 -17
- package/ts-defs/selectors.d.ts +95 -7
- package/ts-defs/testcafe-scripts.d.ts +96 -8
|
@@ -1,61 +1,66 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// -------------------------------------------------------------
|
|
3
|
-
// WARNING: this file is used by both the client and the server.
|
|
4
|
-
// Do not use any browser or node-specific API!
|
|
5
|
-
// -------------------------------------------------------------
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.default = {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
// -------------------------------------------------------------
|
|
3
|
+
// WARNING: this file is used by both the client and the server.
|
|
4
|
+
// Do not use any browser or node-specific API!
|
|
5
|
+
// -------------------------------------------------------------
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.default = {
|
|
8
|
+
dispatchEvent: 'dispatch-event',
|
|
9
|
+
click: 'click',
|
|
10
|
+
rightClick: 'right-click',
|
|
11
|
+
doubleClick: 'double-click',
|
|
12
|
+
drag: 'drag',
|
|
13
|
+
dragToElement: 'drag-to-element',
|
|
14
|
+
hover: 'hover',
|
|
15
|
+
scroll: 'scroll',
|
|
16
|
+
scrollBy: 'scroll-by',
|
|
17
|
+
scrollIntoView: 'scroll-into-view',
|
|
18
|
+
typeText: 'type-text',
|
|
19
|
+
selectText: 'select-text',
|
|
20
|
+
selectTextAreaContent: 'select-text-area-content',
|
|
21
|
+
selectEditableContent: 'select-editable-content',
|
|
22
|
+
pressKey: 'press-key',
|
|
23
|
+
wait: 'wait',
|
|
24
|
+
navigateTo: 'navigate-to',
|
|
25
|
+
setFilesToUpload: 'set-files-to-upload',
|
|
26
|
+
clearUpload: 'clear-upload',
|
|
27
|
+
executeClientFunction: 'execute-client-function',
|
|
28
|
+
executeSelector: 'execute-selector',
|
|
29
|
+
takeScreenshot: 'take-screenshot',
|
|
30
|
+
takeElementScreenshot: 'take-element-screenshot',
|
|
31
|
+
takeScreenshotOnFail: 'take-screenshot-on-fail',
|
|
32
|
+
prepareBrowserManipulation: 'prepare-browser-manipulation',
|
|
33
|
+
showAssertionRetriesStatus: 'show-assertion-retries-status',
|
|
34
|
+
hideAssertionRetriesStatus: 'hide-assertion-retries-status',
|
|
35
|
+
setBreakpoint: 'set-breakpoint',
|
|
36
|
+
resizeWindow: 'resize-window',
|
|
37
|
+
resizeWindowToFitDevice: 'resize-window-to-fit-device',
|
|
38
|
+
maximizeWindow: 'maximize-window',
|
|
39
|
+
switchToIframe: 'switch-to-iframe',
|
|
40
|
+
switchToMainWindow: 'switch-to-main-window',
|
|
41
|
+
openWindow: 'open-window',
|
|
42
|
+
closeWindow: 'close-window',
|
|
43
|
+
getCurrentWindow: 'get-current-window',
|
|
44
|
+
getCurrentWindows: 'get-current-windows',
|
|
45
|
+
switchToWindow: 'switch-to-window',
|
|
46
|
+
switchToWindowByPredicate: 'switch-to-window-by-predicate',
|
|
47
|
+
switchToParentWindow: 'switch-to-parent-window',
|
|
48
|
+
switchToPreviousWindow: 'switch-to-previous-window',
|
|
49
|
+
setNativeDialogHandler: 'set-native-dialog-handler',
|
|
50
|
+
getNativeDialogHistory: 'get-native-dialog-history',
|
|
51
|
+
getBrowserConsoleMessages: 'get-browser-console-messages',
|
|
52
|
+
getActiveElement: 'get-active-element',
|
|
53
|
+
setTestSpeed: 'set-test-speed',
|
|
54
|
+
setPageLoadTimeout: 'set-page-load-timeout',
|
|
55
|
+
debug: 'debug',
|
|
56
|
+
assertion: 'assertion',
|
|
57
|
+
useRole: 'useRole',
|
|
58
|
+
testDone: 'test-done',
|
|
59
|
+
backupStorages: 'backup-storages',
|
|
60
|
+
executeExpression: 'execute-expression',
|
|
61
|
+
executeAsyncExpression: 'execute-async-expression',
|
|
62
|
+
unlockPage: 'unlock-page',
|
|
63
|
+
recorder: 'recorder'
|
|
64
|
+
};
|
|
60
65
|
module.exports = exports.default;
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0LXJ1bi9jb21tYW5kcy90eXBlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxnRUFBZ0U7QUFDaEUsZ0VBQWdFO0FBQ2hFLCtDQUErQztBQUMvQyxnRUFBZ0U7O0FBRWhFLGtCQUFlO0lBQ1gsYUFBYSxFQUFlLGdCQUFnQjtJQUM1QyxLQUFLLEVBQXVCLE9BQU87SUFDbkMsVUFBVSxFQUFrQixhQUFhO0lBQ3pDLFdBQVcsRUFBaUIsY0FBYztJQUMxQyxJQUFJLEVBQXdCLE1BQU07SUFDbEMsYUFBYSxFQUFlLGlCQUFpQjtJQUM3QyxLQUFLLEVBQXVCLE9BQU87SUFDbkMsTUFBTSxFQUFzQixRQUFRO0lBQ3BDLFFBQVEsRUFBb0IsV0FBVztJQUN2QyxjQUFjLEVBQWMsa0JBQWtCO0lBQzlDLFFBQVEsRUFBb0IsV0FBVztJQUN2QyxVQUFVLEVBQWtCLGFBQWE7SUFDekMscUJBQXFCLEVBQU8sMEJBQTBCO0lBQ3RELHFCQUFxQixFQUFPLHlCQUF5QjtJQUNyRCxRQUFRLEVBQW9CLFdBQVc7SUFDdkMsSUFBSSxFQUF3QixNQUFNO0lBQ2xDLFVBQVUsRUFBa0IsYUFBYTtJQUN6QyxnQkFBZ0IsRUFBWSxxQkFBcUI7SUFDakQsV0FBVyxFQUFpQixjQUFjO0lBQzFDLHFCQUFxQixFQUFPLHlCQUF5QjtJQUNyRCxlQUFlLEVBQWEsa0JBQWtCO0lBQzlDLGNBQWMsRUFBYyxpQkFBaUI7SUFDN0MscUJBQXFCLEVBQU8seUJBQXlCO0lBQ3JELG9CQUFvQixFQUFRLHlCQUF5QjtJQUNyRCwwQkFBMEIsRUFBRSw4QkFBOEI7SUFDMUQsMEJBQTBCLEVBQUUsK0JBQStCO0lBQzNELDBCQUEwQixFQUFFLCtCQUErQjtJQUMzRCxhQUFhLEVBQWUsZ0JBQWdCO0lBQzVDLFlBQVksRUFBZ0IsZUFBZTtJQUMzQyx1QkFBdUIsRUFBSyw2QkFBNkI7SUFDekQsY0FBYyxFQUFjLGlCQUFpQjtJQUM3QyxjQUFjLEVBQWMsa0JBQWtCO0lBQzlDLGtCQUFrQixFQUFVLHVCQUF1QjtJQUNuRCxVQUFVLEVBQWtCLGFBQWE7SUFDekMsV0FBVyxFQUFpQixjQUFjO0lBQzFDLGdCQUFnQixFQUFZLG9CQUFvQjtJQUNoRCxpQkFBaUIsRUFBVyxxQkFBcUI7SUFDakQsY0FBYyxFQUFjLGtCQUFrQjtJQUM5Qyx5QkFBeUIsRUFBRywrQkFBK0I7SUFDM0Qsb0JBQW9CLEVBQVEseUJBQXlCO0lBQ3JELHNCQUFzQixFQUFNLDJCQUEyQjtJQUN2RCxzQkFBc0IsRUFBTSwyQkFBMkI7SUFDdkQsc0JBQXNCLEVBQU0sMkJBQTJCO0lBQ3ZELHlCQUF5QixFQUFHLDhCQUE4QjtJQUMxRCxnQkFBZ0IsRUFBWSxvQkFBb0I7SUFDaEQsWUFBWSxFQUFnQixnQkFBZ0I7SUFDNUMsa0JBQWtCLEVBQVUsdUJBQXVCO0lBQ25ELEtBQUssRUFBdUIsT0FBTztJQUNuQyxTQUFTLEVBQW1CLFdBQVc7SUFDdkMsT0FBTyxFQUFxQixTQUFTO0lBQ3JDLFFBQVEsRUFBb0IsV0FBVztJQUN2QyxjQUFjLEVBQWMsaUJBQWlCO0lBQzdDLGlCQUFpQixFQUFXLG9CQUFvQjtJQUNoRCxzQkFBc0IsRUFBTSwwQkFBMEI7SUFDdEQsVUFBVSxFQUFrQixhQUFhO0lBQ3pDLFFBQVEsRUFBb0IsVUFBVTtDQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gV0FSTklORzogdGhpcyBmaWxlIGlzIHVzZWQgYnkgYm90aCB0aGUgY2xpZW50IGFuZCB0aGUgc2VydmVyLlxuLy8gRG8gbm90IHVzZSBhbnkgYnJvd3NlciBvciBub2RlLXNwZWNpZmljIEFQSSFcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIGRpc3BhdGNoRXZlbnQ6ICAgICAgICAgICAgICAnZGlzcGF0Y2gtZXZlbnQnLFxuICAgIGNsaWNrOiAgICAgICAgICAgICAgICAgICAgICAnY2xpY2snLFxuICAgIHJpZ2h0Q2xpY2s6ICAgICAgICAgICAgICAgICAncmlnaHQtY2xpY2snLFxuICAgIGRvdWJsZUNsaWNrOiAgICAgICAgICAgICAgICAnZG91YmxlLWNsaWNrJyxcbiAgICBkcmFnOiAgICAgICAgICAgICAgICAgICAgICAgJ2RyYWcnLFxuICAgIGRyYWdUb0VsZW1lbnQ6ICAgICAgICAgICAgICAnZHJhZy10by1lbGVtZW50JyxcbiAgICBob3ZlcjogICAgICAgICAgICAgICAgICAgICAgJ2hvdmVyJyxcbiAgICBzY3JvbGw6ICAgICAgICAgICAgICAgICAgICAgJ3Njcm9sbCcsXG4gICAgc2Nyb2xsQnk6ICAgICAgICAgICAgICAgICAgICdzY3JvbGwtYnknLFxuICAgIHNjcm9sbEludG9WaWV3OiAgICAgICAgICAgICAnc2Nyb2xsLWludG8tdmlldycsXG4gICAgdHlwZVRleHQ6ICAgICAgICAgICAgICAgICAgICd0eXBlLXRleHQnLFxuICAgIHNlbGVjdFRleHQ6ICAgICAgICAgICAgICAgICAnc2VsZWN0LXRleHQnLFxuICAgIHNlbGVjdFRleHRBcmVhQ29udGVudDogICAgICAnc2VsZWN0LXRleHQtYXJlYS1jb250ZW50JyxcbiAgICBzZWxlY3RFZGl0YWJsZUNvbnRlbnQ6ICAgICAgJ3NlbGVjdC1lZGl0YWJsZS1jb250ZW50JyxcbiAgICBwcmVzc0tleTogICAgICAgICAgICAgICAgICAgJ3ByZXNzLWtleScsXG4gICAgd2FpdDogICAgICAgICAgICAgICAgICAgICAgICd3YWl0JyxcbiAgICBuYXZpZ2F0ZVRvOiAgICAgICAgICAgICAgICAgJ25hdmlnYXRlLXRvJyxcbiAgICBzZXRGaWxlc1RvVXBsb2FkOiAgICAgICAgICAgJ3NldC1maWxlcy10by11cGxvYWQnLFxuICAgIGNsZWFyVXBsb2FkOiAgICAgICAgICAgICAgICAnY2xlYXItdXBsb2FkJyxcbiAgICBleGVjdXRlQ2xpZW50RnVuY3Rpb246ICAgICAgJ2V4ZWN1dGUtY2xpZW50LWZ1bmN0aW9uJyxcbiAgICBleGVjdXRlU2VsZWN0b3I6ICAgICAgICAgICAgJ2V4ZWN1dGUtc2VsZWN0b3InLFxuICAgIHRha2VTY3JlZW5zaG90OiAgICAgICAgICAgICAndGFrZS1zY3JlZW5zaG90JyxcbiAgICB0YWtlRWxlbWVudFNjcmVlbnNob3Q6ICAgICAgJ3Rha2UtZWxlbWVudC1zY3JlZW5zaG90JyxcbiAgICB0YWtlU2NyZWVuc2hvdE9uRmFpbDogICAgICAgJ3Rha2Utc2NyZWVuc2hvdC1vbi1mYWlsJyxcbiAgICBwcmVwYXJlQnJvd3Nlck1hbmlwdWxhdGlvbjogJ3ByZXBhcmUtYnJvd3Nlci1tYW5pcHVsYXRpb24nLFxuICAgIHNob3dBc3NlcnRpb25SZXRyaWVzU3RhdHVzOiAnc2hvdy1hc3NlcnRpb24tcmV0cmllcy1zdGF0dXMnLFxuICAgIGhpZGVBc3NlcnRpb25SZXRyaWVzU3RhdHVzOiAnaGlkZS1hc3NlcnRpb24tcmV0cmllcy1zdGF0dXMnLFxuICAgIHNldEJyZWFrcG9pbnQ6ICAgICAgICAgICAgICAnc2V0LWJyZWFrcG9pbnQnLFxuICAgIHJlc2l6ZVdpbmRvdzogICAgICAgICAgICAgICAncmVzaXplLXdpbmRvdycsXG4gICAgcmVzaXplV2luZG93VG9GaXREZXZpY2U6ICAgICdyZXNpemUtd2luZG93LXRvLWZpdC1kZXZpY2UnLFxuICAgIG1heGltaXplV2luZG93OiAgICAgICAgICAgICAnbWF4aW1pemUtd2luZG93JyxcbiAgICBzd2l0Y2hUb0lmcmFtZTogICAgICAgICAgICAgJ3N3aXRjaC10by1pZnJhbWUnLFxuICAgIHN3aXRjaFRvTWFpbldpbmRvdzogICAgICAgICAnc3dpdGNoLXRvLW1haW4td2luZG93JyxcbiAgICBvcGVuV2luZG93OiAgICAgICAgICAgICAgICAgJ29wZW4td2luZG93JyxcbiAgICBjbG9zZVdpbmRvdzogICAgICAgICAgICAgICAgJ2Nsb3NlLXdpbmRvdycsXG4gICAgZ2V0Q3VycmVudFdpbmRvdzogICAgICAgICAgICdnZXQtY3VycmVudC13aW5kb3cnLFxuICAgIGdldEN1cnJlbnRXaW5kb3dzOiAgICAgICAgICAnZ2V0LWN1cnJlbnQtd2luZG93cycsXG4gICAgc3dpdGNoVG9XaW5kb3c6ICAgICAgICAgICAgICdzd2l0Y2gtdG8td2luZG93JyxcbiAgICBzd2l0Y2hUb1dpbmRvd0J5UHJlZGljYXRlOiAgJ3N3aXRjaC10by13aW5kb3ctYnktcHJlZGljYXRlJyxcbiAgICBzd2l0Y2hUb1BhcmVudFdpbmRvdzogICAgICAgJ3N3aXRjaC10by1wYXJlbnQtd2luZG93JyxcbiAgICBzd2l0Y2hUb1ByZXZpb3VzV2luZG93OiAgICAgJ3N3aXRjaC10by1wcmV2aW91cy13aW5kb3cnLFxuICAgIHNldE5hdGl2ZURpYWxvZ0hhbmRsZXI6ICAgICAnc2V0LW5hdGl2ZS1kaWFsb2ctaGFuZGxlcicsXG4gICAgZ2V0TmF0aXZlRGlhbG9nSGlzdG9yeTogICAgICdnZXQtbmF0aXZlLWRpYWxvZy1oaXN0b3J5JyxcbiAgICBnZXRCcm93c2VyQ29uc29sZU1lc3NhZ2VzOiAgJ2dldC1icm93c2VyLWNvbnNvbGUtbWVzc2FnZXMnLFxuICAgIGdldEFjdGl2ZUVsZW1lbnQ6ICAgICAgICAgICAnZ2V0LWFjdGl2ZS1lbGVtZW50JyxcbiAgICBzZXRUZXN0U3BlZWQ6ICAgICAgICAgICAgICAgJ3NldC10ZXN0LXNwZWVkJyxcbiAgICBzZXRQYWdlTG9hZFRpbWVvdXQ6ICAgICAgICAgJ3NldC1wYWdlLWxvYWQtdGltZW91dCcsXG4gICAgZGVidWc6ICAgICAgICAgICAgICAgICAgICAgICdkZWJ1ZycsXG4gICAgYXNzZXJ0aW9uOiAgICAgICAgICAgICAgICAgICdhc3NlcnRpb24nLFxuICAgIHVzZVJvbGU6ICAgICAgICAgICAgICAgICAgICAndXNlUm9sZScsXG4gICAgdGVzdERvbmU6ICAgICAgICAgICAgICAgICAgICd0ZXN0LWRvbmUnLFxuICAgIGJhY2t1cFN0b3JhZ2VzOiAgICAgICAgICAgICAnYmFja3VwLXN0b3JhZ2VzJyxcbiAgICBleGVjdXRlRXhwcmVzc2lvbjogICAgICAgICAgJ2V4ZWN1dGUtZXhwcmVzc2lvbicsXG4gICAgZXhlY3V0ZUFzeW5jRXhwcmVzc2lvbjogICAgICdleGVjdXRlLWFzeW5jLWV4cHJlc3Npb24nLFxuICAgIHVubG9ja1BhZ2U6ICAgICAgICAgICAgICAgICAndW5sb2NrLXBhZ2UnLFxuICAgIHJlY29yZGVyOiAgICAgICAgICAgICAgICAgICAncmVjb3JkZXInXG59O1xuIl19
|
|
@@ -1,88 +1,88 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.isExecutableOnClientCommand = exports.isJSExpression = exports.isExecutableInTopWindowOnly = exports.isServiceCommand = exports.isBrowserManipulationCommand = exports.isResizeWindowCommand = exports.isScreenshotCommand = exports.canSetDebuggerBreakpointBeforeCommand = exports.isCommandRejectableByPageError = void 0;
|
|
7
|
-
// -------------------------------------------------------------
|
|
8
|
-
// WARNING: this file is used by both the client and the server.
|
|
9
|
-
// Do not use any browser or node-specific API!
|
|
10
|
-
// -------------------------------------------------------------
|
|
11
|
-
const type_1 = __importDefault(require("./type"));
|
|
12
|
-
const RAW_API_JS_EXPRESSION_TYPE = 'js-expr';
|
|
13
|
-
function isCommandRejectableByPageError(command) {
|
|
14
|
-
return !isObservationCommand(command) && !isBrowserManipulationCommand(command) && !isServiceCommand(command) ||
|
|
15
|
-
isResizeWindowCommand(command)
|
|
16
|
-
&& !isWindowSwitchingCommand(command);
|
|
17
|
-
}
|
|
18
|
-
exports.isCommandRejectableByPageError = isCommandRejectableByPageError;
|
|
19
|
-
function isClientFunctionCommand(command) {
|
|
20
|
-
return command.type === type_1.default.executeClientFunction ||
|
|
21
|
-
command.type === type_1.default.executeSelector;
|
|
22
|
-
}
|
|
23
|
-
function isObservationCommand(command) {
|
|
24
|
-
return isClientFunctionCommand(command) ||
|
|
25
|
-
command.type === type_1.default.wait ||
|
|
26
|
-
command.type === type_1.default.assertion ||
|
|
27
|
-
command.type === type_1.default.executeExpression;
|
|
28
|
-
}
|
|
29
|
-
function isWindowSwitchingCommand(command) {
|
|
30
|
-
return command.type === type_1.default.switchToIframe || command.type === type_1.default.switchToMainWindow;
|
|
31
|
-
}
|
|
32
|
-
function canSetDebuggerBreakpointBeforeCommand(command) {
|
|
33
|
-
return command.type !== type_1.default.debug && !isClientFunctionCommand(command) && !isServiceCommand(command);
|
|
34
|
-
}
|
|
35
|
-
exports.canSetDebuggerBreakpointBeforeCommand = canSetDebuggerBreakpointBeforeCommand;
|
|
36
|
-
function isScreenshotCommand(command) {
|
|
37
|
-
return command.type === type_1.default.takeScreenshot ||
|
|
38
|
-
command.type === type_1.default.takeElementScreenshot ||
|
|
39
|
-
command.type === type_1.default.takeScreenshotOnFail;
|
|
40
|
-
}
|
|
41
|
-
exports.isScreenshotCommand = isScreenshotCommand;
|
|
42
|
-
function isResizeWindowCommand(command) {
|
|
43
|
-
return command.type === type_1.default.resizeWindow ||
|
|
44
|
-
command.type === type_1.default.resizeWindowToFitDevice ||
|
|
45
|
-
command.type === type_1.default.maximizeWindow;
|
|
46
|
-
}
|
|
47
|
-
exports.isResizeWindowCommand = isResizeWindowCommand;
|
|
48
|
-
function isBrowserManipulationCommand(command) {
|
|
49
|
-
return isScreenshotCommand(command) || isResizeWindowCommand(command);
|
|
50
|
-
}
|
|
51
|
-
exports.isBrowserManipulationCommand = isBrowserManipulationCommand;
|
|
52
|
-
function isServiceCommand(command) {
|
|
53
|
-
return command.type === type_1.default.testDone ||
|
|
54
|
-
command.type === type_1.default.showAssertionRetriesStatus ||
|
|
55
|
-
command.type === type_1.default.hideAssertionRetriesStatus ||
|
|
56
|
-
command.type === type_1.default.setBreakpoint ||
|
|
57
|
-
command.type === type_1.default.takeScreenshotOnFail ||
|
|
58
|
-
command.type === type_1.default.recorder;
|
|
59
|
-
}
|
|
60
|
-
exports.isServiceCommand = isServiceCommand;
|
|
61
|
-
function isExecutableInTopWindowOnly(command) {
|
|
62
|
-
return command.type === type_1.default.testDone ||
|
|
63
|
-
command.type === type_1.default.switchToMainWindow ||
|
|
64
|
-
command.type === type_1.default.setNativeDialogHandler ||
|
|
65
|
-
command.type === type_1.default.getNativeDialogHistory ||
|
|
66
|
-
command.type === type_1.default.setTestSpeed ||
|
|
67
|
-
command.type === type_1.default.showAssertionRetriesStatus ||
|
|
68
|
-
command.type === type_1.default.hideAssertionRetriesStatus ||
|
|
69
|
-
command.type === type_1.default.setBreakpoint ||
|
|
70
|
-
isBrowserManipulationCommand(command) && command.type !== type_1.default.takeElementScreenshot;
|
|
71
|
-
}
|
|
72
|
-
exports.isExecutableInTopWindowOnly = isExecutableInTopWindowOnly;
|
|
73
|
-
function isJSExpression(val) {
|
|
74
|
-
return val !== null && typeof val === 'object' && val.type === RAW_API_JS_EXPRESSION_TYPE &&
|
|
75
|
-
typeof val.value === 'string';
|
|
76
|
-
}
|
|
77
|
-
exports.isJSExpression = isJSExpression;
|
|
78
|
-
function isExecutableOnClientCommand(command) {
|
|
79
|
-
return command.type !== type_1.default.wait &&
|
|
80
|
-
command.type !== type_1.default.setPageLoadTimeout &&
|
|
81
|
-
command.type !== type_1.default.debug &&
|
|
82
|
-
command.type !== type_1.default.useRole &&
|
|
83
|
-
command.type !== type_1.default.assertion &&
|
|
84
|
-
command.type !== type_1.default.executeExpression &&
|
|
85
|
-
command.type !== type_1.default.executeAsyncExpression;
|
|
86
|
-
}
|
|
87
|
-
exports.isExecutableOnClientCommand = isExecutableOnClientCommand;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.isExecutableOnClientCommand = exports.isJSExpression = exports.isExecutableInTopWindowOnly = exports.isServiceCommand = exports.isBrowserManipulationCommand = exports.isResizeWindowCommand = exports.isScreenshotCommand = exports.canSetDebuggerBreakpointBeforeCommand = exports.isCommandRejectableByPageError = void 0;
|
|
7
|
+
// -------------------------------------------------------------
|
|
8
|
+
// WARNING: this file is used by both the client and the server.
|
|
9
|
+
// Do not use any browser or node-specific API!
|
|
10
|
+
// -------------------------------------------------------------
|
|
11
|
+
const type_1 = __importDefault(require("./type"));
|
|
12
|
+
const RAW_API_JS_EXPRESSION_TYPE = 'js-expr';
|
|
13
|
+
function isCommandRejectableByPageError(command) {
|
|
14
|
+
return !isObservationCommand(command) && !isBrowserManipulationCommand(command) && !isServiceCommand(command) ||
|
|
15
|
+
isResizeWindowCommand(command)
|
|
16
|
+
&& !isWindowSwitchingCommand(command);
|
|
17
|
+
}
|
|
18
|
+
exports.isCommandRejectableByPageError = isCommandRejectableByPageError;
|
|
19
|
+
function isClientFunctionCommand(command) {
|
|
20
|
+
return command.type === type_1.default.executeClientFunction ||
|
|
21
|
+
command.type === type_1.default.executeSelector;
|
|
22
|
+
}
|
|
23
|
+
function isObservationCommand(command) {
|
|
24
|
+
return isClientFunctionCommand(command) ||
|
|
25
|
+
command.type === type_1.default.wait ||
|
|
26
|
+
command.type === type_1.default.assertion ||
|
|
27
|
+
command.type === type_1.default.executeExpression;
|
|
28
|
+
}
|
|
29
|
+
function isWindowSwitchingCommand(command) {
|
|
30
|
+
return command.type === type_1.default.switchToIframe || command.type === type_1.default.switchToMainWindow;
|
|
31
|
+
}
|
|
32
|
+
function canSetDebuggerBreakpointBeforeCommand(command) {
|
|
33
|
+
return command.type !== type_1.default.debug && !isClientFunctionCommand(command) && !isServiceCommand(command);
|
|
34
|
+
}
|
|
35
|
+
exports.canSetDebuggerBreakpointBeforeCommand = canSetDebuggerBreakpointBeforeCommand;
|
|
36
|
+
function isScreenshotCommand(command) {
|
|
37
|
+
return command.type === type_1.default.takeScreenshot ||
|
|
38
|
+
command.type === type_1.default.takeElementScreenshot ||
|
|
39
|
+
command.type === type_1.default.takeScreenshotOnFail;
|
|
40
|
+
}
|
|
41
|
+
exports.isScreenshotCommand = isScreenshotCommand;
|
|
42
|
+
function isResizeWindowCommand(command) {
|
|
43
|
+
return command.type === type_1.default.resizeWindow ||
|
|
44
|
+
command.type === type_1.default.resizeWindowToFitDevice ||
|
|
45
|
+
command.type === type_1.default.maximizeWindow;
|
|
46
|
+
}
|
|
47
|
+
exports.isResizeWindowCommand = isResizeWindowCommand;
|
|
48
|
+
function isBrowserManipulationCommand(command) {
|
|
49
|
+
return isScreenshotCommand(command) || isResizeWindowCommand(command);
|
|
50
|
+
}
|
|
51
|
+
exports.isBrowserManipulationCommand = isBrowserManipulationCommand;
|
|
52
|
+
function isServiceCommand(command) {
|
|
53
|
+
return command.type === type_1.default.testDone ||
|
|
54
|
+
command.type === type_1.default.showAssertionRetriesStatus ||
|
|
55
|
+
command.type === type_1.default.hideAssertionRetriesStatus ||
|
|
56
|
+
command.type === type_1.default.setBreakpoint ||
|
|
57
|
+
command.type === type_1.default.takeScreenshotOnFail ||
|
|
58
|
+
command.type === type_1.default.recorder;
|
|
59
|
+
}
|
|
60
|
+
exports.isServiceCommand = isServiceCommand;
|
|
61
|
+
function isExecutableInTopWindowOnly(command) {
|
|
62
|
+
return command.type === type_1.default.testDone ||
|
|
63
|
+
command.type === type_1.default.switchToMainWindow ||
|
|
64
|
+
command.type === type_1.default.setNativeDialogHandler ||
|
|
65
|
+
command.type === type_1.default.getNativeDialogHistory ||
|
|
66
|
+
command.type === type_1.default.setTestSpeed ||
|
|
67
|
+
command.type === type_1.default.showAssertionRetriesStatus ||
|
|
68
|
+
command.type === type_1.default.hideAssertionRetriesStatus ||
|
|
69
|
+
command.type === type_1.default.setBreakpoint ||
|
|
70
|
+
isBrowserManipulationCommand(command) && command.type !== type_1.default.takeElementScreenshot;
|
|
71
|
+
}
|
|
72
|
+
exports.isExecutableInTopWindowOnly = isExecutableInTopWindowOnly;
|
|
73
|
+
function isJSExpression(val) {
|
|
74
|
+
return val !== null && typeof val === 'object' && val.type === RAW_API_JS_EXPRESSION_TYPE &&
|
|
75
|
+
typeof val.value === 'string';
|
|
76
|
+
}
|
|
77
|
+
exports.isJSExpression = isJSExpression;
|
|
78
|
+
function isExecutableOnClientCommand(command) {
|
|
79
|
+
return command.type !== type_1.default.wait &&
|
|
80
|
+
command.type !== type_1.default.setPageLoadTimeout &&
|
|
81
|
+
command.type !== type_1.default.debug &&
|
|
82
|
+
command.type !== type_1.default.useRole &&
|
|
83
|
+
command.type !== type_1.default.assertion &&
|
|
84
|
+
command.type !== type_1.default.executeExpression &&
|
|
85
|
+
command.type !== type_1.default.executeAsyncExpression;
|
|
86
|
+
}
|
|
87
|
+
exports.isExecutableOnClientCommand = isExecutableOnClientCommand;
|
|
88
88
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdC1ydW4vY29tbWFuZHMvdXRpbHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0VBQWdFO0FBQ2hFLGdFQUFnRTtBQUNoRSwrQ0FBK0M7QUFDL0MsZ0VBQWdFO0FBQ2hFLGtEQUEwQjtBQUUxQixNQUFNLDBCQUEwQixHQUFHLFNBQVMsQ0FBQztBQUU3QyxTQUFnQiw4QkFBOEIsQ0FBRSxPQUFPO0lBQ25ELE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1FBQ3RHLHFCQUFxQixDQUFDLE9BQU8sQ0FBQztlQUMzQixDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFKRCx3RUFJQztBQUVELFNBQVMsdUJBQXVCLENBQUUsT0FBTztJQUNyQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLEtBQUssY0FBSSxDQUFDLHFCQUFxQjtRQUMzQyxPQUFPLENBQUMsSUFBSSxLQUFLLGNBQUksQ0FBQyxlQUFlLENBQUM7QUFDakQsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUUsT0FBTztJQUNsQyxPQUFPLHVCQUF1QixDQUFDLE9BQU8sQ0FBQztRQUNoQyxPQUFPLENBQUMsSUFBSSxLQUFLLGNBQUksQ0FBQyxJQUFJO1FBQzFCLE9BQU8sQ0FBQyxJQUFJLEtBQUssY0FBSSxDQUFDLFNBQVM7UUFDL0IsT0FBTyxDQUFDLElBQUksS0FBSyxjQUFJLENBQUMsaUJBQWlCLENBQUM7QUFDbkQsQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQUUsT0FBTztJQUN0QyxPQUFPLE9BQU8sQ0FBQyxJQUFJLEtBQUssY0FBSSxDQUFDLGNBQWMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLGNBQUksQ0FBQyxrQkFBa0IsQ0FBQztB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QUksQ0FBQyxPQUFPO1FBQzdCLE9BQU8sQ0FBQyxJQUFJLEtBQUssY0FBSSxDQUFDLFNBQVM7UUFDL0IsT0FBTyxDQUFDLElBQUksS0FBSyxjQUFJLENBQUMsaUJBQWlCO1FBQ3ZDLE9BQU8sQ0FBQyxJQUFJLEtBQUssY0FBSSxDQUFDLHNCQUFzQixDQUFDO0FBQ3hELENBQUM7QUFSRCxrRUFRQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFdBUk5JTkc6IHRoaXMgZmlsZSBpcyB1c2VkIGJ5IGJvdGggdGhlIGNsaWVudCBhbmQgdGhlIHNlcnZlci5cbi8vIERvIG5vdCB1c2UgYW55IGJyb3dzZXIgb3Igbm9kZS1zcGVjaWZpYyBBUEkhXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5pbXBvcnQgVFlQRSBmcm9tICcuL3R5cGUnO1xuXG5jb25zdCBSQVdfQVBJX0pTX0VYUFJFU1NJT05fVFlQRSA9ICdqcy1leHByJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tbWFuZFJlamVjdGFibGVCeVBhZ2VFcnJvciAoY29tbWFuZCkge1xuICAgIHJldHVybiAhaXNPYnNlcnZhdGlvbkNvbW1hbmQoY29tbWFuZCkgJiYgIWlzQnJvd3Nlck1hbmlwdWxhdGlvbkNvbW1hbmQoY29tbWFuZCkgJiYgIWlzU2VydmljZUNvbW1hbmQoY29tbWFuZCkgfHxcbiAgICAgICAgICAgaXNSZXNpemVXaW5kb3dDb21tYW5kKGNvbW1hbmQpXG4gICAgICAgICAgICYmICFpc1dpbmRvd1N3aXRjaGluZ0NvbW1hbmQoY29tbWFuZCk7XG59XG5cbmZ1bmN0aW9uIGlzQ2xpZW50RnVuY3Rpb25Db21tYW5kIChjb21tYW5kKSB7XG4gICAgcmV0dXJuIGNvbW1hbmQudHlwZSA9PT0gVFlQRS5leGVjdXRlQ2xpZW50RnVuY3Rpb24gfHxcbiAgICAgICAgICAgY29tbWFuZC50eXBlID09PSBUWVBFLmV4ZWN1dGVTZWxlY3Rvcjtcbn1cblxuZnVuY3Rpb24gaXNPYnNlcnZhdGlvbkNvbW1hbmQgKGNvbW1hbmQpIHtcbiAgICByZXR1cm4gaXNDbGllbnRGdW5jdGlvbkNvbW1hbmQoY29tbWFuZCkgfHxcbiAgICAgICAgICAgY29tbWFuZC50eXBlID09PSBUWVBFLndhaXQgfHxcbiAgICAgICAgICAgY29tbWFuZC50eXBlID09PSBUWVBFLmFzc2VydGlvbiB8fFxuICAgICAgICAgICBjb21tYW5kLnR5cGUgPT09IFRZUEUuZXhlY3V0ZUV4cHJlc3Npb247XG59XG5cbmZ1bmN0aW9uIGlzV2luZG93U3dpdGNoaW5nQ29tbWFuZCAoY29tbWFuZCkge1xuICAgIHJldHVybiBjb21tYW5kLnR5cGUgPT09IFRZUEUuc3dpdGNoVG9JZnJhbWUgfHwgY29tbWFuZC50eXBlID09PSBUWVBFLnN3aXRjaFRvTWFpbldpbmRvdztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhblNldERlYnVnZ2VyQnJlYWtwb2ludEJlZm9yZUNvbW1hbmQgKGNvbW1hbmQpIHtcbiAgICByZXR1cm4gY29tbWFuZC50eXBlICE9PSBUWVBFLmRlYnVnICYmICFpc0NsaWVudEZ1bmN0aW9uQ29tbWFuZChjb21tYW5kKSAmJiAhaXNTZXJ2aWNlQ29tbWFuZChjb21tYW5kKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2NyZWVuc2hvdENvbW1hbmQgKGNvbW1hbmQpIHtcbiAgICByZXR1cm4gY29tbWFuZC50eXBlID09PSBUWVBFLnRha2VTY3JlZW5zaG90IHx8XG4gICAgICAgICAgIGNvbW1hbmQudHlwZSA9PT0gVFlQRS50YWtlRWxlbWVudFNjcmVlbnNob3QgfHxcbiAgICAgICAgICAgY29tbWFuZC50eXBlID09PSBUWVBFLnRha2VTY3JlZW5zaG90T25GYWlsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZXNpemVXaW5kb3dDb21tYW5kIChjb21tYW5kKSB7XG4gICAgcmV0dXJuIGNvbW1hbmQudHlwZSA9PT0gVFlQRS5yZXNpemVXaW5kb3cgfHxcbiAgICAgICAgICAgY29tbWFuZC50eXBlID09PSBUWVBFLnJlc2l6ZVdpbmRvd1RvRml0RGV2aWNlIHx8XG4gICAgICAgICAgIGNvbW1hbmQudHlwZSA9PT0gVFlQRS5tYXhpbWl6ZVdpbmRvdztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQnJvd3Nlck1hbmlwdWxhdGlvbkNvbW1hbmQgKGNvbW1hbmQpIHtcbiAgICByZXR1cm4gaXNTY3JlZW5zaG90Q29tbWFuZChjb21tYW5kKSB8fCBpc1Jlc2l6ZVdpbmRvd0NvbW1hbmQoY29tbWFuZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NlcnZpY2VDb21tYW5kIChjb21tYW5kKSB7XG4gICAgcmV0dXJuIGNvbW1hbmQudHlwZSA9PT0gVFlQRS50ZXN0RG9uZSB8fFxuICAgICAgICAgICBjb21tYW5kLnR5cGUgPT09IFRZUEUuc2hvd0Fzc2VydGlvblJldHJpZXNTdGF0dXMgfHxcbiAgICAgICAgICAgY29tbWFuZC50eXBlID09PSBUWVBFLmhpZGVBc3NlcnRpb25SZXRyaWVzU3RhdHVzIHx8XG4gICAgICAgICAgIGNvbW1hbmQudHlwZSA9PT0gVFlQRS5zZXRCcmVha3BvaW50IHx8XG4gICAgICAgICAgIGNvbW1hbmQudHlwZSA9PT0gVFlQRS50YWtlU2NyZWVuc2hvdE9uRmFpbCB8fFxuICAgICAgICAgICBjb21tYW5kLnR5cGUgPT09IFRZUEUucmVjb3JkZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V4ZWN1dGFibGVJblRvcFdpbmRvd09ubHkgKGNvbW1hbmQpIHtcbiAgICByZXR1cm4gY29tbWFuZC50eXBlID09PSBUWVBFLnRlc3REb25lIHx8XG4gICAgICAgICAgIGNvbW1hbmQudHlwZSA9PT0gVFlQRS5zd2l0Y2hUb01haW5XaW5kb3cgfHxcbiAgICAgICAgICAgY29tbWFuZC50eXBlID09PSBUWVBFLnNldE5hdGl2ZURpYWxvZ0hhbmRsZXIgfHxcbiAgICAgICAgICAgY29tbWFuZC50eXBlID09PSBUWVBFLmdldE5hdGl2ZURpYWxvZ0hpc3RvcnkgfHxcbiAgICAgICAgICAgY29tbWFuZC50eXBlID09PSBUWVBFLnNldFRlc3RTcGVlZCB8fFxuICAgICAgICAgICBjb21tYW5kLnR5cGUgPT09IFRZUEUuc2hvd0Fzc2VydGlvblJldHJpZXNTdGF0dXMgfHxcbiAgICAgICAgICAgY29tbWFuZC50eXBlID09PSBUWVBFLmhpZGVBc3NlcnRpb25SZXRyaWVzU3RhdHVzIHx8XG4gICAgICAgICAgIGNvbW1hbmQudHlwZSA9PT0gVFlQRS5zZXRCcmVha3BvaW50IHx8XG4gICAgICAgICAgIGlzQnJvd3Nlck1hbmlwdWxhdGlvbkNvbW1hbmQoY29tbWFuZCkgJiYgY29tbWFuZC50eXBlICE9PSBUWVBFLnRha2VFbGVtZW50U2NyZWVuc2hvdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSlNFeHByZXNzaW9uICh2YWwpIHtcbiAgICByZXR1cm4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbC50eXBlID09PSBSQVdfQVBJX0pTX0VYUFJFU1NJT05fVFlQRSAmJlxuICAgICAgICAgICB0eXBlb2YgdmFsLnZhbHVlID09PSAnc3RyaW5nJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXhlY3V0YWJsZU9uQ2xpZW50Q29tbWFuZCAoY29tbWFuZCkge1xuICAgIHJldHVybiBjb21tYW5kLnR5cGUgIT09IFRZUEUud2FpdCAmJlxuICAgICAgICAgICBjb21tYW5kLnR5cGUgIT09IFRZUEUuc2V0UGFnZUxvYWRUaW1lb3V0ICYmXG4gICAgICAgICAgIGNvbW1hbmQudHlwZSAhPT0gVFlQRS5kZWJ1ZyAmJlxuICAgICAgICAgICBjb21tYW5kLnR5cGUgIT09IFRZUEUudXNlUm9sZSAmJlxuICAgICAgICAgICBjb21tYW5kLnR5cGUgIT09IFRZUEUuYXNzZXJ0aW9uICYmXG4gICAgICAgICAgIGNvbW1hbmQudHlwZSAhPT0gVFlQRS5leGVjdXRlRXhwcmVzc2lvbiAmJlxuICAgICAgICAgICBjb21tYW5kLnR5cGUgIT09IFRZUEUuZXhlY3V0ZUFzeW5jRXhwcmVzc2lvbjtcbn1cbiJdfQ==
|
|
@@ -1,91 +1,91 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.functionArgument = exports.screenshotPathArgument = exports.resizeWindowDeviceArgument = exports.stringOrStringArrayArgument = exports.urlArgument = exports.nullableStringArgument = exports.nonEmptyStringArgument = exports.stringArgument = exports.actionOptions = exports.actionRoleArgument = exports.setSpeedArgument = exports.booleanArgument = exports.positiveIntegerArgument = exports.integerArgument = void 0;
|
|
7
|
-
const device_specs_1 = require("device-specs");
|
|
8
|
-
const marker_symbol_1 = __importDefault(require("../../../role/marker-symbol"));
|
|
9
|
-
const factories_1 = require("./factories");
|
|
10
|
-
const test_run_1 = require("../../../errors/test-run");
|
|
11
|
-
const test_page_url_1 = require("../../../api/test-page-url");
|
|
12
|
-
const check_file_path_1 = __importDefault(require("../../../utils/check-file-path"));
|
|
13
|
-
// Validators
|
|
14
|
-
exports.integerArgument = factories_1.createIntegerValidator(test_run_1.ActionIntegerArgumentError);
|
|
15
|
-
exports.positiveIntegerArgument = factories_1.createPositiveIntegerValidator(test_run_1.ActionPositiveIntegerArgumentError);
|
|
16
|
-
exports.booleanArgument = factories_1.createBooleanValidator(test_run_1.ActionBooleanArgumentError);
|
|
17
|
-
exports.setSpeedArgument = factories_1.createSpeedValidator(test_run_1.SetTestSpeedArgumentError);
|
|
18
|
-
function actionRoleArgument(name, val) {
|
|
19
|
-
if (!val || !val[marker_symbol_1.default])
|
|
20
|
-
throw new test_run_1.ActionRoleArgumentError(name, typeof val);
|
|
21
|
-
}
|
|
22
|
-
exports.actionRoleArgument = actionRoleArgument;
|
|
23
|
-
function actionOptions(name, val) {
|
|
24
|
-
const type = typeof val;
|
|
25
|
-
if (type !== 'object' && val !== null && val !== void 0)
|
|
26
|
-
throw new test_run_1.ActionOptionsTypeError(type);
|
|
27
|
-
}
|
|
28
|
-
exports.actionOptions = actionOptions;
|
|
29
|
-
function stringArgument(argument, val, createError) {
|
|
30
|
-
if (!createError)
|
|
31
|
-
createError = actualValue => new test_run_1.ActionStringArgumentError(argument, actualValue);
|
|
32
|
-
const type = typeof val;
|
|
33
|
-
if (type !== 'string')
|
|
34
|
-
throw createError(type);
|
|
35
|
-
}
|
|
36
|
-
exports.stringArgument = stringArgument;
|
|
37
|
-
function nonEmptyStringArgument(argument, val, createError) {
|
|
38
|
-
if (!createError)
|
|
39
|
-
createError = actualValue => new test_run_1.ActionStringArgumentError(argument, actualValue);
|
|
40
|
-
stringArgument(argument, val, createError);
|
|
41
|
-
if (!val.length)
|
|
42
|
-
throw createError('""');
|
|
43
|
-
}
|
|
44
|
-
exports.nonEmptyStringArgument = nonEmptyStringArgument;
|
|
45
|
-
function nullableStringArgument(argument, val) {
|
|
46
|
-
const type = typeof val;
|
|
47
|
-
if (type !== 'string' && val !== null)
|
|
48
|
-
throw new test_run_1.ActionNullableStringArgumentError(argument, type);
|
|
49
|
-
}
|
|
50
|
-
exports.nullableStringArgument = nullableStringArgument;
|
|
51
|
-
function urlArgument(name, val) {
|
|
52
|
-
nonEmptyStringArgument(name, val);
|
|
53
|
-
test_page_url_1.assertPageUrl(val.trim(), 'navigateTo');
|
|
54
|
-
}
|
|
55
|
-
exports.urlArgument = urlArgument;
|
|
56
|
-
function stringOrStringArrayArgument(argument, val) {
|
|
57
|
-
const type = typeof val;
|
|
58
|
-
if (type === 'string') {
|
|
59
|
-
if (!val.length)
|
|
60
|
-
throw new test_run_1.ActionStringOrStringArrayArgumentError(argument, '""');
|
|
61
|
-
}
|
|
62
|
-
else if (Array.isArray(val)) {
|
|
63
|
-
if (!val.length)
|
|
64
|
-
throw new test_run_1.ActionStringOrStringArrayArgumentError(argument, '[]');
|
|
65
|
-
const validateElement = elementIndex => nonEmptyStringArgument(argument, val[elementIndex], actualValue => new test_run_1.ActionStringArrayElementError(argument, actualValue, elementIndex));
|
|
66
|
-
for (let i = 0; i < val.length; i++)
|
|
67
|
-
validateElement(i);
|
|
68
|
-
}
|
|
69
|
-
else
|
|
70
|
-
throw new test_run_1.ActionStringOrStringArrayArgumentError(argument, type);
|
|
71
|
-
}
|
|
72
|
-
exports.stringOrStringArrayArgument = stringOrStringArrayArgument;
|
|
73
|
-
function resizeWindowDeviceArgument(name, val) {
|
|
74
|
-
nonEmptyStringArgument(name, val);
|
|
75
|
-
if (!device_specs_1.isValidDeviceName(val))
|
|
76
|
-
throw new test_run_1.ActionUnsupportedDeviceTypeError(name, val);
|
|
77
|
-
}
|
|
78
|
-
exports.resizeWindowDeviceArgument = resizeWindowDeviceArgument;
|
|
79
|
-
function screenshotPathArgument(name, val) {
|
|
80
|
-
nonEmptyStringArgument(name, val);
|
|
81
|
-
const forbiddenCharsList = check_file_path_1.default(val);
|
|
82
|
-
if (forbiddenCharsList.length)
|
|
83
|
-
throw new test_run_1.ForbiddenCharactersInScreenshotPathError(val, forbiddenCharsList);
|
|
84
|
-
}
|
|
85
|
-
exports.screenshotPathArgument = screenshotPathArgument;
|
|
86
|
-
function functionArgument(name, val) {
|
|
87
|
-
if (typeof val !== 'function')
|
|
88
|
-
throw new test_run_1.ActionFunctionArgumentError(name, val);
|
|
89
|
-
}
|
|
90
|
-
exports.functionArgument = functionArgument;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.functionArgument = exports.screenshotPathArgument = exports.resizeWindowDeviceArgument = exports.stringOrStringArrayArgument = exports.urlArgument = exports.nullableStringArgument = exports.nonEmptyStringArgument = exports.stringArgument = exports.actionOptions = exports.actionRoleArgument = exports.setSpeedArgument = exports.booleanArgument = exports.positiveIntegerArgument = exports.integerArgument = void 0;
|
|
7
|
+
const device_specs_1 = require("device-specs");
|
|
8
|
+
const marker_symbol_1 = __importDefault(require("../../../role/marker-symbol"));
|
|
9
|
+
const factories_1 = require("./factories");
|
|
10
|
+
const test_run_1 = require("../../../errors/test-run");
|
|
11
|
+
const test_page_url_1 = require("../../../api/test-page-url");
|
|
12
|
+
const check_file_path_1 = __importDefault(require("../../../utils/check-file-path"));
|
|
13
|
+
// Validators
|
|
14
|
+
exports.integerArgument = factories_1.createIntegerValidator(test_run_1.ActionIntegerArgumentError);
|
|
15
|
+
exports.positiveIntegerArgument = factories_1.createPositiveIntegerValidator(test_run_1.ActionPositiveIntegerArgumentError);
|
|
16
|
+
exports.booleanArgument = factories_1.createBooleanValidator(test_run_1.ActionBooleanArgumentError);
|
|
17
|
+
exports.setSpeedArgument = factories_1.createSpeedValidator(test_run_1.SetTestSpeedArgumentError);
|
|
18
|
+
function actionRoleArgument(name, val) {
|
|
19
|
+
if (!val || !val[marker_symbol_1.default])
|
|
20
|
+
throw new test_run_1.ActionRoleArgumentError(name, typeof val);
|
|
21
|
+
}
|
|
22
|
+
exports.actionRoleArgument = actionRoleArgument;
|
|
23
|
+
function actionOptions(name, val) {
|
|
24
|
+
const type = typeof val;
|
|
25
|
+
if (type !== 'object' && val !== null && val !== void 0)
|
|
26
|
+
throw new test_run_1.ActionOptionsTypeError(type);
|
|
27
|
+
}
|
|
28
|
+
exports.actionOptions = actionOptions;
|
|
29
|
+
function stringArgument(argument, val, createError) {
|
|
30
|
+
if (!createError)
|
|
31
|
+
createError = actualValue => new test_run_1.ActionStringArgumentError(argument, actualValue);
|
|
32
|
+
const type = typeof val;
|
|
33
|
+
if (type !== 'string')
|
|
34
|
+
throw createError(type);
|
|
35
|
+
}
|
|
36
|
+
exports.stringArgument = stringArgument;
|
|
37
|
+
function nonEmptyStringArgument(argument, val, createError) {
|
|
38
|
+
if (!createError)
|
|
39
|
+
createError = actualValue => new test_run_1.ActionStringArgumentError(argument, actualValue);
|
|
40
|
+
stringArgument(argument, val, createError);
|
|
41
|
+
if (!val.length)
|
|
42
|
+
throw createError('""');
|
|
43
|
+
}
|
|
44
|
+
exports.nonEmptyStringArgument = nonEmptyStringArgument;
|
|
45
|
+
function nullableStringArgument(argument, val) {
|
|
46
|
+
const type = typeof val;
|
|
47
|
+
if (type !== 'string' && val !== null)
|
|
48
|
+
throw new test_run_1.ActionNullableStringArgumentError(argument, type);
|
|
49
|
+
}
|
|
50
|
+
exports.nullableStringArgument = nullableStringArgument;
|
|
51
|
+
function urlArgument(name, val) {
|
|
52
|
+
nonEmptyStringArgument(name, val);
|
|
53
|
+
test_page_url_1.assertPageUrl(val.trim(), 'navigateTo');
|
|
54
|
+
}
|
|
55
|
+
exports.urlArgument = urlArgument;
|
|
56
|
+
function stringOrStringArrayArgument(argument, val) {
|
|
57
|
+
const type = typeof val;
|
|
58
|
+
if (type === 'string') {
|
|
59
|
+
if (!val.length)
|
|
60
|
+
throw new test_run_1.ActionStringOrStringArrayArgumentError(argument, '""');
|
|
61
|
+
}
|
|
62
|
+
else if (Array.isArray(val)) {
|
|
63
|
+
if (!val.length)
|
|
64
|
+
throw new test_run_1.ActionStringOrStringArrayArgumentError(argument, '[]');
|
|
65
|
+
const validateElement = elementIndex => nonEmptyStringArgument(argument, val[elementIndex], actualValue => new test_run_1.ActionStringArrayElementError(argument, actualValue, elementIndex));
|
|
66
|
+
for (let i = 0; i < val.length; i++)
|
|
67
|
+
validateElement(i);
|
|
68
|
+
}
|
|
69
|
+
else
|
|
70
|
+
throw new test_run_1.ActionStringOrStringArrayArgumentError(argument, type);
|
|
71
|
+
}
|
|
72
|
+
exports.stringOrStringArrayArgument = stringOrStringArrayArgument;
|
|
73
|
+
function resizeWindowDeviceArgument(name, val) {
|
|
74
|
+
nonEmptyStringArgument(name, val);
|
|
75
|
+
if (!device_specs_1.isValidDeviceName(val))
|
|
76
|
+
throw new test_run_1.ActionUnsupportedDeviceTypeError(name, val);
|
|
77
|
+
}
|
|
78
|
+
exports.resizeWindowDeviceArgument = resizeWindowDeviceArgument;
|
|
79
|
+
function screenshotPathArgument(name, val) {
|
|
80
|
+
nonEmptyStringArgument(name, val);
|
|
81
|
+
const forbiddenCharsList = check_file_path_1.default(val);
|
|
82
|
+
if (forbiddenCharsList.length)
|
|
83
|
+
throw new test_run_1.ForbiddenCharactersInScreenshotPathError(val, forbiddenCharsList);
|
|
84
|
+
}
|
|
85
|
+
exports.screenshotPathArgument = screenshotPathArgument;
|
|
86
|
+
function functionArgument(name, val) {
|
|
87
|
+
if (typeof val !== 'function')
|
|
88
|
+
throw new test_run_1.ActionFunctionArgumentError(name, val);
|
|
89
|
+
}
|
|
90
|
+
exports.functionArgument = functionArgument;
|
|
91
91
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJndW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdGVzdC1ydW4vY29tbWFuZHMvdmFsaWRhdGlvbnMvYXJndW1lbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsK0NBQWlEO0FBQ2pELGdGQUEyRDtBQUUzRCwyQ0FLcUI7QUFFckIsdURBY2tDO0FBRWxDLDhEQUEyRDtBQUMzRCxxRkFBMkQ7QUFHM0QsYUFBYTtBQUNBLFFBQUEsZUFBZSxHQUFXLGtDQUFzQixDQUFDLHFDQUEwQixDQUFDLENBQUM7QUFDN0UsUUFBQSx1QkFBdUIsR0FBRywwQ0FBOEIsQ0FBQyw2Q0FBa0MsQ0FBQyxDQUFDO0FBQzdGLFFBQUEsZUFBZSxHQUFXLGtDQUFzQixDQUFDLHFDQUEwQixDQUFDLENBQUM7QUFDN0UsUUFBQSxnQkFBZ0IsR0FBVSxnQ0FBb0IsQ0FBQyxvQ0FBeUIsQ0FBQyxDQUFDO0FBR3ZGLFNBQWdCLGtCQUFrQixDQUFFLElBQUksRUFBRSxHQUFHO0lBQ3pDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsdUJBQWdCLENBQUM7UUFDOUIsTUFBTSxJQUFJLGtDQUF1QixDQUFDLElBQUksRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFIRCxnREFHQztBQUVELFNBQWdCLGFBQWEsQ0FBRSxJQUFJLEVBQUUsR0FBRztJQUNwQyxNQUFNLElBQUksR0FBRyxPQUFPLEdBQUcsQ0FBQztJQUV4QixJQUFJLElBQUksS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDO1FBQ25ELE1BQU0sSUFBSSxpQ0FBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBTEQsc0NBS0M7QUFHRCxTQUFnQixjQUFjLENBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxXQUFXO0lBQ3RELElBQUksQ0FBQyxXQUFXO1FBQ1osV0FBVyxH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LHlCQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFOUMsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNO1FBQ3pCLE1BQU0sSUFBSSxtREFBd0MsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUNwRixDQUFDO0FBUEQsd0RBT0M7QUFFRCxTQUFnQixnQkFBZ0IsQ0FBRSxJQUFJLEVBQUUsR0FBRztJQUN2QyxJQUFJLE9BQU8sR0FBRyxLQUFLLFVBQVU7UUFDekIsTUFBTSxJQUFJLHNDQUEyQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBSEQsNENBR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1ZhbGlkRGV2aWNlTmFtZSB9IGZyb20gJ2RldmljZS1zcGVjcyc7XG5pbXBvcnQgcm9sZU1hcmtlclN5bWJvbCBmcm9tICcuLi8uLi8uLi9yb2xlL21hcmtlci1zeW1ib2wnO1xuXG5pbXBvcnQge1xuICAgIGNyZWF0ZUJvb2xlYW5WYWxpZGF0b3IsXG4gICAgY3JlYXRlSW50ZWdlclZhbGlkYXRvcixcbiAgICBjcmVhdGVQb3NpdGl2ZUludGVnZXJWYWxpZGF0b3IsXG4gICAgY3JlYXRlU3BlZWRWYWxpZGF0b3Jcbn0gZnJvbSAnLi9mYWN0b3JpZXMnO1xuXG5pbXBvcnQge1xuICAgIEFjdGlvbk9wdGlvbnNUeXBlRXJyb3IsXG4gICAgQWN0aW9uQm9vbGVhbkFyZ3VtZW50RXJyb3IsXG4gICAgQWN0aW9uU3RyaW5nQXJndW1lbnRFcnJvcixcbiAgICBBY3Rpb25OdWxsYWJsZVN0cmluZ0FyZ3VtZW50RXJyb3IsXG4gICAgQWN0aW9uSW50ZWdlckFyZ3VtZW50RXJyb3IsXG4gICAgQWN0aW9uUm9sZUFyZ3VtZW50RXJyb3IsXG4gICAgQWN0aW9uUG9zaXRpdmVJbnRlZ2VyQXJndW1lbnRFcnJvcixcbiAgICBBY3Rpb25TdHJpbmdPclN0cmluZ0FycmF5QXJndW1lbnRFcnJvcixcbiAgICBBY3Rpb25TdHJpbmdBcnJheUVsZW1lbnRFcnJvcixcbiAgICBBY3Rpb25VbnN1cHBvcnRlZERldmljZVR5cGVFcnJvcixcbiAgICBBY3Rpb25GdW5jdGlvbkFyZ3VtZW50RXJyb3IsXG4gICAgU2V0VGVzdFNwZWVkQXJndW1lbnRFcnJvcixcbiAgICBGb3JiaWRkZW5DaGFyYWN0ZXJzSW5TY3JlZW5zaG90UGF0aEVycm9yXG59IGZyb20gJy4uLy4uLy4uL2Vycm9ycy90ZXN0LXJ1bic7XG5cbmltcG9ydCB7IGFzc2VydFBhZ2VVcmwgfSBmcm9tICcuLi8uLi8uLi9hcGkvdGVzdC1wYWdlLXVybCc7XG5pbXBvcnQgY2hlY2tGaWxlUGF0aCBmcm9tICcuLi8uLi8uLi91dGlscy9jaGVjay1maWxlLXBhdGgnO1xuXG5cbi8vIFZhbGlkYXRvcnNcbmV4cG9ydCBjb25zdCBpbnRlZ2VyQXJndW1lbnQgICAgICAgICA9IGNyZWF0ZUludGVnZXJWYWxpZGF0b3IoQWN0aW9uSW50ZWdlckFyZ3VtZW50RXJyb3IpO1xuZXhwb3J0IGNvbnN0IHBvc2l0aXZlSW50ZWdlckFyZ3VtZW50ID0gY3JlYXRlUG9zaXRpdmVJbnRlZ2VyVmFsaWRhdG9yKEFjdGlvblBvc2l0aXZlSW50ZWdlckFyZ3VtZW50RXJyb3IpO1xuZXhwb3J0IGNvbnN0IGJvb2xlYW5Bcmd1bWVudCAgICAgICAgID0gY3JlYXRlQm9vbGVhblZhbGlkYXRvcihBY3Rpb25Cb29sZWFuQXJndW1lbnRFcnJvcik7XG5leHBvcnQgY29uc3Qgc2V0U3BlZWRBcmd1bWVudCAgICAgICAgPSBjcmVhdGVTcGVlZFZhbGlkYXRvcihTZXRUZXN0U3BlZWRBcmd1bWVudEVycm9yKTtcblxuXG5leHBvcnQgZnVuY3Rpb24gYWN0aW9uUm9sZUFyZ3VtZW50IChuYW1lLCB2YWwpIHtcbiAgICBpZiAoIXZhbCB8fCAhdmFsW3JvbGVNYXJrZXJTeW1ib2xdKVxuICAgICAgICB0aHJvdyBuZXcgQWN0aW9uUm9sZUFyZ3VtZW50RXJyb3IobmFtZSwgdHlwZW9mIHZhbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhY3Rpb25PcHRpb25zIChuYW1lLCB2YWwpIHtcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbDtcblxuICAgIGlmICh0eXBlICE9PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwgJiYgdmFsICE9PSB2b2lkIDApXG4gICAgICAgIHRocm93IG5ldyBBY3Rpb25PcHRpb25zVHlwZUVycm9yKHR5cGUpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdBcmd1bWVudCAoYXJndW1lbnQsIHZhbCwgY3JlYXRlRXJyb3IpIHtcbiAgICBpZiAoIWNyZWF0ZUVycm9yKVxuICAgICAgICBjcmVhdGVFcnJvciA9IGFjdHVhbFZhbHVlID0+IG5ldyBBY3Rpb25TdHJpbmdBcmd1bWVudEVycm9yKGFyZ3VtZW50LCBhY3R1YWxWYWx1ZSk7XG5cbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbDtcblxuICAgIGlmICh0eXBlICE9PSAnc3RyaW5nJylcbiAgICAgICAgdGhyb3cgY3JlYXRlRXJyb3IodHlwZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub25FbXB0eVN0cmluZ0FyZ3VtZW50IChhcmd1bWVudCwgdmFsLCBjcmVhdGVFcnJvcikge1xuICAgIGlmICghY3JlYXRlRXJyb3IpXG4gICAgICAgIGNyZWF0ZUVycm9yID0gYWN0dWFsVmFsdWUgPT4gbmV3IEFjdGlvblN0cmluZ0FyZ3VtZW50RXJyb3IoYXJndW1lbnQsIGFjdHVhbFZhbHVlKTtcblxuICAgIHN0cmluZ0FyZ3VtZW50KGFyZ3VtZW50LCB2YWwsIGNyZWF0ZUVycm9yKTtcblxuICAgIGlmICghdmFsLmxlbmd0aClcbiAgICAgICAgdGhyb3cgY3JlYXRlRXJyb3IoJ1wiXCInKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG51bGxhYmxlU3RyaW5nQXJndW1lbnQgKGFyZ3VtZW50LCB2YWwpIHtcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbDtcblxuICAgIGlmICh0eXBlICE9PSAnc3RyaW5nJyAmJiB2YWwgIT09IG51bGwpXG4gICAgICAgIHRocm93IG5ldyBBY3Rpb25OdWxsYWJsZVN0cmluZ0FyZ3VtZW50RXJyb3IoYXJndW1lbnQsIHR5cGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXJsQXJndW1lbnQgKG5hbWUsIHZhbCkge1xuICAgIG5vbkVtcHR5U3RyaW5nQXJndW1lbnQobmFtZSwgdmFsKTtcblxuICAgIGFzc2VydFBhZ2VVcmwodmFsLnRyaW0oKSwgJ25hdmlnYXRlVG8nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ09yU3RyaW5nQXJyYXlBcmd1bWVudCAoYXJndW1lbnQsIHZhbCkge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsO1xuXG4gICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICghdmFsLmxlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBBY3Rpb25TdHJpbmdPclN0cmluZ0FycmF5QXJndW1lbnRFcnJvcihhcmd1bWVudCwgJ1wiXCInKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgaWYgKCF2YWwubGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEFjdGlvblN0cmluZ09yU3RyaW5nQXJyYXlBcmd1bWVudEVycm9yKGFyZ3VtZW50LCAnW10nKTtcblxuICAgICAgICBjb25zdCB2YWxpZGF0ZUVsZW1lbnQgPSBlbGVtZW50SW5kZXggPT4gbm9uRW1wdHlTdHJpbmdBcmd1bWVudChcbiAgICAgICAgICAgIGFyZ3VtZW50LFxuICAgICAgICAgICAgdmFsW2VsZW1lbnRJbmRleF0sXG4gICAgICAgICAgICBhY3R1YWxWYWx1ZSA9PiBuZXcgQWN0aW9uU3RyaW5nQXJyYXlFbGVtZW50RXJyb3IoYXJndW1lbnQsIGFjdHVhbFZhbHVlLCBlbGVtZW50SW5kZXgpXG4gICAgICAgICk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB2YWxpZGF0ZUVsZW1lbnQoaSk7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICB0aHJvdyBuZXcgQWN0aW9uU3RyaW5nT3JTdHJpbmdBcnJheUFyZ3VtZW50RXJyb3IoYXJndW1lbnQsIHR5cGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzaXplV2luZG93RGV2aWNlQXJndW1lbnQgKG5hbWUsIHZhbCkge1xuICAgIG5vbkVtcHR5U3RyaW5nQXJndW1lbnQobmFtZSwgdmFsKTtcblxuICAgIGlmICghaXNWYWxpZERldmljZU5hbWUodmFsKSlcbiAgICAgICAgdGhyb3cgbmV3IEFjdGlvblVuc3VwcG9ydGVkRGV2aWNlVHlwZUVycm9yKG5hbWUsIHZhbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JlZW5zaG90UGF0aEFyZ3VtZW50IChuYW1lLCB2YWwpIHtcbiAgICBub25FbXB0eVN0cmluZ0FyZ3VtZW50KG5hbWUsIHZhbCk7XG5cbiAgICBjb25zdCBmb3JiaWRkZW5DaGFyc0xpc3QgPSBjaGVja0ZpbGVQYXRoKHZhbCk7XG5cbiAgICBpZiAoZm9yYmlkZGVuQ2hhcnNMaXN0Lmxlbmd0aClcbiAgICAgICAgdGhyb3cgbmV3IEZvcmJpZGRlbkNoYXJhY3RlcnNJblNjcmVlbnNob3RQYXRoRXJyb3IodmFsLCBmb3JiaWRkZW5DaGFyc0xpc3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnVuY3Rpb25Bcmd1bWVudCAobmFtZSwgdmFsKSB7XG4gICAgaWYgKHR5cGVvZiB2YWwgIT09ICdmdW5jdGlvbicpXG4gICAgICAgIHRocm93IG5ldyBBY3Rpb25GdW5jdGlvbkFyZ3VtZW50RXJyb3IobmFtZSwgdmFsKTtcbn1cbiJdfQ==
|