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="Try TestCafe Studio IDE" />
|
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>   •  
|
25 | <a href="https://devexpress.github.io/testcafe/documentation/getting-started/">Documentation</a>   •  
|
26 | <a href="https://devexpress.github.io/testcafe/faq/">FAQ</a>   •  
|
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/>
|
59 | TestCafe automatically waits for page loads and XHRs before the test starts and after each action.
|
60 | It also features smart test actions and assertions that wait for page elements to appear.
|
61 | You can change the maximum wait time.
|
62 | If elements load faster, tests skip the timeout and continue.
|
63 |
|
64 | **Rapid test development tool**<br/>
|
65 | Changes in test code immediately restart the test, and you see the results instantly.<br/>
|
66 | See how it works in the [TestCafe Live repository](https://github.com/DevExpress/testcafe-live).
|
67 |
|
68 | **Latest JS and TypeScript support**<br/>
|
69 | TestCafe supports the latest JavaScript features, including ES2017 (for example, async/await).
|
70 | You can also [use TypeScript](https://devexpress.github.io/testcafe/documentation/test-api/typescript-support.html)
|
71 | if you prefer a strongly typed language.
|
72 |
|
73 | **Detects JS errors in your code**<br/>
|
74 | TestCafe reports JS errors that it finds on the webpage.
|
75 | Tests automatically fail because of that.
|
76 | However, you can disable this.
|
77 |
|
78 | **Concurrent tests launch**<br/>
|
79 | TestCafe can open multiple instances of the same browser to run parallel
|
80 | tests which decreases test execution time.
|
81 |
|
82 | **PageObject pattern support**<br/>
|
83 | The TestCafe's [Test API](https://devexpress.github.io/testcafe/documentation/test-api/)
|
84 | includes a high-level selector library, assertions, etc.
|
85 | You 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
|
88 | const macOSInput = Selector('.column').find('label').withText('MacOS').child('input');
|
89 | ```
|
90 |
|
91 | **Easy to include in a continuous integration system**<br/>
|
92 | You 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 |
|
97 | TestCafe 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 |
|
99 | Read 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 |
|
111 | Ensure 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
|
114 | npm install -g testcafe
|
115 | ```
|
116 |
|
117 | ### Creating the Test
|
118 |
|
119 | As an example, we are going to test the [https://devexpress.github.io/testcafe/example](https://devexpress.github.io/testcafe/example) page.
|
120 |
|
121 | Create a `.js` or `.ts` file on your computer.
|
122 | Note that it needs to have a specific structure: tests must be organized into fixtures.
|
123 | You can paste the following code to see the test in action:
|
124 |
|
125 | ```js
|
126 | import { Selector } from 'testcafe'; // first import testcafe selectors
|
127 |
|
128 | fixture `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
|
133 | test('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 |
|
145 | Call the following command in a command shell.
|
146 | Specify the [target browser](https://devexpress.github.io/testcafe/documentation/using-testcafe/command-line-interface.html#browser-list)
|
147 | and [file path](https://devexpress.github.io/testcafe/documentation/using-testcafe/command-line-interface.html#file-pathglob-pattern).
|
148 |
|
149 | ```sh
|
150 | testcafe chrome test1.js
|
151 | ```
|
152 |
|
153 | TestCafe 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 |
|
161 | TestCafe outputs the results into a command shell by default. See [Reporters](https://devexpress.github.io/testcafe/documentation/using-testcafe/common-concepts/reporters.html)
|
162 | for more information. You can also use [plugins](#plugins) to customize the reports.
|
163 |
|
164 | ![Test Report](docs/articles/images/report.png)
|
165 |
|
166 | Read the [Getting Started](https://devexpress.github.io/testcafe/documentation/getting-started/) page for a more detailed guide.
|
167 |
|
168 | ## Documentation
|
169 |
|
170 | Go to our website for full [documentation](https://devexpress.github.io/testcafe/documentation/getting-started/) on TestCafe.
|
171 |
|
172 | ## Get Help
|
173 |
|
174 | Join 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 |
|
178 | Use 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 |
|
182 | Follow us on [Twitter](https://twitter.com/DXTestCafe). We post TestCafe news and updates, several times a week.
|
183 |
|
184 | ## Contributing
|
185 |
|
186 | Read our [Contributing Guide](https://github.com/DevExpress/testcafe/blob/master/CONTRIBUTING.md) to learn how to contribute to the project.
|
187 |
|
188 | To 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 |
|
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 |
|
197 | Thank you to all the people who already contributed to TestCafe!
|
198 |
|
199 | [<img alt="Farfurix" src="https://avatars2.githubusercontent.com/u/30019338?v=4&s=117" width="117">](https://github.com/Farfurix) |[<img alt="Nuarat" src="https://avatars0.githubusercontent.com/u/11683678?v=4&s=117" width="117">](https://github.com/Nuarat) |[<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="timnederhoff" src="https://avatars1.githubusercontent.com/u/12087707?v=4&s=117" width="117">](https://github.com/timnederhoff) |
|
200 | :---: |:---: |:---: |:---: |:---: |:---: |
|
201 | [Farfurix](https://github.com/Farfurix) |[Nuarat](https://github.com/Nuarat) |[aleks-pro](https://github.com/aleks-pro) |[ericyd](https://github.com/ericyd) |[NickCis](https://github.com/NickCis) |[timnederhoff](https://github.com/timnederhoff) |
|
202 |
|
203 | [<img alt="andrewbranch" src="https://avatars0.githubusercontent.com/u/3277153?v=4&s=117" width="117">](https://github.com/andrewbranch) |[<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="infctr" src="https://avatars1.githubusercontent.com/u/15550153?v=4&s=117" width="117">](https://github.com/infctr) |
|
204 | :---: |:---: |:---: |:---: |:---: |:---: |
|
205 | [andrewbranch](https://github.com/andrewbranch) |[radarhere](https://github.com/radarhere) |[ai](https://github.com/ai) |[AndyWendt](https://github.com/AndyWendt) |[arubtsov](https://github.com/arubtsov) |[infctr](https://github.com/infctr) |
|
206 |
|
207 | [<img alt="benmonro" src="https://avatars3.githubusercontent.com/u/399236?v=4&s=117" width="117">](https://github.com/benmonro) |[<img alt="lzxb" src="https://avatars0.githubusercontent.com/u/8424643?v=4&s=117" width="117">](https://github.com/lzxb) |[<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="Ivan-Katovich" src="https://avatars2.githubusercontent.com/u/7858279?v=4&s=117" width="117">](https://github.com/Ivan-Katovich) |
|
208 | :---: |:---: |:---: |:---: |:---: |:---: |
|
209 | [benmonro](https://github.com/benmonro) |[lzxb](https://github.com/lzxb) |[smockle](https://github.com/smockle) |[beyondcompute](https://github.com/beyondcompute) |[GeoffreyBooth](https://github.com/GeoffreyBooth) |[Ivan-Katovich](https://github.com/Ivan-Katovich) |
|
210 |
|
211 | [<img alt="jamesgeorge007" src="https://avatars2.githubusercontent.com/u/25279263?v=4&s=117" width="117">](https://github.com/jamesgeorge007) |[<img alt="mcjim" src="https://avatars0.githubusercontent.com/u/485440?v=4&s=117" width="117">](https://github.com/mcjim) |[<img alt="kanhaiya15" src="https://avatars1.githubusercontent.com/u/38152453?v=4&s=117" width="117">](https://github.com/kanhaiya15) |[<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) |[<img alt="morfey13" src="https://avatars0.githubusercontent.com/u/2048346?v=4&s=117" width="117">](https://github.com/morfey13) |
|
212 | :---: |:---: |:---: |:---: |:---: |:---: |
|
213 | [jamesgeorge007](https://github.com/jamesgeorge007) |[mcjim](https://github.com/mcjim) |[kanhaiya15](https://github.com/kanhaiya15) |[dej611](https://github.com/dej611) |[MatthewNielsen27](https://github.com/MatthewNielsen27) |[morfey13](https://github.com/morfey13) |
|
214 |
|
215 | [<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) |
|
216 | :---: |:---: |:---: |:---: |:---: |:---: |
|
217 | [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) |
|
218 |
|
219 | [<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) |
|
220 | :---: |:---: |:---: |:---: |:---: |:---: |
|
221 | [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) |
|
222 |
|
223 | [<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="AlexKamaev" src="https://avatars3.githubusercontent.com/u/1678902?v=4&s=117" width="117">](https://github.com/AlexKamaev) |
|
224 | :---: |:---: |:---: |:---: |:---: |:---: |
|
225 | [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) |[AlexKamaev](https://github.com/AlexKamaev) |
|
226 |
|
227 | [<img alt="miherlosev" src="https://avatars2.githubusercontent.com/u/4133518?v=4&s=117" width="117">](https://github.com/miherlosev) |[<img alt="MargaritaLoseva" src="https://avatars2.githubusercontent.com/u/12034505?v=4&s=117" width="117">](https://github.com/MargaritaLoseva) |[<img alt="LavrovArtem" src="https://avatars2.githubusercontent.com/u/5373460?v=4&s=117" width="117">](https://github.com/LavrovArtem) |[<img alt="churkin" src="https://avatars3.githubusercontent.com/u/5182202?v=4&s=117" width="117">](https://github.com/churkin) |[<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) |
|
228 | :---: |:---: |:---: |:---: |:---: |:---: |
|
229 | [miherlosev](https://github.com/miherlosev) |[MargaritaLoseva](https://github.com/MargaritaLoseva) |[LavrovArtem](https://github.com/LavrovArtem) |[churkin](https://github.com/churkin) |[kirovboris](https://github.com/kirovboris) |[AlexSkorkin](https://github.com/AlexSkorkin) |
|
230 |
|
231 | [<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="caseyWebb" src="https://avatars3.githubusercontent.com/u/5419074?v=4&s=117" width="117">](https://github.com/caseyWebb) |[<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) |
|
232 | :---: |:---: |:---: |:---: |:---: |:---: |
|
233 | [pietrovich](https://github.com/pietrovich) |[superroma](https://github.com/superroma) |[caseyWebb](https://github.com/caseyWebb) |[intermike](https://github.com/intermike) |[DevSide](https://github.com/DevSide) |[b12031106](https://github.com/b12031106) |
|
234 |
|
235 | [<img alt="Marketionist" src="https://avatars2.githubusercontent.com/u/534603?v=4&s=117" width="117">](https://github.com/Marketionist) |[<img alt="Dmitry-Ostashev" src="https://avatars3.githubusercontent.com/u/24777868?v=4&s=117" width="117">](https://github.com/Dmitry-Ostashev) |[<img alt="alexey-lin" src="https://avatars0.githubusercontent.com/u/13483856?v=4&s=117" width="117">](https://github.com/alexey-lin) |[<img alt="cgfarmer4" src="https://avatars3.githubusercontent.com/u/336449?v=4&s=117" width="117">](https://github.com/cgfarmer4) |[<img alt="bill-looby-i" src="https://avatars0.githubusercontent.com/u/51128939?v=4&s=117" width="117">](https://github.com/bill-looby-i) |[<img alt="rbardini" src="https://avatars2.githubusercontent.com/u/874370?v=4&s=117" width="117">](https://github.com/rbardini) |
|
236 | :---: |:---: |:---: |:---: |:---: |:---: |
|
237 | [Marketionist](https://github.com/Marketionist) |[Dmitry-Ostashev](https://github.com/Dmitry-Ostashev) |[alexey-lin](https://github.com/alexey-lin) |[cgfarmer4](https://github.com/cgfarmer4) |[bill-looby-i](https://github.com/bill-looby-i) |[rbardini](https://github.com/rbardini) |
|
238 |
|
239 | [<img alt="macdonaldr93" src="https://avatars2.githubusercontent.com/u/5184848?v=4&s=117" width="117">](https://github.com/macdonaldr93) |[<img alt="alexwybraniec" src="https://avatars3.githubusercontent.com/u/521536?v=4&s=117" width="117">](https://github.com/alexwybraniec) |
|
240 | :---: |:---: |
|
241 | [macdonaldr93](https://github.com/macdonaldr93) |[alexwybraniec](https://github.com/alexwybraniec) |
|
242 |
|
243 | ## Plugins
|
244 |
|
245 | TestCafe developers and community members made these plugins:
|
246 |
|
247 | * **Browser Providers**<br/>
|
248 | Use TestCafe with cloud browser providers and emulators.
|
249 | * [SauceLabs provider](https://github.com/DevExpress/testcafe-browser-provider-saucelabs) (by [@AndreyBelym](https://github.com/AndreyBelym))
|
250 | * [BrowserStack provider](https://github.com/DevExpress/testcafe-browser-provider-browserstack) (by [@AndreyBelym](https://github.com/AndreyBelym))
|
251 | * [CrossBrowserTesting provider](https://github.com/sijosyn/testcafe-browser-provider-crossbrowsertesting) (by [@sijosyn](https://github.com/sijosyn))
|
252 | * [LambdaTest provider](https://github.com/LambdaTest/testcafe-browser-provider-lambdatest) (by [@kanhaiya15](https://github.com/kanhaiya15))
|
253 | * [Nightmare headless provider](https://github.com/ryx/testcafe-browser-provider-nightmare) (by [@ryx](https://github.com/ryx))
|
254 | * [fbsimctl iOS emulator](https://github.com/Ents24/testcafe-browser-provider-fbsimctl) (by [@ents24](https://github.com/Ents24))
|
255 | * [Electron](https://github.com/DevExpress/testcafe-browser-provider-electron) (by [@AndreyBelym](https://github.com/AndreyBelym))
|
256 | * [Puppeteer](https://github.com/jdobosz/testcafe-browser-provider-puppeteer) (by [@jdobosz](https://github.com/jdobosz))
|
257 |
|
258 | * **Framework-Specific Selectors**<br/>
|
259 | Work with page elements in a way that is native to your framework.
|
260 | * [React](https://github.com/DevExpress/testcafe-react-selectors) (by [@kirovboris](https://github.com/kirovboris))
|
261 | * [Angular](https://github.com/DevExpress/testcafe-angular-selectors) (by [@miherlosev](https://github.com/miherlosev))
|
262 | * [Vue](https://github.com/devexpress/testcafe-vue-selectors) (by [@miherlosev](https://github.com/miherlosev))
|
263 | * [Aurelia](https://github.com/miherlosev/testcafe-aurelia-selectors) (by [@miherlosev](https://github.com/miherlosev))
|
264 |
|
265 | * **Plugins for Task Runners**<br/>
|
266 | Integrate TestCafe into your project's workflow.
|
267 | * [Grunt](https://github.com/crudo/grunt-testcafe) (by [@crudo](https://github.com/crudo))
|
268 | * [Gulp](https://github.com/DevExpress/gulp-testcafe) (by [@inikulin](https://github.com/inikulin))
|
269 |
|
270 | * **Custom Reporters**<br/>
|
271 | View test results in different formats.
|
272 | * [TeamCity](https://github.com/Soluto/testcafe-reporter-teamcity) (by [@nirsky](https://github.com/nirsky))
|
273 | * [Slack](https://github.com/Shafied/testcafe-reporter-slack) (by [@Shafied](https://github.com/Shafied))
|
274 | * [NUnit](https://github.com/AndreyBelym/testcafe-reporter-nunit) (by [@AndreyBelym](https://github.com/AndreyBelym))
|
275 | * [TimeCafe](https://github.com/jimthedev/timecafe) (by [@jimthedev](https://github.com/jimthedev))
|
276 |
|
277 | * **GitHub Action**<br/>
|
278 | Run TestCafe tests in GitHub Actions workflows.
|
279 | * [Run TestCafe](https://github.com/DevExpress/testcafe-action/)
|
280 |
|
281 | * **Test Accessibility**<br/>
|
282 | Find accessibility issues in your web app.
|
283 | * [axe-testcafe](https://github.com/helen-dikareva/axe-testcafe) (by [@helen-dikareva](https://github.com/helen-dikareva))
|
284 |
|
285 | * **IDE Plugins**<br/>
|
286 | Run tests and view results from your favorite IDE.
|
287 | * [TestCafe Test Runner](https://github.com/romanresh/vscode-testcafe) for Visual Studio Code (by [@romanresh](https://github.com/romanresh))
|
288 | * [TestLatte](https://github.com/Selminha/testlatte) for Visual Studio Code (by [@Selminha](https://github.com/Selminha))
|
289 | * [TestCafe runner for Webstorm](https://github.com/lilbaek/webstorm-testcafe) (by [@lilbaek](https://github.com/lilbaek))
|
290 | * [Code snippets for TestCafe](https://github.com/hdorgeval/testcafe-snippets) (by [@hdorgeval](https://github.com/hdorgeval))
|
291 | * [SublimeText](https://github.com/churkin/testcafe-sublimetext) (by [@churkin](https://github.com/churkin))
|
292 |
|
293 | * **ESLint**<br/>
|
294 | Use ESLint when writing and editing TestCafe tests.
|
295 | * [ESLint plugin](https://github.com/miherlosev/eslint-plugin-testcafe) (by [@miherlosev](https://github.com/miherlosev))
|
296 |
|
297 | ## Different Versions of TestCafe
|
298 |
|
299 | | | [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) |
|
300 | | ------ |:-------------------------------------------------:|:-----------------------------------------------------------------------:|
|
301 | | No need for WebDriver, browser plugins or other tools | ✓ | ✓ |
|
302 | | Cross-platform and cross-browser out of the box | ✓ | ✓ |
|
303 | | Write tests in the latest JavaScript or TypeScript | ✓ | ✓ |
|
304 | | 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) | ✓ | ✓ |
|
305 | | Stable tests due to the [Smart Assertion Query Mechanism](https://devexpress.github.io/testcafe/documentation/test-api/assertions/#smart-assertion-query-mechanism) | ✓ | ✓ |
|
306 | | 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) | ✓ | ✓ |
|
307 | | Custom reporter plugins | ✓ | ✓ |
|
308 | | Use third-party Node.js modules in test scripts | ✓ | ✓ |
|
309 | | Integration with popular CI systems | ✓ | ✓\* |
|
310 | | Free and open-source | ✓ | |
|
311 | | [Visual Test Recorder](https://docs.devexpress.com/TestCafeStudio/400165/guides/record-tests?utm_source=github.com&utm_medium=referral&utm_campaign=tc-gh-diff) | | ✓ |
|
312 | | [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) | | ✓ |
|
313 | | [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) | | ✓ |
|
314 | | [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) | | ✓ |
|
315 | | [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) | | ✓ |
|
316 |
|
317 | \* You can use open-source TestCafe to run TestCafe Studio tests in CI systems.
|
318 |
|
319 | ## Badge
|
320 |
|
321 | Show everyone you are using TestCafe: ![Tested with TestCafe](https://img.shields.io/badge/tested%20with-TestCafe-2fa4cf.svg)
|
322 |
|
323 | To display this badge, add the following code to your repository readme:
|
324 |
|
325 | ```html
|
326 | <a href="https://github.com/DevExpress/testcafe">
|
327 | <img alt="Tested with TestCafe" src="https://img.shields.io/badge/tested%20with-TestCafe-2fa4cf.svg">
|
328 | </a>
|
329 | ```
|
330 |
|
331 | ## Thanks to BrowserStack
|
332 |
|
333 | We are grateful to BrowserStack for providing the infrastructure that we use to test code in this repository.
|
334 |
|
335 | <a href="https://www.browserstack.com/"><img alt="BrowserStack Logo" src="https://raw.github.com/DevExpress/testcafe/master/media/BrowserStack.png"/></a>
|
336 |
|
337 | ## License
|
338 |
|
339 | Code released under the [MIT license](LICENSE).
|
340 |
|
341 | ## Creators
|
342 |
|
343 | Developer Express Inc. ([https://devexpress.com](https://devexpress.com))
|