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
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,83 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v1.14.2 (2021-05-13)
|
|
4
|
+
|
|
5
|
+
## Bug Fixes
|
|
6
|
+
|
|
7
|
+
* Fixed a bug that caused the `The "--quarantine-mode" option value is not a valid key-value pair` error
|
|
8
|
+
|
|
9
|
+
## v1.14.1 (2021-05-12)
|
|
10
|
+
|
|
11
|
+
## Bug Fixes
|
|
12
|
+
|
|
13
|
+
* Fixed a bug that caused TestCafe to hang during the execution of TestCafe Studio tests ([#5207](https://github.com/DevExpress/testcafe/issues/5207))
|
|
14
|
+
* Added a type definition for the `disableScreenshots` Runner option ([#5735](https://github.com/DevExpress/testcafe/issues/5735))
|
|
15
|
+
* Fixed a multi-window mode bug that caused TestCafe to launch an empty browser window and then hang ([#6132](https://github.com/DevExpress/testcafe/issues/6132))
|
|
16
|
+
* Fixed a bug that denied users access to iframes with `srcdoc` attributes ([#6033](https://github.com/DevExpress/testcafe/issues/6033))
|
|
17
|
+
* Fixed a bug that interfered with the loading of Word Online documents in Firefox ([testcafe-hammerhead#2287](https://github.com/DevExpress/testcafe-hammerhead/issues/2287))
|
|
18
|
+
|
|
19
|
+
## v1.14.0 (2021-4-7)
|
|
20
|
+
|
|
21
|
+
## Enhancements
|
|
22
|
+
|
|
23
|
+
### ⚙ Scroll Actions ([PR #6066](https://github.com/DevExpress/testcafe/pull/6066))
|
|
24
|
+
|
|
25
|
+
When TestCafe interacts with elements on the page, it scrolls the page automatically to reach those elements.
|
|
26
|
+
|
|
27
|
+
This release introduces actions that allow you to scroll webpage elements manually.
|
|
28
|
+
|
|
29
|
+
* [t.scroll](https://devexpress.github.io/testcafe/documentation/reference/test-api/testcontroller/scroll.html) - scrolls the element to a specified position
|
|
30
|
+
* [t.scrollBy](https://devexpress.github.io/testcafe/documentation/reference/test-api/testcontroller/scrollby.html) - scrolls the element by the specified number of pixels
|
|
31
|
+
* [t.scrollIntoView](https://devexpress.github.io/testcafe/documentation/reference/test-api/testcontroller/scrollintoview.html) - scrolls the element into view
|
|
32
|
+
|
|
33
|
+
You can use the `t.scroll` action to scroll an element to a position:
|
|
34
|
+
|
|
35
|
+
```js
|
|
36
|
+
import { Selector } from 'testcafe';
|
|
37
|
+
|
|
38
|
+
fixture`Scroll Action`
|
|
39
|
+
.page('http://example.com');
|
|
40
|
+
|
|
41
|
+
test('Scroll the container', async t => {
|
|
42
|
+
const container = Selector('#container');
|
|
43
|
+
|
|
44
|
+
await t
|
|
45
|
+
.scroll(container, 'bottomRight')
|
|
46
|
+
});
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
`t.scrollBy` allows you to scroll an element (or the webpage) by a set amount of pixels. The example below scrolls the webpage 200px up and 500px to the right:
|
|
50
|
+
|
|
51
|
+
```js
|
|
52
|
+
fixture`Scroll Action`
|
|
53
|
+
.page('http://example.com');
|
|
54
|
+
|
|
55
|
+
test('Scroll the webpage', async t => {
|
|
56
|
+
await t
|
|
57
|
+
.scrollBy(500, -200)
|
|
58
|
+
});
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Use `t.scrollIntoView` to scroll an element into view:
|
|
62
|
+
|
|
63
|
+
```js
|
|
64
|
+
import { Selector } from 'testcafe';
|
|
65
|
+
|
|
66
|
+
fixture `Scroll Actions`
|
|
67
|
+
.page `http://www.example.com/`;
|
|
68
|
+
|
|
69
|
+
test('Scroll element into view', async t => {
|
|
70
|
+
const target = Selector('#target')
|
|
71
|
+
|
|
72
|
+
await t
|
|
73
|
+
.scrollIntoView(target)
|
|
74
|
+
});
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Bug Fixes
|
|
78
|
+
|
|
79
|
+
* Fixed an error that caused [expect.contains](https://devexpress.github.io/testcafe/documentation/reference/test-api/testcontroller/expect/contains.html) assertions to display `undefined` instead of a string value in diffs ([#5473](https://github.com/DevExpress/testcafe/issues/5473))
|
|
80
|
+
|
|
3
81
|
## v1.13.0 (2021-03-22)
|
|
4
82
|
|
|
5
83
|
This release adds support for custom paths to the configuration file, support for Microsoft Edge on Linux systems, and multiple bugfixes.
|
|
@@ -8,12 +86,12 @@ This release adds support for custom paths to the configuration file, support fo
|
|
|
8
86
|
|
|
9
87
|
#### :gear: Specify Custom Path to the TestCafe Configuration File ([PR #6035](https://github.com/DevExpress/testcafe/pull/6035) by [@Chris-Greaves](https://github.com/Chris-Greaves))
|
|
10
88
|
|
|
11
|
-
TestCafe now allows you to specify a custom
|
|
89
|
+
TestCafe now allows you to specify a custom [configuration file](https://devexpress.github.io/testcafe/documentation/reference/configuration-file.html) path.
|
|
12
90
|
|
|
13
|
-
To set
|
|
91
|
+
To set this path, use one of the following options:
|
|
14
92
|
|
|
15
|
-
* the [--config-file CLI
|
|
16
|
-
* the [configFile
|
|
93
|
+
* the [--config-file CLI flag](https://devexpress.github.io/testcafe/documentation/reference/command-line-interface.html#--config-file-path)
|
|
94
|
+
* the [configFile parameter of the createTestCafe function](https://devexpress.github.io/testcafe/documentation/reference/testcafe-api/global/createtestcafe.html#options)
|
|
17
95
|
|
|
18
96
|
#### Add Support for Microsoft Edge on Linux ([PR testcafe-browser-tools/#210](https://github.com/DevExpress/testcafe-browser-tools/pull/210) by [@dcsaszar](https://github.com/dcsaszar))
|
|
19
97
|
|
|
@@ -25,7 +103,7 @@ testcafe edge tests/test.js
|
|
|
25
103
|
|
|
26
104
|
#### :gear: Deprecated the `t.setPageLoadTimeout` method ([PR #5979](https://github.com/DevExpress/testcafe/pull/5979))
|
|
27
105
|
|
|
28
|
-
Starting with v1.13.0, the [t.setPageLoadTimeout](
|
|
106
|
+
Starting with v1.13.0, the [t.setPageLoadTimeout](https://devexpress.github.io/testcafe/documentation/reference/test-api/testcontroller/setpageloadtimeout.html) method is deprecated. To set the page load timeout, use the new [test.timeouts](https://devexpress.github.io/testcafe/documentation/reference/test-api/test/timeouts.html) method.
|
|
29
107
|
|
|
30
108
|
```js
|
|
31
109
|
fixture`Setting Timeouts`
|
|
@@ -40,7 +118,7 @@ test
|
|
|
40
118
|
})
|
|
41
119
|
```
|
|
42
120
|
|
|
43
|
-
You can also use `test.timeouts` to set the [pageRequestTimeout](
|
|
121
|
+
You can also use `test.timeouts` to set the [pageRequestTimeout](https://devexpress.github.io/testcafe/documentation/reference/configuration-file.html#pagerequesttimeout) and [ajaxRequestTimeout](https://devexpress.github.io/testcafe/documentation/reference/configuration-file.html#ajaxrequesttimeout).
|
|
44
122
|
|
|
45
123
|
```js
|
|
46
124
|
fixture`Setting Timeouts`
|
|
@@ -203,7 +281,7 @@ You can enable this functionality with a command line, API, or configuration fil
|
|
|
203
281
|
testcafe chrome test.js --retry-test-pages
|
|
204
282
|
```
|
|
205
283
|
|
|
206
|
-
* the [createTestCafe](https://devexpress.github.io/testcafe/documentation/reference/testcafe-api/global/createtestcafe.
|
|
284
|
+
* the [createTestCafe](https://devexpress.github.io/testcafe/documentation/reference/testcafe-api/global/createtestcafe.html) function parameter
|
|
207
285
|
|
|
208
286
|
```js
|
|
209
287
|
const createTestCafe = require('testcafe');
|
|
@@ -238,7 +316,7 @@ You can enable this functionality with a command line, API, or configuration fil
|
|
|
238
316
|
* TestCafe proxy now correctly handles requests that are not permitted by the CORS policy ([testcafe-hammerhead/#1263](https://github.com/DevExpress/testcafe-hammerhead/issues/1263))
|
|
239
317
|
* Improved compatibility with test pages that use `with` statements ([testcafe-hammerhead/#2434](https://github.com/DevExpress/testcafe-hammerhead/issues/2434))
|
|
240
318
|
* TestCafe proxy can now properly parse statements that use a comma operator in `for..of` loops ([testcafe-hammerhead/#2573](https://github.com/DevExpress/testcafe-hammerhead/issues/2573))
|
|
241
|
-
* Fixed a bug where TestCafe would open a new window even if `preventDefault` is present in element's event handler ([testcafe-hammerhead/#2582](https://github.com/DevExpress/testcafe-hammerhead/pull/2582))
|
|
319
|
+
* Fixed a bug where TestCafe would open a new window even if `preventDefault` is present in element's event handler ([testcafe-hammerhead/#2582](https://github.com/DevExpress/testcafe-hammerhead/pull/2582))
|
|
242
320
|
|
|
243
321
|
### Vulnerability Fix ([PR #5843](https://github.com/DevExpress/testcafe/pull/5843), [PR testcafe-hammerhead#2531](https://github.com/DevExpress/testcafe-hammerhead/pull/2531))
|
|
244
322
|
|
|
@@ -3375,7 +3453,7 @@ The `t.takeScreenshot`, `t.resizeWindow`, `t.resizeWindowToFitDevice` and `t.max
|
|
|
3375
3453
|
|
|
3376
3454
|
The state of webpage elements can now be extended with custom properties.
|
|
3377
3455
|
|
|
3378
|
-
We have added the [
|
|
3456
|
+
We have added the [addCust.htmlOMProperties](https://devexpress.github.io/testcafe/documentation/test-api/selecting-page-elements/selectors.html#adding-custom-properties-to-element-state)
|
|
3379
3457
|
method to the selector, so that you can add properties to the element state like in the following example.
|
|
3380
3458
|
|
|
3381
3459
|
```js
|
|
@@ -3385,7 +3463,7 @@ fixture `My fixture`
|
|
|
3385
3463
|
.page `https://devexpress.github.io/testcafe/example/`;
|
|
3386
3464
|
|
|
3387
3465
|
test('Check Label HTML', async t => {
|
|
3388
|
-
const label = Selector('label').
|
|
3466
|
+
const label = Selector('label').addCust.htmlOMProperties({
|
|
3389
3467
|
innerHTML: el => el.innerHTML
|
|
3390
3468
|
});
|
|
3391
3469
|
|
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
The MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (C) 2012-2021 Developer Express Inc.
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in
|
|
13
|
-
all copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
-
THE SOFTWARE.
|
|
1
|
+
The MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2012-2021 Developer Express Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
package/README.md
CHANGED
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
<a href="https://
|
|
8
|
+
<a href="https://testcafe.io">
|
|
9
9
|
<img src="https://raw.githubusercontent.com/DevExpress/testcafe/master/media/testcafe-logo.svg?sanitize=true" alt="testcafe" />
|
|
10
10
|
</a>
|
|
11
11
|
</p>
|
|
12
12
|
|
|
13
13
|
<p align="center">
|
|
14
|
-
<a href="https://
|
|
15
|
-
<a href="https://
|
|
14
|
+
<a href="https://github.com/DevExpress/testcafe/commits/master"><img alt="Tests" src="https://img.shields.io/github/checks-status/DevExpress/testcafe/master?label=Tests"></a>
|
|
15
|
+
<a href="https://github.com/DevExpress/testcafe/actions/workflows/test-dependencies.yml"><img alt="Test Dependencies" src="https://github.com/DevExpress/testcafe/actions/workflows/test-dependencies.yml/badge.svg" /></a>
|
|
16
16
|
<a href="https://www.npmjs.com/package/testcafe"><img alt="NPM Version" src="https://img.shields.io/npm/v/testcafe.svg" data-canonical-src="https://img.shields.io/npm/v/testcafe.svg" style="max-width:100%;"></a>
|
|
17
17
|
</p>
|
|
18
18
|
|
|
@@ -21,14 +21,14 @@
|
|
|
21
21
|
</p>
|
|
22
22
|
|
|
23
23
|
<p align="center">
|
|
24
|
-
<a href="https://
|
|
25
|
-
<a href="https://
|
|
26
|
-
<a href="https://
|
|
27
|
-
<a href="https://
|
|
24
|
+
<a href="https://testcafe.io">Homepage</a>   •  
|
|
25
|
+
<a href="https://testcafe.io/documentation/402635/getting-started">Documentation</a>   •  
|
|
26
|
+
<a href="https://testcafe.io/402636/faq">FAQ</a>   •  
|
|
27
|
+
<a href="https://testcafe.io/support">Support</a>
|
|
28
28
|
</p>
|
|
29
29
|
|
|
30
|
-
* **Works on all popular environments**: TestCafe runs on Windows, MacOS, and Linux. It supports desktop, mobile, remote and cloud [browsers](https://
|
|
31
|
-
* **1 minute to set up**: You [do not need WebDriver](https://
|
|
30
|
+
* **Works on all popular environments**: TestCafe runs on Windows, MacOS, and Linux. It supports desktop, mobile, remote and cloud [browsers](https://testcafe.io/documentation/402828/guides/concepts/browsers#browser-support) (UI or headless).
|
|
31
|
+
* **1 minute to set up**: You [do not need WebDriver](https://testcafe.io/402636/faq#i-have-heard-that-testcafe-does-not-use-selenium-how-does-it-operate) or any other testing software. Install TestCafe with one command, and you are ready to test: `npm install -g testcafe`
|
|
32
32
|
* **Free and open source**: TestCafe is free to use under the [MIT license](https://github.com/DevExpress/testcafe/blob/master/LICENSE). [Plugins](#plugins) provide custom reports, integration with other tools, launching tests from IDE, etc. You can use the plugins made by the GitHub community or make your own.
|
|
33
33
|
|
|
34
34
|

|
|
@@ -67,7 +67,7 @@ See how it works in the [TestCafe Live repository](https://github.com/DevExpress
|
|
|
67
67
|
|
|
68
68
|
**Latest JS and TypeScript support**<br/>
|
|
69
69
|
TestCafe supports the latest JavaScript features, including ES2017 (for example, async/await).
|
|
70
|
-
You can also [use TypeScript](https://
|
|
70
|
+
You can also [use TypeScript](https://testcafe.io/documentation/402824/guides/concepts/typescript-and-coffeescript#typescript-support)
|
|
71
71
|
if you prefer a strongly typed language.
|
|
72
72
|
|
|
73
73
|
**Detects JS errors in your code**<br/>
|
|
@@ -80,9 +80,9 @@ TestCafe can open multiple instances of the same browser to run parallel
|
|
|
80
80
|
tests which decreases test execution time.
|
|
81
81
|
|
|
82
82
|
**PageObject pattern support**<br/>
|
|
83
|
-
The TestCafe's [Test API](https://
|
|
83
|
+
The TestCafe's [Test API](https://testcafe.io/documentation/402632/reference)
|
|
84
84
|
includes a high-level selector library, assertions, etc.
|
|
85
|
-
You can combine them to implement readable tests with the [PageObject pattern](https://
|
|
85
|
+
You can combine them to implement readable tests with the [PageObject pattern](https://testcafe.io/documentation/402826/guides/concepts/page-model).
|
|
86
86
|
|
|
87
87
|
```js
|
|
88
88
|
const macOSInput = Selector('.column').find('label').withText('MacOS').child('input');
|
|
@@ -108,7 +108,7 @@ Read the following article to learn how TestCafe Studio could fit into your work
|
|
|
108
108
|
|
|
109
109
|
### Installation
|
|
110
110
|
|
|
111
|
-
Ensure that [Node.js](https://nodejs.org/) ([Current or Active LTS](https://github.com/nodejs/Release#release-phases) is recommended, version
|
|
111
|
+
Ensure that [Node.js](https://nodejs.org/) ([Current or Active LTS](https://github.com/nodejs/Release#release-phases) is recommended, version 12 at minimum) and [npm](https://www.npmjs.com/) are installed on your computer before running it:
|
|
112
112
|
|
|
113
113
|
```sh
|
|
114
114
|
npm install -g testcafe
|
|
@@ -143,8 +143,8 @@ test('My first test', async t => {
|
|
|
143
143
|
### Running the Test
|
|
144
144
|
|
|
145
145
|
Call the following command in a command shell.
|
|
146
|
-
Specify the [target browser](https://
|
|
147
|
-
and [file path](https://
|
|
146
|
+
Specify the [target browser](https://testcafe.io/documentation/402639/reference/command-line-interface#browser-list)
|
|
147
|
+
and [file path](https://testcafe.io/documentation/402639/reference/command-line-interface#file-pathglob-pattern).
|
|
148
148
|
|
|
149
149
|
```sh
|
|
150
150
|
testcafe chrome test1.js
|
|
@@ -158,16 +158,16 @@ TestCafe opens the browser and starts executing the test.
|
|
|
158
158
|
|
|
159
159
|
### Viewing the Results
|
|
160
160
|
|
|
161
|
-
TestCafe outputs the results into a command shell by default. See [Reporters](https://
|
|
161
|
+
TestCafe outputs the results into a command shell by default. See [Reporters](https://testcafe.io/documentation/402825/guides/concepts/reporters)
|
|
162
162
|
for more information. You can also use [plugins](#plugins) to customize the reports.
|
|
163
163
|
|
|
164
|
-

|
|
165
165
|
|
|
166
|
-
Read the [Getting Started](https://
|
|
166
|
+
Read the [Getting Started](https://testcafe.io/documentation/402635/getting-started) page for a more detailed guide.
|
|
167
167
|
|
|
168
168
|
## Documentation
|
|
169
169
|
|
|
170
|
-
Go to our website for full [documentation](https://
|
|
170
|
+
Go to our website for full [documentation](https://testcafe.io/documentation/402635/getting-started) on TestCafe.
|
|
171
171
|
|
|
172
172
|
## Get Help
|
|
173
173
|
|
|
@@ -187,66 +187,70 @@ Read our [Contributing Guide](https://github.com/DevExpress/testcafe/blob/master
|
|
|
187
187
|
|
|
188
188
|
To create your own plugin for TestCafe, you can use these plugin generators:
|
|
189
189
|
|
|
190
|
-
* [Build a browser provider](https://
|
|
190
|
+
* [Build a browser provider](https://testcafe.io/documentation/402812/guides/extend-testcafe/browser-provider-plugin)
|
|
191
191
|
to set up tests on your on-premises server farm, to use a cloud testing platform, or to start your local browsers in a special way. Use this [Yeoman generator](https://www.npmjs.com/package/generator-testcafe-browser-provider) to write only a few lines of code.
|
|
192
|
-
* To [build a custom reporter](https://
|
|
192
|
+
* To [build a custom reporter](https://testcafe.io/documentation/402810/guides/extend-testcafe/reporter-plugin)
|
|
193
193
|
with your formatting and style, check out this [generator](https://www.npmjs.com/package/generator-testcafe-reporter).
|
|
194
194
|
|
|
195
195
|
If you want your plugin to be listed below, [send us a note in a Github issue](https://github.com/DevExpress/testcafe/issues/new).
|
|
196
196
|
|
|
197
197
|
Thank you to all the people who already contributed to TestCafe!
|
|
198
198
|
|
|
199
|
-
[<img alt="aha-oretama" src="https://
|
|
199
|
+
[<img alt="aha-oretama" src="https://avatars.githubusercontent.com/u/7259161?v=4&s=117" width="117">](https://github.com/aha-oretama) |[<img alt="ai" src="https://avatars.githubusercontent.com/u/19343?v=4&s=117" width="117">](https://github.com/ai) |[<img alt="aleks-pro" src="https://avatars.githubusercontent.com/u/14822473?v=4&s=117" width="117">](https://github.com/aleks-pro) |[<img alt="AlexanderMoiseev" src="https://avatars.githubusercontent.com/u/1498953?v=4&s=117" width="117">](https://github.com/AlexanderMoiseev) |[<img alt="AlexanderMoskovkin" src="https://avatars.githubusercontent.com/u/12047804?v=4&s=117" width="117">](https://github.com/AlexanderMoskovkin) |[<img alt="alexey-lin" src="https://avatars.githubusercontent.com/u/13483856?v=4&s=117" width="117">](https://github.com/alexey-lin) |
|
|
200
200
|
:---: |:---: |:---: |:---: |:---: |:---: |
|
|
201
201
|
[aha-oretama](https://github.com/aha-oretama) |[ai](https://github.com/ai) |[aleks-pro](https://github.com/aleks-pro) |[AlexanderMoiseev](https://github.com/AlexanderMoiseev) |[AlexanderMoskovkin](https://github.com/AlexanderMoskovkin) |[alexey-lin](https://github.com/alexey-lin) |
|
|
202
202
|
|
|
203
|
-
[<img alt="AlexKamaev" src="https://
|
|
203
|
+
[<img alt="AlexKamaev" src="https://avatars.githubusercontent.com/u/1678902?v=4&s=117" width="117">](https://github.com/AlexKamaev) |[<img alt="AlexSkorkin" src="https://avatars.githubusercontent.com/u/995726?v=4&s=117" width="117">](https://github.com/AlexSkorkin) |[<img alt="alexwybraniec" src="https://avatars.githubusercontent.com/u/521536?v=4&s=117" width="117">](https://github.com/alexwybraniec) |[<img alt="andrewbranch" src="https://avatars.githubusercontent.com/u/3277153?v=4&s=117" width="117">](https://github.com/andrewbranch) |[<img alt="AndreyBelym" src="https://avatars.githubusercontent.com/u/4479386?v=4&s=117" width="117">](https://github.com/AndreyBelym) |[<img alt="AndyWendt" src="https://avatars.githubusercontent.com/u/6130713?v=4&s=117" width="117">](https://github.com/AndyWendt) |
|
|
204
204
|
:---: |:---: |:---: |:---: |:---: |:---: |
|
|
205
205
|
[AlexKamaev](https://github.com/AlexKamaev) |[AlexSkorkin](https://github.com/AlexSkorkin) |[alexwybraniec](https://github.com/alexwybraniec) |[andrewbranch](https://github.com/andrewbranch) |[AndreyBelym](https://github.com/AndreyBelym) |[AndyWendt](https://github.com/AndyWendt) |
|
|
206
206
|
|
|
207
|
-
[<img alt="anthophobiac" src="https://
|
|
207
|
+
[<img alt="anthophobiac" src="https://avatars.githubusercontent.com/u/16448031?v=4&s=117" width="117">](https://github.com/anthophobiac) |[<img alt="arubtsov" src="https://avatars.githubusercontent.com/u/10169557?v=4&s=117" width="117">](https://github.com/arubtsov) |[<img alt="augustomezencio-hotmart" src="https://avatars.githubusercontent.com/u/25016353?v=4&s=117" width="117">](https://github.com/augustomezencio-hotmart) |[<img alt="bdwain" src="https://avatars.githubusercontent.com/u/3982094?v=4&s=117" width="117">](https://github.com/bdwain) |[<img alt="benmonro" src="https://avatars.githubusercontent.com/u/399236?v=4&s=117" width="117">](https://github.com/benmonro) |[<img alt="beyondcompute" src="https://avatars.githubusercontent.com/u/248055?v=4&s=117" width="117">](https://github.com/beyondcompute) |
|
|
208
208
|
:---: |:---: |:---: |:---: |:---: |:---: |
|
|
209
209
|
[anthophobiac](https://github.com/anthophobiac) |[arubtsov](https://github.com/arubtsov) |[augustomezencio-hotmart](https://github.com/augustomezencio-hotmart) |[bdwain](https://github.com/bdwain) |[benmonro](https://github.com/benmonro) |[beyondcompute](https://github.com/beyondcompute) |
|
|
210
210
|
|
|
211
|
-
[<img alt="bill-looby-i" src="https://
|
|
211
|
+
[<img alt="bill-looby-i" src="https://avatars.githubusercontent.com/u/51128939?v=4&s=117" width="117">](https://github.com/bill-looby-i) |[<img alt="bsmithb2" src="https://avatars.githubusercontent.com/u/1773789?v=4&s=117" width="117">](https://github.com/bsmithb2) |[<img alt="caseyWebb" src="https://avatars.githubusercontent.com/u/5419074?v=4&s=117" width="117">](https://github.com/caseyWebb) |[<img alt="cdrini" src="https://avatars.githubusercontent.com/u/6251786?v=4&s=117" width="117">](https://github.com/cdrini) |[<img alt="cgfarmer4" src="https://avatars.githubusercontent.com/u/336449?v=4&s=117" width="117">](https://github.com/cgfarmer4) |[<img alt="Chris-Greaves" src="https://avatars.githubusercontent.com/u/28542943?v=4&s=117" width="117">](https://github.com/Chris-Greaves) |
|
|
212
212
|
:---: |:---: |:---: |:---: |:---: |:---: |
|
|
213
|
-
[bill-looby-i](https://github.com/bill-looby-i) |[bsmithb2](https://github.com/bsmithb2) |[caseyWebb](https://github.com/caseyWebb) |[cdrini](https://github.com/cdrini) |[cgfarmer4](https://github.com/cgfarmer4) |[
|
|
213
|
+
[bill-looby-i](https://github.com/bill-looby-i) |[bsmithb2](https://github.com/bsmithb2) |[caseyWebb](https://github.com/caseyWebb) |[cdrini](https://github.com/cdrini) |[cgfarmer4](https://github.com/cgfarmer4) |[Chris-Greaves](https://github.com/Chris-Greaves) |
|
|
214
214
|
|
|
215
|
-
[<img alt="
|
|
215
|
+
[<img alt="churkin" src="https://avatars.githubusercontent.com/u/5182202?v=4&s=117" width="117">](https://github.com/churkin) |[<img alt="dej611" src="https://avatars.githubusercontent.com/u/924948?v=4&s=117" width="117">](https://github.com/dej611) |[<img alt="DIRECTcut" src="https://avatars.githubusercontent.com/u/49588154?v=4&s=117" width="117">](https://github.com/DIRECTcut) |[<img alt="Dmitry-Ostashev" src="https://avatars.githubusercontent.com/u/24777868?v=4&s=117" width="117">](https://github.com/Dmitry-Ostashev) |[<img alt="ericyd" src="https://avatars.githubusercontent.com/u/8379268?v=4&s=117" width="117">](https://github.com/ericyd) |[<img alt="Farfurix" src="https://avatars.githubusercontent.com/u/30019338?v=4&s=117" width="117">](https://github.com/Farfurix) |
|
|
216
216
|
:---: |:---: |:---: |:---: |:---: |:---: |
|
|
217
|
-
[dej611](https://github.com/dej611) |[DIRECTcut](https://github.com/DIRECTcut) |[Dmitry-Ostashev](https://github.com/Dmitry-Ostashev) |[ericyd](https://github.com/ericyd) |[Farfurix](https://github.com/Farfurix) |
|
|
217
|
+
[churkin](https://github.com/churkin) |[dej611](https://github.com/dej611) |[DIRECTcut](https://github.com/DIRECTcut) |[Dmitry-Ostashev](https://github.com/Dmitry-Ostashev) |[ericyd](https://github.com/ericyd) |[Farfurix](https://github.com/Farfurix) |
|
|
218
218
|
|
|
219
|
-
[<img alt="
|
|
219
|
+
[<img alt="GeoffreyBooth" src="https://avatars.githubusercontent.com/u/456802?v=4&s=117" width="117">](https://github.com/GeoffreyBooth) |[<img alt="helen-dikareva" src="https://avatars.githubusercontent.com/u/12034551?v=4&s=117" width="117">](https://github.com/helen-dikareva) |[<img alt="honsq90" src="https://avatars.githubusercontent.com/u/1791439?v=4&s=117" width="117">](https://github.com/honsq90) |[<img alt="infctr" src="https://avatars.githubusercontent.com/u/15550153?v=4&s=117" width="117">](https://github.com/infctr) |[<img alt="inikulin" src="https://avatars.githubusercontent.com/u/453071?v=4&s=117" width="117">](https://github.com/inikulin) |[<img alt="Ivan-Katovich" src="https://avatars.githubusercontent.com/u/7858279?v=4&s=117" width="117">](https://github.com/Ivan-Katovich) |
|
|
220
220
|
:---: |:---: |:---: |:---: |:---: |:---: |
|
|
221
|
-
[helen-dikareva](https://github.com/helen-dikareva) |[honsq90](https://github.com/honsq90) |[infctr](https://github.com/infctr) |[inikulin](https://github.com/inikulin) |[Ivan-Katovich](https://github.com/Ivan-Katovich) |
|
|
221
|
+
[GeoffreyBooth](https://github.com/GeoffreyBooth) |[helen-dikareva](https://github.com/helen-dikareva) |[honsq90](https://github.com/honsq90) |[infctr](https://github.com/infctr) |[inikulin](https://github.com/inikulin) |[Ivan-Katovich](https://github.com/Ivan-Katovich) |
|
|
222
222
|
|
|
223
|
-
[<img alt="
|
|
223
|
+
[<img alt="jamesgeorge007" src="https://avatars.githubusercontent.com/u/25279263?v=4&s=117" width="117">](https://github.com/jamesgeorge007) |[<img alt="jaypea" src="https://avatars.githubusercontent.com/u/367199?v=4&s=117" width="117">](https://github.com/jaypea) |[<img alt="kanhaiya15" src="https://avatars.githubusercontent.com/u/38152453?v=4&s=117" width="117">](https://github.com/kanhaiya15) |[<img alt="kirovboris" src="https://avatars.githubusercontent.com/u/3633477?v=4&s=117" width="117">](https://github.com/kirovboris) |[<img alt="kubejm" src="https://avatars.githubusercontent.com/u/8680565?v=4&s=117" width="117">](https://github.com/kubejm) |[<img alt="LavrovArtem" src="https://avatars.githubusercontent.com/u/5373460?v=4&s=117" width="117">](https://github.com/LavrovArtem) |
|
|
224
224
|
:---: |:---: |:---: |:---: |:---: |:---: |
|
|
225
|
-
[
|
|
225
|
+
[jamesgeorge007](https://github.com/jamesgeorge007) |[jaypea](https://github.com/jaypea) |[kanhaiya15](https://github.com/kanhaiya15) |[kirovboris](https://github.com/kirovboris) |[kubejm](https://github.com/kubejm) |[LavrovArtem](https://github.com/LavrovArtem) |
|
|
226
226
|
|
|
227
|
-
[<img alt="
|
|
227
|
+
[<img alt="link89" src="https://avatars.githubusercontent.com/u/3314130?v=4&s=117" width="117">](https://github.com/link89) |[<img alt="lzxb" src="https://avatars.githubusercontent.com/u/8424643?v=4&s=117" width="117">](https://github.com/lzxb) |[<img alt="macdonaldr93" src="https://avatars.githubusercontent.com/u/5184848?v=4&s=117" width="117">](https://github.com/macdonaldr93) |[<img alt="MargaritaLoseva" src="https://avatars.githubusercontent.com/u/12034505?v=4&s=117" width="117">](https://github.com/MargaritaLoseva) |[<img alt="Marketionist" src="https://avatars.githubusercontent.com/u/534603?v=4&s=117" width="117">](https://github.com/Marketionist) |[<img alt="MatthewNielsen27" src="https://avatars.githubusercontent.com/u/35040439?v=4&s=117" width="117">](https://github.com/MatthewNielsen27) |
|
|
228
228
|
:---: |:---: |:---: |:---: |:---: |:---: |
|
|
229
|
-
[
|
|
229
|
+
[link89](https://github.com/link89) |[lzxb](https://github.com/lzxb) |[macdonaldr93](https://github.com/macdonaldr93) |[MargaritaLoseva](https://github.com/MargaritaLoseva) |[Marketionist](https://github.com/Marketionist) |[MatthewNielsen27](https://github.com/MatthewNielsen27) |
|
|
230
230
|
|
|
231
|
-
[<img alt="
|
|
231
|
+
[<img alt="mattmanske" src="https://avatars.githubusercontent.com/u/2078566?v=4&s=117" width="117">](https://github.com/mattmanske) |[<img alt="mcjim" src="https://avatars.githubusercontent.com/u/485440?v=4&s=117" width="117">](https://github.com/mcjim) |[<img alt="miherlosev" src="https://avatars.githubusercontent.com/u/4133518?v=4&s=117" width="117">](https://github.com/miherlosev) |[<img alt="morfey13" src="https://avatars.githubusercontent.com/u/2048346?v=4&s=117" width="117">](https://github.com/morfey13) |[<img alt="mostlyfabulous" src="https://avatars.githubusercontent.com/u/15062048?v=4&s=117" width="117">](https://github.com/mostlyfabulous) |[<img alt="murajun1978" src="https://avatars.githubusercontent.com/u/911903?v=4&s=117" width="117">](https://github.com/murajun1978) |
|
|
232
232
|
:---: |:---: |:---: |:---: |:---: |:---: |
|
|
233
|
-
[
|
|
233
|
+
[mattmanske](https://github.com/mattmanske) |[mcjim](https://github.com/mcjim) |[miherlosev](https://github.com/miherlosev) |[morfey13](https://github.com/morfey13) |[mostlyfabulous](https://github.com/mostlyfabulous) |[murajun1978](https://github.com/murajun1978) |
|
|
234
234
|
|
|
235
|
-
[<img alt="
|
|
235
|
+
[<img alt="NiavlysB" src="https://avatars.githubusercontent.com/u/3757523?v=4&s=117" width="117">](https://github.com/NiavlysB) |[<img alt="NickCis" src="https://avatars.githubusercontent.com/u/174561?v=4&s=117" width="117">](https://github.com/NickCis) |[<img alt="Nuarat" src="https://avatars.githubusercontent.com/u/11683678?v=4&s=117" width="117">](https://github.com/Nuarat) |[<img alt="Ogurecher" src="https://avatars.githubusercontent.com/u/28919867?v=4&s=117" width="117">](https://github.com/Ogurecher) |[<img alt="pietrovich" src="https://avatars.githubusercontent.com/u/1728613?v=4&s=117" width="117">](https://github.com/pietrovich) |[<img alt="radarhere" src="https://avatars.githubusercontent.com/u/3112309?v=4&s=117" width="117">](https://github.com/radarhere) |
|
|
236
236
|
:---: |:---: |:---: |:---: |:---: |:---: |
|
|
237
|
-
[
|
|
237
|
+
[NiavlysB](https://github.com/NiavlysB) |[NickCis](https://github.com/NickCis) |[Nuarat](https://github.com/Nuarat) |[Ogurecher](https://github.com/Ogurecher) |[pietrovich](https://github.com/pietrovich) |[radarhere](https://github.com/radarhere) |
|
|
238
238
|
|
|
239
|
-
[<img alt="
|
|
239
|
+
[<img alt="raspo" src="https://avatars.githubusercontent.com/u/927264?v=4&s=117" width="117">](https://github.com/raspo) |[<img alt="rbardini" src="https://avatars.githubusercontent.com/u/874370?v=4&s=117" width="117">](https://github.com/rbardini) |[<img alt="renancouto" src="https://avatars.githubusercontent.com/u/230893?v=4&s=117" width="117">](https://github.com/renancouto) |[<img alt="rueyaa332266" src="https://avatars.githubusercontent.com/u/8298718?v=4&s=117" width="117">](https://github.com/rueyaa332266) |[<img alt="sgrillon14" src="https://avatars.githubusercontent.com/u/5530550?v=4&s=117" width="117">](https://github.com/sgrillon14) |[<img alt="smockle" src="https://avatars.githubusercontent.com/u/3104489?v=4&s=117" width="117">](https://github.com/smockle) |
|
|
240
240
|
:---: |:---: |:---: |:---: |:---: |:---: |
|
|
241
|
-
[
|
|
241
|
+
[raspo](https://github.com/raspo) |[rbardini](https://github.com/rbardini) |[renancouto](https://github.com/renancouto) |[rueyaa332266](https://github.com/rueyaa332266) |[sgrillon14](https://github.com/sgrillon14) |[smockle](https://github.com/smockle) |
|
|
242
242
|
|
|
243
|
-
[<img alt="
|
|
243
|
+
[<img alt="stefanschenk" src="https://avatars.githubusercontent.com/u/12391671?v=4&s=117" width="117">](https://github.com/stefanschenk) |[<img alt="superroma" src="https://avatars.githubusercontent.com/u/8553464?v=4&s=117" width="117">](https://github.com/superroma) |[<img alt="theghostbel" src="https://avatars.githubusercontent.com/u/482899?v=4&s=117" width="117">](https://github.com/theghostbel) |[<img alt="titerman" src="https://avatars.githubusercontent.com/u/43554315?v=4&s=117" width="117">](https://github.com/titerman) |[<img alt="tobiasbueschel" src="https://avatars.githubusercontent.com/u/13087421?v=4&s=117" width="117">](https://github.com/tobiasbueschel) |[<img alt="varunkumar" src="https://avatars.githubusercontent.com/u/509433?v=4&s=117" width="117">](https://github.com/varunkumar) |
|
|
244
244
|
:---: |:---: |:---: |:---: |:---: |:---: |
|
|
245
|
-
[
|
|
245
|
+
[stefanschenk](https://github.com/stefanschenk) |[superroma](https://github.com/superroma) |[theghostbel](https://github.com/theghostbel) |[titerman](https://github.com/titerman) |[tobiasbueschel](https://github.com/tobiasbueschel) |[varunkumar](https://github.com/varunkumar) |
|
|
246
246
|
|
|
247
|
-
[<img alt="
|
|
247
|
+
[<img alt="VasilyStrelyaev" src="https://avatars.githubusercontent.com/u/11459924?v=4&s=117" width="117">](https://github.com/VasilyStrelyaev) |[<img alt="vitalics" src="https://avatars.githubusercontent.com/u/8816260?v=4&s=117" width="117">](https://github.com/vitalics) |[<img alt="Vla8islav" src="https://avatars.githubusercontent.com/u/1637557?v=4&s=117" width="117">](https://github.com/Vla8islav) |[<img alt="wentwrong" src="https://avatars.githubusercontent.com/u/26363017?v=4&s=117" width="117">](https://github.com/wentwrong) |[<img alt="intermike" src="https://avatars0.githubusercontent.com/u/10540148?v=4&s=117" width="117">](https://github.com/intermike) |[<img alt="DevSide" src="https://avatars2.githubusercontent.com/u/6873926?v=4&s=117" width="117">](https://github.com/DevSide) |
|
|
248
248
|
:---: |:---: |:---: |:---: |:---: |:---: |
|
|
249
|
-
[
|
|
249
|
+
[VasilyStrelyaev](https://github.com/VasilyStrelyaev) |[vitalics](https://github.com/vitalics) |[Vla8islav](https://github.com/Vla8islav) |[wentwrong](https://github.com/wentwrong) |[intermike](https://github.com/intermike) |[DevSide](https://github.com/DevSide) |
|
|
250
|
+
|
|
251
|
+
[<img alt="b12031106" src="https://avatars1.githubusercontent.com/u/2063566?v=4&s=117" width="117">](https://github.com/b12031106) |[<img alt="tomashanacek" src="https://avatars2.githubusercontent.com/u/1244486?v=4&s=117" width="117">](https://github.com/tomashanacek) |[<img alt="danielroe" src="https://avatars1.githubusercontent.com/u/28706372?v=4&s=117" width="117">](https://github.com/danielroe) |
|
|
252
|
+
:---: |:---: |:---: |
|
|
253
|
+
[b12031106](https://github.com/b12031106) |[tomashanacek](https://github.com/tomashanacek) |[danielroe](https://github.com/danielroe) |
|
|
250
254
|
|
|
251
255
|
## Plugins
|
|
252
256
|
|
|
@@ -311,14 +315,14 @@ TestCafe developers and community members made these plugins:
|
|
|
311
315
|
|
|
312
316
|
## Different Versions of TestCafe
|
|
313
317
|
|
|
314
|
-
| | [TestCafe](https://
|
|
318
|
+
| | [TestCafe](https://testcafe.io) | [TestCafe Studio](https://www.devexpress.com/products/testcafestudio/?utm_source=github.com&utm_medium=referral&utm_campaign=tc-gh-diff) |
|
|
315
319
|
| ------ |:-------------------------------------------------:|:-----------------------------------------------------------------------:|
|
|
316
320
|
| No need for WebDriver, browser plugins or other tools | ✓ | ✓ |
|
|
317
321
|
| Cross-platform and cross-browser out of the box | ✓ | ✓ |
|
|
318
322
|
| Write tests in the latest JavaScript or TypeScript | ✓ | ✓ |
|
|
319
|
-
| Clear and flexible [API](https://
|
|
320
|
-
| Stable tests due to the [Smart Assertion Query Mechanism](https://
|
|
321
|
-
| Tests run fast due to intelligent [Automatic Waiting Mechanism](https://
|
|
323
|
+
| Clear and flexible [API](https://testcafe.io/documentation/402632/reference) supports ES6 and [PageModel pattern](https://testcafe.io/documentation/402826/guides/concepts/page-model) | ✓ | ✓ |
|
|
324
|
+
| Stable tests due to the [Smart Assertion Query Mechanism](https://testcafe.io/documentation/402837/guides/basic-guides/assert#smart-assertion-query-mechanism) | ✓ | ✓ |
|
|
325
|
+
| Tests run fast due to intelligent [Automatic Waiting Mechanism](https://testcafe.io/documentation/402827/guides/concepts/built-in-wait-mechanisms) and [Concurrent Test Execution](https://testcafe.io/documentation/402830/guides/basic-guides/run-tests#run-tests-concurrently) | ✓ | ✓ |
|
|
322
326
|
| Custom reporter plugins | ✓ | ✓ |
|
|
323
327
|
| Use third-party Node.js modules in test scripts | ✓ | ✓ |
|
|
324
328
|
| Integration with popular CI systems | ✓ | ✓\* |
|
|
File without changes
|