UNPKG

25.7 kBMarkdownView Raw
1<p align="center">
2 <a href="https://www.devexpress.com/products/testcafestudio/?utm_source=github.com&utm_medium=referral&utm_campaign=tc-gh-banner">
3 <img src="https://raw.github.com/DevExpress/testcafe/master/media/testcafe-studio-banner.png" alt="testcafe-studio" />
4 </a>
5</p>
6
7<p align="center">
8 <a href="https://devexpress.github.io/testcafe">
9 <img src="https://raw.githubusercontent.com/DevExpress/testcafe/master/media/testcafe-logo.svg?sanitize=true" alt="testcafe" />
10 </a>
11</p>
12
13<p align="center">
14<a href="https://ci.appveyor.com/project/DevExpress/testcafe"><img alt="Functional Windows desktop" src="https://ci.appveyor.com/api/projects/status/ftelkyuiji8lyadf?svg=true"></a>
15<a href="https://travis-ci.org/DevExpress/testcafe"><img alt="All Travis tasks (server, client, functional: mobile, macOS, Edge)" src="https://travis-ci.org/DevExpress/testcafe.svg"></a>
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</p>
18
19<p align="center">
20<i>A Node.js tool to automate end-to-end web testing.<br/>Write tests in JS or TypeScript, run them and view results.</i>
21</p>
22
23<p align="center">
24 <a href="https://devexpress.github.io/testcafe/">Homepage</a> &nbsp&nbsp•&nbsp&nbsp
25 <a href="https://devexpress.github.io/testcafe/documentation/getting-started/">Documentation</a> &nbsp&nbsp•&nbsp&nbsp
26 <a href="https://devexpress.github.io/testcafe/faq/">FAQ</a> &nbsp&nbsp•&nbsp&nbsp
27 <a href="https://devexpress.github.io/testcafe/support/">Support</a>
28</p>
29
30* **Works on all popular environments**: TestCafe runs on Windows, MacOS, and Linux. It supports desktop, mobile, remote and cloud [browsers](https://devexpress.github.io/testcafe/documentation/using-testcafe/common-concepts/browsers/browser-support.html) (UI or headless).
31* **1 minute to set up**: You [do not need WebDriver](https://devexpress.github.io/testcafe/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* **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
34![Install TestCafe and Run a Test](https://raw.githubusercontent.com/DevExpress/testcafe/master/media/install-and-run-test.gif)
35
36<p align="center">
37<i>Running a sample test in Safari</i>
38</p>
39
40## Table of contents
41
42* [Features](#features)
43* [TestCafe Studio: IDE for End-to-End Web Testing](#testcafe-studio-ide-for-end-to-end-web-testing)
44* [Getting Started](#getting-started)
45* [Documentation](#documentation)
46* [Get Help](#get-help)
47* [Issue Tracker](#issue-tracker)
48* [Stay in Touch](#stay-in-touch)
49* [Contributing](#contributing)
50* [Plugins](#plugins)
51* [Different Versions of TestCafe](#different-versions-of-testcafe)
52* [Badge](#badge)
53* [License](#license)
54* [Creators](#creators)
55
56## Features
57
58**Stable tests and no manual timeouts**<br/>
59TestCafe automatically waits for page loads and XHRs before the test starts and after each action.
60It also features smart test actions and assertions that wait for page elements to appear.
61You can change the maximum wait time.
62If elements load faster, tests skip the timeout and continue.
63
64**Rapid test development tool**<br/>
65Changes in test code immediately restart the test, and you see the results instantly.<br/>
66See how it works in the [TestCafe Live repository](https://github.com/DevExpress/testcafe-live).
67
68**Latest JS and TypeScript support**<br/>
69TestCafe supports the latest JavaScript features, including ES2017 (for example, async/await).
70You can also [use TypeScript](https://devexpress.github.io/testcafe/documentation/test-api/typescript-support.html)
71if you prefer a strongly typed language.
72
73**Detects JS errors in your code**<br/>
74TestCafe reports JS errors that it finds on the webpage.
75Tests automatically fail because of that.
76However, you can disable this.
77
78**Concurrent tests launch**<br/>
79TestCafe can open multiple instances of the same browser to run parallel
80tests which decreases test execution time.
81
82**PageObject pattern support**<br/>
83The TestCafe's [Test API](https://devexpress.github.io/testcafe/documentation/test-api/)
84includes a high-level selector library, assertions, etc.
85You can combine them to implement readable tests with the [PageObject pattern](https://devexpress.github.io/testcafe/documentation/recipes/using-page-model.html).
86
87```js
88const macOSInput = Selector('.column').find('label').withText('MacOS').child('input');
89```
90
91**Easy to include in a continuous integration system**<br/>
92You can run TestCafe from a console, and its reports can be viewed in a CI system's interface
93(TeamCity, Jenkins, Travis & etc.)
94
95## TestCafe Studio: IDE for End-to-End Web Testing
96
97TestCafe works great for JavaScript developers, but at some point you will need to delegate testing tasks to your Q&A department. If that's the case and you are looking for a codeless way to record and maintain tests compatible with your existing infrastructure, check out [TestCafe Studio](https://www.devexpress.com/products/testcafestudio/?utm_source=github.com&utm_medium=referral&utm_campaign=tc-gh-ide) - a testing IDE built on top of the open-source TestCafe.
98
99Read the following article to learn how TestCafe Studio could fit into your workflow: [What's Better than TestCafe? TestCafe Studio](https://www.devexpress.com/products/testcafestudio/qa-end-to-end-web-testing.xml).
100
101![Get Started with TestCafe Studio](https://raw.githubusercontent.com/DevExpress/testcafe/master/media/testcafe-studio-get-started.gif)
102
103<p align="center">
104<i>Record and Run a Test in TestCafe Studio</i>
105</p>
106
107## Getting Started
108
109### Installation
110
111Ensure that [Node.js](https://nodejs.org/) (version 6 or newer) and [npm](https://www.npmjs.com/) are installed on your computer before running it:
112
113```sh
114npm install -g testcafe
115```
116
117### Creating the Test
118
119As an example, we are going to test the [https://devexpress.github.io/testcafe/example](https://devexpress.github.io/testcafe/example) page.
120
121Create a `.js` or `.ts` file on your computer.
122Note that it needs to have a specific structure: tests must be organized into fixtures.
123You can paste the following code to see the test in action:
124
125```js
126import { Selector } from 'testcafe'; // first import testcafe selectors
127
128fixture `Getting Started`// declare the fixture
129 .page `https://devexpress.github.io/testcafe/example`; // specify the start page
130
131
132//then create a test and place your code there
133test('My first test', async t => {
134 await t
135 .typeText('#developer-name', 'John Smith')
136 .click('#submit-button')
137
138 // Use the assertion to check if the actual header text is equal to the expected one
139 .expect(Selector('#article-header').innerText).eql('Thank you, John Smith!');
140});
141```
142
143### Running the Test
144
145Call the following command in a command shell.
146Specify the [target browser](https://devexpress.github.io/testcafe/documentation/using-testcafe/command-line-interface.html#browser-list)
147and [file path](https://devexpress.github.io/testcafe/documentation/using-testcafe/command-line-interface.html#file-pathglob-pattern).
148
149```sh
150testcafe chrome test1.js
151```
152
153TestCafe opens the browser and starts executing the test.
154
155> Important! Make sure to stay in the browser tab that is running tests.
156> Do not minimize the browser window. Tests are not guaranteed to execute correctly
157> in inactive tabs and minimized browser windows because they switch to a lower resource consumption mode.
158
159### Viewing the Results
160
161TestCafe outputs the results into a command shell by default. See [Reporters](https://devexpress.github.io/testcafe/documentation/using-testcafe/common-concepts/reporters.html)
162for more information. You can also use [plugins](#plugins) to customize the reports.
163
164![Test Report](docs/articles/images/report.png)
165
166Read the [Getting Started](https://devexpress.github.io/testcafe/documentation/getting-started/) page for a more detailed guide.
167
168## Documentation
169
170Go to our website for full [documentation](https://devexpress.github.io/testcafe/documentation/getting-started/) on TestCafe.
171
172## Get Help
173
174Join the TestCafe community on Stack Overflow to get help. Ask and answer [questions with the TestCafe tag](https://stackoverflow.com/questions/tagged/testcafe).
175
176## Issue Tracker
177
178Use our GitHub issues page to [report bugs](https://github.com/DevExpress/testcafe/issues/new?template=bug-report.md) and [suggest improvements](https://github.com/DevExpress/testcafe/issues/new?template=feature_request.md).
179
180## Stay in Touch
181
182Follow us on [Twitter](https://twitter.com/DXTestCafe). We post TestCafe news and updates, several times a week.
183
184## Contributing
185
186Read our [Contributing Guide](https://github.com/DevExpress/testcafe/blob/master/CONTRIBUTING.md) to learn how to contribute to the project.
187
188To create your own plugin for TestCafe, you can use these plugin generators:
189
190* [Build a browser provider](https://devexpress.github.io/testcafe/documentation/extending-testcafe/browser-provider-plugin/)
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://devexpress.github.io/testcafe/documentation/extending-testcafe/reporter-plugin/)
193 with your formatting and style, check out this [generator](https://www.npmjs.com/package/generator-testcafe-reporter).
194
195If you want your plugin to be listed below, [send us a note in a Github issue](https://github.com/DevExpress/testcafe/issues/new).
196
197Thank you to all the people who already contributed to TestCafe!
198
199[<img alt="Nuarat" src="https://avatars0.githubusercontent.com/u/11683678?v=4&s=117" width="117">](https://github.com/Nuarat) |[<img alt="Farfurix" src="https://avatars2.githubusercontent.com/u/30019338?v=4&s=117" width="117">](https://github.com/Farfurix) |[<img alt="aleks-pro" src="https://avatars1.githubusercontent.com/u/14822473?v=4&s=117" width="117">](https://github.com/aleks-pro) |[<img alt="ericyd" src="https://avatars2.githubusercontent.com/u/8379268?v=4&s=117" width="117">](https://github.com/ericyd) |[<img alt="NickCis" src="https://avatars0.githubusercontent.com/u/174561?v=4&s=117" width="117">](https://github.com/NickCis) |[<img alt="andrewbranch" src="https://avatars0.githubusercontent.com/u/3277153?v=4&s=117" width="117">](https://github.com/andrewbranch) |
200:---: |:---: |:---: |:---: |:---: |:---: |
201[Nuarat](https://github.com/Nuarat) |[Farfurix](https://github.com/Farfurix) |[aleks-pro](https://github.com/aleks-pro) |[ericyd](https://github.com/ericyd) |[NickCis](https://github.com/NickCis) |[andrewbranch](https://github.com/andrewbranch) |
202
203[<img alt="radarhere" src="https://avatars2.githubusercontent.com/u/3112309?v=4&s=117" width="117">](https://github.com/radarhere) |[<img alt="ai" src="https://avatars1.githubusercontent.com/u/19343?v=4&s=117" width="117">](https://github.com/ai) |[<img alt="AndyWendt" src="https://avatars0.githubusercontent.com/u/6130713?v=4&s=117" width="117">](https://github.com/AndyWendt) |[<img alt="arubtsov" src="https://avatars0.githubusercontent.com/u/10169557?v=4&s=117" width="117">](https://github.com/arubtsov) |[<img alt="lzxb" src="https://avatars0.githubusercontent.com/u/8424643?v=4&s=117" width="117">](https://github.com/lzxb) |[<img alt="caseyWebb" src="https://avatars3.githubusercontent.com/u/5419074?v=4&s=117" width="117">](https://github.com/caseyWebb) |
204:---: |:---: |:---: |:---: |:---: |:---: |
205[radarhere](https://github.com/radarhere) |[ai](https://github.com/ai) |[AndyWendt](https://github.com/AndyWendt) |[arubtsov](https://github.com/arubtsov) |[lzxb](https://github.com/lzxb) |[caseyWebb](https://github.com/caseyWebb) |
206
207[<img alt="smockle" src="https://avatars1.githubusercontent.com/u/3104489?v=4&s=117" width="117">](https://github.com/smockle) |[<img alt="beyondcompute" src="https://avatars0.githubusercontent.com/u/248055?v=4&s=117" width="117">](https://github.com/beyondcompute) |[<img alt="GeoffreyBooth" src="https://avatars2.githubusercontent.com/u/456802?v=4&s=117" width="117">](https://github.com/GeoffreyBooth) |[<img alt="mcjim" src="https://avatars0.githubusercontent.com/u/485440?v=4&s=117" width="117">](https://github.com/mcjim) |[<img alt="dej611" src="https://avatars1.githubusercontent.com/u/924948?v=4&s=117" width="117">](https://github.com/dej611) |[<img alt="MatthewNielsen27" src="https://avatars2.githubusercontent.com/u/35040439?v=4&s=117" width="117">](https://github.com/MatthewNielsen27) |
208:---: |:---: |:---: |:---: |:---: |:---: |
209[smockle](https://github.com/smockle) |[beyondcompute](https://github.com/beyondcompute) |[GeoffreyBooth](https://github.com/GeoffreyBooth) |[mcjim](https://github.com/mcjim) |[dej611](https://github.com/dej611) |[MatthewNielsen27](https://github.com/MatthewNielsen27) |
210
211[<img alt="renancouto" src="https://avatars0.githubusercontent.com/u/230893?v=4&s=117" width="117">](https://github.com/renancouto) |[<img alt="honsq90" src="https://avatars3.githubusercontent.com/u/1791439?v=4&s=117" width="117">](https://github.com/honsq90) |[<img alt="sgrillon14" src="https://avatars0.githubusercontent.com/u/5530550?v=4&s=117" width="117">](https://github.com/sgrillon14) |[<img alt="tobiasbueschel" src="https://avatars3.githubusercontent.com/u/13087421?v=4&s=117" width="117">](https://github.com/tobiasbueschel) |[<img alt="raspo" src="https://avatars2.githubusercontent.com/u/927264?v=4&s=117" width="117">](https://github.com/raspo) |[<img alt="varunkumar" src="https://avatars1.githubusercontent.com/u/509433?v=4&s=117" width="117">](https://github.com/varunkumar) |
212:---: |:---: |:---: |:---: |:---: |:---: |
213[renancouto](https://github.com/renancouto) |[honsq90](https://github.com/honsq90) |[sgrillon14](https://github.com/sgrillon14) |[tobiasbueschel](https://github.com/tobiasbueschel) |[raspo](https://github.com/raspo) |[varunkumar](https://github.com/varunkumar) |
214
215[<img alt="theghostbel" src="https://avatars2.githubusercontent.com/u/482899?v=4&s=117" width="117">](https://github.com/theghostbel) |[<img alt="vitalics" src="https://avatars2.githubusercontent.com/u/8816260?v=4&s=117" width="117">](https://github.com/vitalics) |[<img alt="aha-oretama" src="https://avatars0.githubusercontent.com/u/7259161?v=4&s=117" width="117">](https://github.com/aha-oretama) |[<img alt="bsmithb2" src="https://avatars2.githubusercontent.com/u/1773789?v=4&s=117" width="117">](https://github.com/bsmithb2) |[<img alt="link89" src="https://avatars2.githubusercontent.com/u/3314130?v=4&s=117" width="117">](https://github.com/link89) |[<img alt="murajun1978" src="https://avatars3.githubusercontent.com/u/911903?v=4&s=117" width="117">](https://github.com/murajun1978) |
216:---: |:---: |:---: |:---: |:---: |:---: |
217[theghostbel](https://github.com/theghostbel) |[vitalics](https://github.com/vitalics) |[aha-oretama](https://github.com/aha-oretama) |[bsmithb2](https://github.com/bsmithb2) |[link89](https://github.com/link89) |[murajun1978](https://github.com/murajun1978) |
218
219[<img alt="VasilyStrelyaev" src="https://avatars1.githubusercontent.com/u/11459924?v=4&s=117" width="117">](https://github.com/VasilyStrelyaev) |[<img alt="AndreyBelym" src="https://avatars1.githubusercontent.com/u/4479386?v=4&s=117" width="117">](https://github.com/AndreyBelym) |[<img alt="AlexanderMoskovkin" src="https://avatars0.githubusercontent.com/u/12047804?v=4&s=117" width="117">](https://github.com/AlexanderMoskovkin) |[<img alt="inikulin" src="https://avatars1.githubusercontent.com/u/453071?v=4&s=117" width="117">](https://github.com/inikulin) |[<img alt="helen-dikareva" src="https://avatars1.githubusercontent.com/u/12034551?v=4&s=117" width="117">](https://github.com/helen-dikareva) |[<img alt="miherlosev" src="https://avatars2.githubusercontent.com/u/4133518?v=4&s=117" width="117">](https://github.com/miherlosev) |
220:---: |:---: |:---: |:---: |:---: |:---: |
221[VasilyStrelyaev](https://github.com/VasilyStrelyaev) |[AndreyBelym](https://github.com/AndreyBelym) |[AlexanderMoskovkin](https://github.com/AlexanderMoskovkin) |[inikulin](https://github.com/inikulin) |[helen-dikareva](https://github.com/helen-dikareva) |[miherlosev](https://github.com/miherlosev) |
222
223[<img alt="AlexKamaev" src="https://avatars3.githubusercontent.com/u/1678902?v=4&s=117" width="117">](https://github.com/AlexKamaev) |[<img alt="MargaritaLoseva" src="https://avatars2.githubusercontent.com/u/12034505?v=4&s=117" width="117">](https://github.com/MargaritaLoseva) |[<img alt="churkin" src="https://avatars3.githubusercontent.com/u/5182202?v=4&s=117" width="117">](https://github.com/churkin) |[<img alt="LavrovArtem" src="https://avatars2.githubusercontent.com/u/5373460?v=4&s=117" width="117">](https://github.com/LavrovArtem) |[<img alt="kirovboris" src="https://avatars0.githubusercontent.com/u/3633477?v=4&s=117" width="117">](https://github.com/kirovboris) |[<img alt="AlexSkorkin" src="https://avatars3.githubusercontent.com/u/995726?v=4&s=117" width="117">](https://github.com/AlexSkorkin) |
224:---: |:---: |:---: |:---: |:---: |:---: |
225[AlexKamaev](https://github.com/AlexKamaev) |[MargaritaLoseva](https://github.com/MargaritaLoseva) |[churkin](https://github.com/churkin) |[LavrovArtem](https://github.com/LavrovArtem) |[kirovboris](https://github.com/kirovboris) |[AlexSkorkin](https://github.com/AlexSkorkin) |
226
227[<img alt="pietrovich" src="https://avatars2.githubusercontent.com/u/1728613?v=4&s=117" width="117">](https://github.com/pietrovich) |[<img alt="superroma" src="https://avatars0.githubusercontent.com/u/8553464?v=4&s=117" width="117">](https://github.com/superroma) |[<img alt="infctr" src="https://avatars1.githubusercontent.com/u/15550153?v=4&s=117" width="117">](https://github.com/infctr) |[<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) |[<img alt="b12031106" src="https://avatars1.githubusercontent.com/u/2063566?v=4&s=117" width="117">](https://github.com/b12031106)
228:---: |:---: |:---: |:---: |:---: |:---: |
229[pietrovich](https://github.com/pietrovich) |[superroma](https://github.com/superroma) |[infctr](https://github.com/infctr) |[intermike](https://github.com/intermike) |[DevSide](https://github.com/DevSide) |[b12031106](https://github.com/b12031106)
230
231## Plugins
232
233TestCafe developers and community members made these plugins:
234
235* **Browser Providers**<br/>
236 Allow you to use TestCafe with cloud browser providers and emulators.
237 * [SauceLabs provider](https://github.com/DevExpress/testcafe-browser-provider-saucelabs) (by [@AndreyBelym](https://github.com/AndreyBelym))
238 * [BrowserStack provider](https://github.com/DevExpress/testcafe-browser-provider-browserstack) (by [@AndreyBelym](https://github.com/AndreyBelym))
239 * [CrossBrowserTesting provider](https://github.com/sijosyn/testcafe-browser-provider-crossbrowsertesting) (by [@sijosyn](https://github.com/sijosyn))
240 * [Nightmare headless provider](https://github.com/ryx/testcafe-browser-provider-nightmare) (by [@ryx](https://github.com/ryx))
241 * [fbsimctl iOS emulator](https://github.com/Ents24/testcafe-browser-provider-fbsimctl) (by [@ents24](https://github.com/Ents24))
242 * [Electron](https://github.com/DevExpress/testcafe-browser-provider-electron) (by [@AndreyBelym](https://github.com/AndreyBelym))
243 * [Puppeteer](https://github.com/jdobosz/testcafe-browser-provider-puppeteer) (by [@jdobosz](https://github.com/jdobosz))
244
245* **Framework-Specific Selectors**<br/>
246 Work with page elements in a way that is native to your framework.
247 * [React](https://github.com/DevExpress/testcafe-react-selectors) (by [@kirovboris](https://github.com/kirovboris))
248 * [Angular](https://github.com/DevExpress/testcafe-angular-selectors) (by [@miherlosev](https://github.com/miherlosev))
249 * [Vue](https://github.com/devexpress/testcafe-vue-selectors) (by [@miherlosev](https://github.com/miherlosev))
250 * [Aurelia](https://github.com/miherlosev/testcafe-aurelia-selectors) (by [@miherlosev](https://github.com/miherlosev))
251
252* **Plugins for Task Runners**<br/>
253 Integrate TestCafe into your project's workflow.
254 * [Grunt](https://github.com/crudo/grunt-testcafe) (by [@crudo](https://github.com/crudo))
255 * [Gulp](https://github.com/DevExpress/gulp-testcafe) (by [@inikulin](https://github.com/inikulin))
256
257* **Custom Reporters**<br/>
258 View test results in different formats.
259 * [TeamCity](https://github.com/Soluto/testcafe-reporter-teamcity) (by [@nirsky](https://github.com/nirsky))
260 * [Slack](https://github.com/Shafied/testcafe-reporter-slack) (by [@Shafied](https://github.com/Shafied))
261 * [NUnit](https://github.com/AndreyBelym/testcafe-reporter-nunit) (by [@AndreyBelym](https://github.com/AndreyBelym))
262 * [TimeCafe](https://github.com/jimthedev/timecafe) (by [@jimthedev](https://github.com/jimthedev))
263
264* **Test Accessibility**<br/>
265 Find accessibility issues in your web app.
266 * [axe-testcafe](https://github.com/helen-dikareva/axe-testcafe) (by [@helen-dikareva](https://github.com/helen-dikareva))
267
268* **IDE Plugins**<br/>
269 Run tests and view results from your favorite IDE.
270 * [Visual Studio Code](https://github.com/romanresh/vscode-testcafe) (by [@romanresh](https://github.com/romanresh))
271 * [SublimeText](https://github.com/churkin/testcafe-sublimetext) (by [@churkin](https://github.com/churkin))
272
273* **ESLint**<br/>
274 Use ESLint when writing and editing TestCafe tests.
275 * [ESLint plugin](https://github.com/miherlosev/eslint-plugin-testcafe) (by [@miherlosev](https://github.com/miherlosev))
276
277## Different Versions of TestCafe
278
279| &nbsp; | [TestCafe](https://devexpress.github.io/testcafe) | [TestCafe Studio](https://www.devexpress.com/products/testcafestudio/?utm_source=github.com&utm_medium=referral&utm_campaign=tc-gh-diff) |
280| ------ |:-------------------------------------------------:|:-----------------------------------------------------------------------:|
281| No need for WebDriver, browser plugins or other tools | &#10003; | &#10003; |
282| Cross-platform and cross-browser out of the box | &#10003; | &#10003; |
283| Write tests in the latest JavaScript or TypeScript | &#10003; | &#10003; |
284| Clear and flexible [API](https://devexpress.github.io/testcafe/documentation/test-api/) supports ES6 and [PageModel pattern](https://devexpress.github.io/testcafe/documentation/recipes/using-page-model.html) | &#10003; | &#10003; |
285| Stable tests due to the [Smart Assertion Query Mechanism](https://devexpress.github.io/testcafe/documentation/test-api/assertions/#smart-assertion-query-mechanism) | &#10003; | &#10003; |
286| Tests run fast due to intelligent [Automatic Waiting Mechanism](https://devexpress.github.io/testcafe/documentation/test-api/waiting-for-page-elements-to-appear.html) and [Concurrent Test Execution](https://devexpress.github.io/testcafe/documentation/using-testcafe/common-concepts/concurrent-test-execution.html) | &#10003; | &#10003; |
287| Custom reporter plugins | &#10003; | &#10003; |
288| Use third-party Node.js modules in test scripts | &#10003; | &#10003; |
289| Integration with popular CI systems | &#10003; | &nbsp;&#10003;\* |
290| Free and open-source | &#10003; | &nbsp; |
291| [Visual Test Recorder](https://docs.devexpress.com/TestCafeStudio/400165/guides/record-tests?utm_source=github.com&utm_medium=referral&utm_campaign=tc-gh-diff) | &nbsp; | &#10003; |
292| [Interactive Test Editor](https://docs.devexpress.com/TestCafeStudio/400190/user-interface/test-editor?utm_source=github.com&utm_medium=referral&utm_campaign=tc-gh-diff) | &nbsp; | &#10003; |
293| [Automatic Selector Generation](https://docs.devexpress.com/TestCafeStudio/400407/guides/record-tests/element-selectors#auto-generated-element-selectors?utm_source=github.com&utm_medium=referral&utm_campaign=tc-gh-diff) | &nbsp; | &#10003; |
294| [Run Configuration Manager](https://docs.devexpress.com/TestCafeStudio/400189/user-interface/run-configurations-dialog?utm_source=github.com&utm_medium=referral&utm_campaign=tc-gh-diff) | &nbsp; | &#10003; |
295| [IDE-like GUI](https://docs.devexpress.com/TestCafeStudio/400181/user-interface/code-editor?utm_source=github.com&utm_medium=referral&utm_campaign=tc-gh-diff) | &nbsp; | &#10003; |
296
297\* You can use open-source TestCafe to run TestCafe Studio tests in CI systems.
298
299## Badge
300
301Show everyone you are using TestCafe: ![Tested with TestCafe](https://img.shields.io/badge/tested%20with-TestCafe-2fa4cf.svg)
302
303To display this badge, add the following code to your repository readme:
304
305```html
306<a href="https://github.com/DevExpress/testcafe">
307 <img alt="Tested with TestCafe" src="https://img.shields.io/badge/tested%20with-TestCafe-2fa4cf.svg">
308</a>
309```
310
311## Thanks to BrowserStack
312
313We are grateful to BrowserStack for providing the infrastructure that we use to test code in this repository.
314
315<a href="https://www.browserstack.com/"><img alt="BrowserStack Logo" src="https://raw.github.com/DevExpress/testcafe/master/media/BrowserStack.png"/></a>
316
317## License
318
319Code released under the [MIT license](LICENSE).
320
321## Creators
322
323Developer Express Inc. ([https://devexpress.com](https://devexpress.com))