{"id":13452041,"url":"https://github.com/DevExpress/testcafe","last_synced_at":"2025-03-23T19:33:44.457Z","repository":{"id":30706780,"uuid":"34262857","full_name":"DevExpress/testcafe","owner":"DevExpress","description":"A Node.js tool to automate end-to-end web testing.","archived":false,"fork":false,"pushed_at":"2024-04-12T09:43:51.000Z","size":132928,"stargazers_count":9747,"open_issues_count":32,"forks_count":660,"subscribers_count":167,"default_branch":"master","last_synced_at":"2024-04-14T04:30:24.360Z","etag":null,"topics":["browser","e2e","end-to-end-testing","functional-testing","test","test-automation","test-framework","testcafe","testing-tools","typescript"],"latest_commit_sha":null,"homepage":"https://testcafe.io","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DevExpress.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"security.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2015-04-20T13:43:28.000Z","updated_at":"2024-04-18T13:52:36.706Z","dependencies_parsed_at":"2024-03-15T09:26:49.540Z","dependency_job_id":"4bd1d0e8-652e-46b1-a120-cdb636365c56","html_url":"https://github.com/DevExpress/testcafe","commit_stats":{"total_commits":3015,"total_committers":117,"mean_commits":25.76923076923077,"dds":0.8308457711442786,"last_synced_commit":"44c59280695a180f14794aa80d82f4c771260654"},"previous_names":[],"tags_count":457,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DevExpress%2Ftestcafe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DevExpress%2Ftestcafe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DevExpress%2Ftestcafe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DevExpress%2Ftestcafe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DevExpress","download_url":"https://codeload.github.com/DevExpress/testcafe/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221900706,"owners_count":16898986,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browser","e2e","end-to-end-testing","functional-testing","test","test-automation","test-framework","testcafe","testing-tools","typescript"],"created_at":"2024-07-31T07:01:11.003Z","updated_at":"2024-10-28T18:30:30.920Z","avatar_url":"https://github.com/DevExpress.png","language":"JavaScript","readme":"\u003cp align=\"center\"\u003e\n \u003ca href=\"https://www.devexpress.com/products/testcafestudio/?utm_source=github.com\u0026utm_medium=referral\u0026utm_campaign=tc-gh-banner\"\u003e\n     \u003cimg src=\"https://raw.github.com/DevExpress/testcafe/master/media/testcafe-studio-banner.png\" alt=\"Try TestCafe Studio IDE\" /\u003e\n \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://testcafe.io\"\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/DevExpress/testcafe/master/media/testcafe-logo.svg?sanitize=true\" alt=\"testcafe\" /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://github.com/DevExpress/testcafe/commits/master\"\u003e\u003cimg alt=\"Tests\" src=\"https://img.shields.io/github/checks-status/DevExpress/testcafe/master?label=Tests\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/DevExpress/testcafe/actions/workflows/test-dependencies.yml\"\u003e\u003cimg alt=\"Test Dependencies\" src=\"https://github.com/DevExpress/testcafe/actions/workflows/test-dependencies.yml/badge.svg\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://www.npmjs.com/package/testcafe\"\u003e\u003cimg 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%;\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ci\u003e Automate end-to-end web testing with TestCafe, a Node.js-based testing framework.\u003c/i\u003e\u003cbr\u003e\u003cbr\u003e\nTestCafe is \u003cstrong\u003efree\u003c/strong\u003e and as easy to use as \u003cstrong\u003e1-2-3\u003c/strong\u003e:\u003cbr\u003e\n\u003cstrong\u003e1.\u003c/strong\u003e Write your tests in JS or TypeScript.\u003cbr\u003e\u003cstrong\u003e2.\u003c/strong\u003e Execute your tests.\u003cbr\u003e\u003cstrong\u003e3.\u003c/strong\u003e View test results.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://testcafe.io\"\u003eHomepage\u003c/a\u003e \u0026nbsp;\u0026nbsp;•\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"https://testcafe.io/documentation/402635/getting-started\"\u003eDocumentation\u003c/a\u003e \u0026nbsp;\u0026nbsp;•\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"https://testcafe.io/402636/faq\"\u003eFAQ\u003c/a\u003e \u0026nbsp;\u0026nbsp;•\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"https://testcafe.io/support\"\u003eSupport\u003c/a\u003e\n\u003c/p\u003e\n\n* **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).\n* **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`\n* **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 create your own.\n\n![Install TestCafe and Run a Test](https://raw.githubusercontent.com/DevExpress/testcafe/master/media/install-and-run-test.gif)\n\n\u003cp align=\"center\"\u003e\n\u003ci\u003eRunning a sample test in Safari\u003c/i\u003e\n\u003c/p\u003e\n\n## Table of contents\n\n* [Features](#features)\n* [TestCafe Studio: IDE for End-to-End Web Testing](#testcafe-studio-ide-for-end-to-end-web-testing)\n* [Getting Started](#getting-started)\n* [Documentation](#documentation)\n* [Get Help](#get-help)\n* [Issue Tracker](#issue-tracker)\n* [Stay in Touch](#stay-in-touch)\n* [Contributing](#contributing)\n* [Plugins](#plugins)\n* [Different Versions of TestCafe](#different-versions-of-testcafe)\n* [Badge](#badge)\n* [License](#license)\n* [Creators](#creators)\n\n## Features\n\n**Stable tests and no manual timeouts**\u003cbr/\u003e\nTestCafe automatically waits for page loads and XHRs before the test starts and after each action.\nIt also features smart test actions and assertions that wait for page elements to appear.\nYou can change the maximum wait time.\nIf elements load faster, tests skip the timeout and continue.\n\n**Rapid test development tool**\u003cbr/\u003e\nWhen you enable [live mode](https://testcafe.io/documentation/403842/guides/intermediate-guides/live-mode), changes to test code immediately restart the test, and you instantly see the results.\n\n**Latest JS and TypeScript support**\u003cbr/\u003e\nTestCafe supports the most recent JavaScript-related features, including ES2017 (async/await). You can also [use TypeScript](https://testcafe.io/documentation/402824/guides/concepts/typescript-and-coffeescript#typescript-support) if you prefer a strongly typed language instead.\n\n**Detects JS errors in your code**\u003cbr/\u003e\nTestCafe reports JS errors that it locates on a given webpage. Tests automatically fail if TestCafe encounters such errors.\u003cbr /\u003e\nYou can, however, disable this option.\u003cbr /\u003e\n\n**Concurrent test launch**\u003cbr/\u003e\nTestCafe can open multiple instances of the same browser and run parallel tests (to help decrease test execution time).\n\n**PageObject pattern support**\u003cbr/\u003e\nThe TestCafe's [Test API](https://testcafe.io/documentation/402632/reference) includes a high-level selector library, assertions, etc.\nYou can combine them to implement readable tests with the [PageObject pattern](https://testcafe.io/documentation/402826/guides/concepts/page-model).\n\n```js\nconst macOSInput = Selector('.column').find('label').withText('MacOS').child('input');\n```\n\n**Easy to include in a continuous integration system**\u003cbr/\u003e\nYou can run TestCafe from a console, and its reports can be viewed within CI systems (TeamCity, Jenkins, Travis \u0026 etc.)\n\n# Love TestCafe Open-source Edition? Want to Record Tests without Writing JavaScript or TypeScript Code?\n\n## TestCafe Studio: IDE for End-to-End Web Testing\n\nTestCafe is the perfect choice for JavaScript developers and experienced Q\u0026A teams. If you’d like to delegate testing to QA engineers and are looking for a code-free 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\u0026utm_medium=referral\u0026utm_campaign=tc-gh-ide) - a testing IDE built atop the open-source version of TestCafe.\n\nReview the following article to learn how TestCafe Studio can fit into any workflow: [What's Better than TestCafe? TestCafe Studio](https://www.devexpress.com/products/testcafestudio/qa-end-to-end-web-testing.xml).\n\n![Get Started with TestCafe Studio](https://raw.githubusercontent.com/DevExpress/testcafe/master/media/testcafe-studio-get-started.gif)\n\n\u003cp align=\"center\"\u003e\n\u003ci\u003eRecord and Run a Test in TestCafe Studio\u003c/i\u003e\n\u003c/p\u003e\n\n# Getting Started\n\n### Installation\n\nEnsure that you run [Node.js](https://nodejs.org/) version 16 or higher, and run the following command:\n\n```sh\nnpm install -g testcafe\n```\n\n### Creating the Test\n\nFor this simple example, we will test the following page: [https://devexpress.github.io/testcafe/example](https://devexpress.github.io/testcafe/example)\n\nCreate a .js or .ts file on your computer. Remember that a .js or .ts file must maintain a specific structure: tests must be organized into fixtures. You can paste the following code to see the test in action:\n\n```js\nimport { Selector } from 'testcafe'; // first import testcafe selectors\n\nfixture `Getting Started`// declare the fixture\n    .page `https://devexpress.github.io/testcafe/example`;  // specify the start page\n\n\n//then create a test and place your code within it\ntest('My first test', async t =\u003e {\n    await t\n        .typeText('#developer-name', 'John Smith')\n        .click('#submit-button')\n\n        // Use the assertion to check if actual header text equals expected text\n        .expect(Selector('#article-header').innerText).eql('Thank you, John Smith!');\n});\n```\n\n### Running the Test\n\nCall the following command in a command shell. Specify the [target browser](https://testcafe.io/documentation/402639/reference/command-line-interface#browser-list) and [file path](https://testcafe.io/documentation/402639/reference/command-line-interface#file-pathglob-pattern).\n\n```sh\ntestcafe chrome test1.js\n```\n\nTestCafe opens the browser and begins test execution.\n\n\u003e Important: Make certain the browser tab that runs tests stays active. \n\u003e Do not minimize the browser window. \n\u003e Inactive tabs and minimized browser windows switch to lower resource consumption mode. \n\u003e In low consumption mode, tests may not execute correctly.\n\n\n### Viewing the Results\n\nTestCafe outputs results into a command shell by default. See [Reporters](https://testcafe.io/documentation/402825/guides/concepts/reporters)\nfor more information. You can also use [plugins](#plugins) to customize reports.\n\n![Test Report](https://testcafe.io/images/report.png)\n\nRead the [Getting Started](https://testcafe.io/documentation/402635/getting-started) page for additional assistance.\n\n## Documentation\n\nVisit the following webpage to review our online help system: [Documentation](https://testcafe.io/documentation/402635/getting-started).\n\n## Get Help\n\nJoin the TestCafe community on Stack Overflow.  Ask and answer questions [using the TestCafe tag](https://stackoverflow.com/questions/tagged/testcafe).\n\n## Issue Tracker\n\nUse our GitHub issues page to [report bugs](https://github.com/DevExpress/testcafe/issues/new?template=bug-report.md) and [suggest enhancements](https://github.com/DevExpress/testcafe/issues/new?template=feature_request.md).\n\n## Stay in Touch\n\nFollow us on [Twitter](https://twitter.com/DXTestCafe). We post TestCafe news and updates.\n\n## Contributing\n\nRead our [Contributing Guide](https://github.com/DevExpress/testcafe/blob/master/CONTRIBUTING.md) to learn how to contribute to the project.\n\nTo create your own plugin for TestCafe, you can use these plugin generators:\n\n* [Build a browser provider](https://testcafe.io/documentation/402812/guides/extend-testcafe/browser-provider-plugin) 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.\n* To [build a custom reporter](https://testcafe.io/documentation/402810/guides/extend-testcafe/reporter-plugin)\n  with your formatting and style, check out this [generator](https://www.npmjs.com/package/generator-testcafe-reporter).\n\nIf you want your plugin to be listed below, [send us a note in a Github issue](https://github.com/DevExpress/testcafe/issues/new).\n\nThanks to all of our contributors – We appreciate your commitment to the TestCafe community.\n\n[\u003cimg alt=\"aha-oretama\" src=\"https://avatars.githubusercontent.com/u/7259161?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/aha-oretama) |[\u003cimg alt=\"ai\" src=\"https://avatars.githubusercontent.com/u/19343?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/ai) |[\u003cimg alt=\"aleks-pro\" src=\"https://avatars.githubusercontent.com/u/14822473?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/aleks-pro) |[\u003cimg alt=\"Aleksey28\" src=\"https://avatars.githubusercontent.com/u/32869530?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Aleksey28) |[\u003cimg alt=\"AlexanderMoiseev\" src=\"https://avatars.githubusercontent.com/u/1498953?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/AlexanderMoiseev) |[\u003cimg alt=\"AlexanderMoskovkin\" src=\"https://avatars.githubusercontent.com/u/12047804?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/AlexanderMoskovkin) |\n:---: |:---: |:---: |:---: |:---: |:---: |\n[aha-oretama](https://github.com/aha-oretama) |[ai](https://github.com/ai) |[aleks-pro](https://github.com/aleks-pro) |[Aleksey28](https://github.com/Aleksey28) |[AlexanderMoiseev](https://github.com/AlexanderMoiseev) |[AlexanderMoskovkin](https://github.com/AlexanderMoskovkin) |\n\n[\u003cimg alt=\"alexey-lin\" src=\"https://avatars.githubusercontent.com/u/13483856?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/alexey-lin) |[\u003cimg alt=\"AlexKamaev\" src=\"https://avatars.githubusercontent.com/u/1678902?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/AlexKamaev) |[\u003cimg alt=\"alexphilin\" src=\"https://avatars.githubusercontent.com/u/20364443?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/alexphilin) |[\u003cimg alt=\"AlexSkorkin\" src=\"https://avatars.githubusercontent.com/u/995726?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/AlexSkorkin) |[\u003cimg alt=\"alexwybraniec\" src=\"https://avatars.githubusercontent.com/u/521536?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/alexwybraniec) |[\u003cimg alt=\"AnastasiaIvanova8\" src=\"https://avatars.githubusercontent.com/u/31988208?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/AnastasiaIvanova8) |\n:---: |:---: |:---: |:---: |:---: |:---: |\n[alexey-lin](https://github.com/alexey-lin) |[AlexKamaev](https://github.com/AlexKamaev) |[alexphilin](https://github.com/alexphilin) |[AlexSkorkin](https://github.com/AlexSkorkin) |[alexwybraniec](https://github.com/alexwybraniec) |[AnastasiaIvanova8](https://github.com/AnastasiaIvanova8) |\n\n[\u003cimg alt=\"andrewbranch\" src=\"https://avatars.githubusercontent.com/u/3277153?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/andrewbranch) |[\u003cimg alt=\"AndreyBelym\" src=\"https://avatars.githubusercontent.com/u/4479386?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/AndreyBelym) |[\u003cimg alt=\"AndyWendt\" src=\"https://avatars.githubusercontent.com/u/6130713?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/AndyWendt) |[\u003cimg alt=\"AnnaKondratova\" src=\"https://avatars.githubusercontent.com/u/27012218?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/AnnaKondratova) |[\u003cimg alt=\"anthophobiac\" src=\"https://avatars.githubusercontent.com/u/16448031?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/anthophobiac) |[\u003cimg alt=\"Artem-Babich\" src=\"https://avatars.githubusercontent.com/u/51639399?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Artem-Babich) |\n:---: |:---: |:---: |:---: |:---: |:---: |\n[andrewbranch](https://github.com/andrewbranch) |[AndreyBelym](https://github.com/AndreyBelym) |[AndyWendt](https://github.com/AndyWendt) |[AnnaKondratova](https://github.com/AnnaKondratova) |[anthophobiac](https://github.com/anthophobiac) |[Artem-Babich](https://github.com/Artem-Babich) |\n\n[\u003cimg alt=\"Arthy000\" src=\"https://avatars.githubusercontent.com/u/1800622?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Arthy000) |[\u003cimg alt=\"augustomezencio-hotmart\" src=\"https://avatars.githubusercontent.com/u/25016353?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/augustomezencio-hotmart) |[\u003cimg alt=\"bdwain\" src=\"https://avatars.githubusercontent.com/u/3982094?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/bdwain) |[\u003cimg alt=\"benmonro\" src=\"https://avatars.githubusercontent.com/u/399236?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/benmonro) |[\u003cimg alt=\"beyondcompute\" src=\"https://avatars.githubusercontent.com/u/248055?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/beyondcompute) |[\u003cimg alt=\"bill-looby-i\" src=\"https://avatars.githubusercontent.com/u/51128939?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/bill-looby-i) |\n:---: |:---: |:---: |:---: |:---: |:---: |\n[Arthy000](https://github.com/Arthy000) |[augustomezencio-hotmart](https://github.com/augustomezencio-hotmart) |[bdwain](https://github.com/bdwain) |[benmonro](https://github.com/benmonro) |[beyondcompute](https://github.com/beyondcompute) |[bill-looby-i](https://github.com/bill-looby-i) |\n\n[\u003cimg alt=\"bsmithb2\" src=\"https://avatars.githubusercontent.com/u/1773789?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/bsmithb2) |[\u003cimg alt=\"caseyWebb\" src=\"https://avatars.githubusercontent.com/u/5419074?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/caseyWebb) |[\u003cimg alt=\"cdrini\" src=\"https://avatars.githubusercontent.com/u/6251786?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/cdrini) |[\u003cimg alt=\"cgfarmer4\" src=\"https://avatars.githubusercontent.com/u/336449?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/cgfarmer4) |[\u003cimg alt=\"Chris-Greaves\" src=\"https://avatars.githubusercontent.com/u/28542943?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Chris-Greaves) |[\u003cimg alt=\"churkin\" src=\"https://avatars.githubusercontent.com/u/5182202?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/churkin) |\n:---: |:---: |:---: |:---: |:---: |:---: |\n[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) |[churkin](https://github.com/churkin) |\n\n[\u003cimg alt=\"dej611\" src=\"https://avatars.githubusercontent.com/u/924948?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/dej611) |[\u003cimg alt=\"DIRECTcut\" src=\"https://avatars.githubusercontent.com/u/49588154?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/DIRECTcut) |[\u003cimg alt=\"Dmitry-Ostashev\" src=\"https://avatars.githubusercontent.com/u/24777868?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Dmitry-Ostashev) |[\u003cimg alt=\"eignatyev\" src=\"https://avatars.githubusercontent.com/u/12494773?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/eignatyev) |[\u003cimg alt=\"ericyd\" src=\"https://avatars.githubusercontent.com/u/8379268?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/ericyd) |[\u003cimg alt=\"Farfurix\" src=\"https://avatars.githubusercontent.com/u/30019338?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Farfurix) |\n:---: |:---: |:---: |:---: |:---: |:---: |\n[dej611](https://github.com/dej611) |[DIRECTcut](https://github.com/DIRECTcut) |[Dmitry-Ostashev](https://github.com/Dmitry-Ostashev) |[eignatyev](https://github.com/eignatyev) |[ericyd](https://github.com/ericyd) |[Farfurix](https://github.com/Farfurix) |\n\n[\u003cimg alt=\"flora8984461\" src=\"https://avatars.githubusercontent.com/u/39588094?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/flora8984461) |[\u003cimg alt=\"GeoffreyBooth\" src=\"https://avatars.githubusercontent.com/u/456802?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/GeoffreyBooth) |[\u003cimg alt=\"helen-dikareva\" src=\"https://avatars.githubusercontent.com/u/12034551?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/helen-dikareva) |[\u003cimg alt=\"honsq90\" src=\"https://avatars.githubusercontent.com/u/1791439?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/honsq90) |[\u003cimg alt=\"infctr\" src=\"https://avatars.githubusercontent.com/u/15550153?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/infctr) |[\u003cimg alt=\"inikulin\" src=\"https://avatars.githubusercontent.com/u/453071?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/inikulin) |\n:---: |:---: |:---: |:---: |:---: |:---: |\n[flora8984461](https://github.com/flora8984461) |[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) |\n\n[\u003cimg alt=\"Ivan-Katovich\" src=\"https://avatars.githubusercontent.com/u/7858279?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Ivan-Katovich) |[\u003cimg alt=\"jamesgeorge007\" src=\"https://avatars.githubusercontent.com/u/25279263?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/jamesgeorge007) |[\u003cimg alt=\"jaypea\" src=\"https://avatars.githubusercontent.com/u/367199?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/jaypea) |[\u003cimg alt=\"josephmalam\" src=\"https://avatars.githubusercontent.com/u/47305920?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/josephmalam) |[\u003cimg alt=\"kanhaiya15\" src=\"https://avatars.githubusercontent.com/u/38152453?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/kanhaiya15) |[\u003cimg alt=\"karolnowinski\" src=\"https://avatars.githubusercontent.com/u/28826226?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/karolnowinski) |\n:---: |:---: |:---: |:---: |:---: |:---: |\n[Ivan-Katovich](https://github.com/Ivan-Katovich) |[jamesgeorge007](https://github.com/jamesgeorge007) |[jaypea](https://github.com/jaypea) |[josephmalam](https://github.com/josephmalam) |[kanhaiya15](https://github.com/kanhaiya15) |[karolnowinski](https://github.com/karolnowinski) |\n\n[\u003cimg alt=\"kirovboris\" src=\"https://avatars.githubusercontent.com/u/3633477?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/kirovboris) |[\u003cimg alt=\"kisrefod\" src=\"https://avatars.githubusercontent.com/u/27427579?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/kisrefod) |[\u003cimg alt=\"LavrovArtem\" src=\"https://avatars.githubusercontent.com/u/5373460?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/LavrovArtem) |[\u003cimg alt=\"link89\" src=\"https://avatars.githubusercontent.com/u/3314130?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/link89) |[\u003cimg alt=\"lzxb\" src=\"https://avatars.githubusercontent.com/u/8424643?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/lzxb) |[\u003cimg alt=\"macdonaldr93\" src=\"https://avatars.githubusercontent.com/u/5184848?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/macdonaldr93) |\n:---: |:---: |:---: |:---: |:---: |:---: |\n[kirovboris](https://github.com/kirovboris) |[kisrefod](https://github.com/kisrefod) |[LavrovArtem](https://github.com/LavrovArtem) |[link89](https://github.com/link89) |[lzxb](https://github.com/lzxb) |[macdonaldr93](https://github.com/macdonaldr93) |\n\n[\u003cimg alt=\"MargaritaLoseva\" src=\"https://avatars.githubusercontent.com/u/12034505?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/MargaritaLoseva) |[\u003cimg alt=\"Marketionist\" src=\"https://avatars.githubusercontent.com/u/534603?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Marketionist) |[\u003cimg alt=\"MatthewNielsen27\" src=\"https://avatars.githubusercontent.com/u/35040439?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/MatthewNielsen27) |[\u003cimg alt=\"mattkubej\" src=\"https://avatars.githubusercontent.com/u/86790511?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/mattkubej) |[\u003cimg alt=\"mattmanske\" src=\"https://avatars.githubusercontent.com/u/2078566?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/mattmanske) |[\u003cimg alt=\"mcjim\" src=\"https://avatars.githubusercontent.com/u/485440?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/mcjim) |\n:---: |:---: |:---: |:---: |:---: |:---: |\n[MargaritaLoseva](https://github.com/MargaritaLoseva) |[Marketionist](https://github.com/Marketionist) |[MatthewNielsen27](https://github.com/MatthewNielsen27) |[mattkubej](https://github.com/mattkubej) |[mattmanske](https://github.com/mattmanske) |[mcjim](https://github.com/mcjim) |\n\n[\u003cimg alt=\"miherlosev\" src=\"https://avatars.githubusercontent.com/u/4133518?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/miherlosev) |[\u003cimg alt=\"morfey13\" src=\"https://avatars.githubusercontent.com/u/2048346?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/morfey13) |[\u003cimg alt=\"mostlyfabulous\" src=\"https://avatars.githubusercontent.com/u/15062048?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/mostlyfabulous) |[\u003cimg alt=\"murajun1978\" src=\"https://avatars.githubusercontent.com/u/911903?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/murajun1978) |[\u003cimg alt=\"NickCis\" src=\"https://avatars.githubusercontent.com/u/174561?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/NickCis) |[\u003cimg alt=\"Nuarat\" src=\"https://avatars.githubusercontent.com/u/11683678?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Nuarat) |\n:---: |:---: |:---: |:---: |:---: |:---: |\n[miherlosev](https://github.com/miherlosev) |[morfey13](https://github.com/morfey13) |[mostlyfabulous](https://github.com/mostlyfabulous) |[murajun1978](https://github.com/murajun1978) |[NickCis](https://github.com/NickCis) |[Nuarat](https://github.com/Nuarat) |\n\n[\u003cimg alt=\"Ogurecher\" src=\"https://avatars.githubusercontent.com/u/28919867?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Ogurecher) |[\u003cimg alt=\"PayBas\" src=\"https://avatars.githubusercontent.com/u/3015760?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/PayBas) |[\u003cimg alt=\"pgorny\" src=\"https://avatars.githubusercontent.com/u/70758186?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/pgorny) |[\u003cimg alt=\"pietrovich\" src=\"https://avatars.githubusercontent.com/u/1728613?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/pietrovich) |[\u003cimg alt=\"radarhere\" src=\"https://avatars.githubusercontent.com/u/3112309?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/radarhere) |[\u003cimg alt=\"raspo\" src=\"https://avatars.githubusercontent.com/u/927264?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/raspo) |\n:---: |:---: |:---: |:---: |:---: |:---: |\n[Ogurecher](https://github.com/Ogurecher) |[PayBas](https://github.com/PayBas) |[pgorny](https://github.com/pgorny) |[pietrovich](https://github.com/pietrovich) |[radarhere](https://github.com/radarhere) |[raspo](https://github.com/raspo) |\n\n[\u003cimg alt=\"rbardini\" src=\"https://avatars.githubusercontent.com/u/874370?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/rbardini) |[\u003cimg alt=\"renancouto\" src=\"https://avatars.githubusercontent.com/u/230893?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/renancouto) |[\u003cimg alt=\"rob4629\" src=\"https://avatars.githubusercontent.com/u/37812673?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/rob4629) |[\u003cimg alt=\"rueyaa332266\" src=\"https://avatars.githubusercontent.com/u/8298718?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/rueyaa332266) |[\u003cimg alt=\"sgrillon14\" src=\"https://avatars.githubusercontent.com/u/5530550?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/sgrillon14) |[\u003cimg alt=\"smockle\" src=\"https://avatars.githubusercontent.com/u/3104489?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/smockle) |\n:---: |:---: |:---: |:---: |:---: |:---: |\n[rbardini](https://github.com/rbardini) |[renancouto](https://github.com/renancouto) |[rob4629](https://github.com/rob4629) |[rueyaa332266](https://github.com/rueyaa332266) |[sgrillon14](https://github.com/sgrillon14) |[smockle](https://github.com/smockle) |\n\n[\u003cimg alt=\"stefanschenk\" src=\"https://avatars.githubusercontent.com/u/12391671?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/stefanschenk) |[\u003cimg alt=\"superroma\" src=\"https://avatars.githubusercontent.com/u/8553464?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/superroma) |[\u003cimg alt=\"sylbru\" src=\"https://avatars.githubusercontent.com/u/3757523?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/sylbru) |[\u003cimg alt=\"taiki-fw\" src=\"https://avatars.githubusercontent.com/u/43266182?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/taiki-fw) |[\u003cimg alt=\"testcafe-build-bot\" src=\"https://avatars.githubusercontent.com/u/13555664?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/testcafe-build-bot) |[\u003cimg alt=\"theghostbel\" src=\"https://avatars.githubusercontent.com/u/482899?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/theghostbel) |\n:---: |:---: |:---: |:---: |:---: |:---: |\n[stefanschenk](https://github.com/stefanschenk) |[superroma](https://github.com/superroma) |[sylbru](https://github.com/sylbru) |[taiki-fw](https://github.com/taiki-fw) |[testcafe-build-bot](https://github.com/testcafe-build-bot) |[theghostbel](https://github.com/theghostbel) |\n\n[\u003cimg alt=\"titerman\" src=\"https://avatars.githubusercontent.com/u/43554315?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/titerman) |[\u003cimg alt=\"tobiasbueschel\" src=\"https://avatars.githubusercontent.com/u/13087421?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/tobiasbueschel) |[\u003cimg alt=\"varunkumar\" src=\"https://avatars.githubusercontent.com/u/509433?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/varunkumar) |[\u003cimg alt=\"VasilyStrelyaev\" src=\"https://avatars.githubusercontent.com/u/11459924?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/VasilyStrelyaev) |[\u003cimg alt=\"vitalics\" src=\"https://avatars.githubusercontent.com/u/8816260?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/vitalics) |[\u003cimg alt=\"Vla8islav\" src=\"https://avatars.githubusercontent.com/u/1637557?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Vla8islav) |\n:---: |:---: |:---: |:---: |:---: |:---: |\n[titerman](https://github.com/titerman) |[tobiasbueschel](https://github.com/tobiasbueschel) |[varunkumar](https://github.com/varunkumar) |[VasilyStrelyaev](https://github.com/VasilyStrelyaev) |[vitalics](https://github.com/vitalics) |[Vla8islav](https://github.com/Vla8islav) |\n\n[\u003cimg alt=\"wentwrong\" src=\"https://avatars.githubusercontent.com/u/26363017?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/wentwrong) |[\u003cimg alt=\"b12031106\" src=\"https://avatars.githubusercontent.com/u/2063566?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/b12031106) |[\u003cimg alt=\"danielroe\" src=\"https://avatars.githubusercontent.com/u/28706372?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/danielroe) |[\u003cimg alt=\"danieltroger\" src=\"https://avatars.githubusercontent.com/u/4047180?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/danieltroger) |[\u003cimg alt=\"DevSide\" src=\"https://avatars.githubusercontent.com/u/6873926?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/DevSide) |[\u003cimg alt=\"intermike\" src=\"https://avatars.githubusercontent.com/u/10540148?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/intermike) |\n:---: |:---: |:---: |:---: |:---: |:---: |\n[wentwrong](https://github.com/wentwrong) |[b12031106](https://github.com/b12031106) |[danielroe](https://github.com/danielroe) |[danieltroger](https://github.com/danieltroger) |[DevSide](https://github.com/DevSide) |[intermike](https://github.com/intermike) |\n\n[\u003cimg alt=\"kirillsalikhov\" src=\"https://avatars.githubusercontent.com/u/1948153?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/kirillsalikhov) |[\u003cimg alt=\"michaelficarra\" src=\"https://avatars.githubusercontent.com/u/218840?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/michaelficarra) |[\u003cimg alt=\"rr13k\" src=\"https://avatars.githubusercontent.com/u/45162461?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/rr13k) |[\u003cimg alt=\"tomashanacek\" src=\"https://avatars.githubusercontent.com/u/1244486?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/tomashanacek) |[\u003cimg alt=\"TrevorKarjanis\" src=\"https://avatars.githubusercontent.com/u/2351292?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/TrevorKarjanis) |\n:---: |:---: |:---: |:---: |:---: |\n[kirillsalikhov](https://github.com/kirillsalikhov) |[michaelficarra](https://github.com/michaelficarra) |[rr13k](https://github.com/rr13k) |[tomashanacek](https://github.com/tomashanacek) |[TrevorKarjanis](https://github.com/TrevorKarjanis) |\n\n## Plugins\n\nTestCafe developers and community members made these plugins:\n\n* **Browser Providers**\u003cbr/\u003e\n  Use TestCafe with cloud browser providers and emulators.\n  * [SauceLabs provider](https://github.com/DevExpress/testcafe-browser-provider-saucelabs) (by [@AndreyBelym](https://github.com/AndreyBelym))\n  * [BrowserStack provider](https://github.com/DevExpress/testcafe-browser-provider-browserstack) (by [@AndreyBelym](https://github.com/AndreyBelym))\n  * [CrossBrowserTesting provider](https://github.com/sijosyn/testcafe-browser-provider-crossbrowsertesting) (by [@sijosyn](https://github.com/sijosyn))\n  * [LambdaTest provider](https://github.com/LambdaTest/testcafe-browser-provider-lambdatest) (by [@kanhaiya15](https://github.com/kanhaiya15))\n  * [Nightmare headless provider](https://github.com/ryx/testcafe-browser-provider-nightmare) (by [@ryx](https://github.com/ryx))\n  * [Testingbot provider](https://github.com/testingbot/testcafe-browser-provider-testingbot) (by [@testingbot](https://github.com/testingbot))\n  * [fbsimctl iOS emulator](https://github.com/Ents24/testcafe-browser-provider-fbsimctl) (by [@ents24](https://github.com/Ents24))\n  * [Electron](https://github.com/DevExpress/testcafe-browser-provider-electron) (by [@AndreyBelym](https://github.com/AndreyBelym))\n  * [Puppeteer](https://github.com/jdobosz/testcafe-browser-provider-puppeteer) (by [@jdobosz](https://github.com/jdobosz))\n  * [Puppeteer Chromium](https://github.com/stefanschenk/testcafe-browser-provider-puppeteer-chromium) (by [@stefanschenk](https://github.com/stefanschenk))\n\n* **Framework-Specific Selectors**\u003cbr/\u003e\n  Work with page elements in a way that is native to your framework.\n  * [React](https://github.com/DevExpress/testcafe-react-selectors) (by [@kirovboris](https://github.com/kirovboris))\n  * [Angular](https://github.com/DevExpress/testcafe-angular-selectors) (by [@miherlosev](https://github.com/miherlosev))\n  * [Vue](https://github.com/devexpress/testcafe-vue-selectors) (by [@miherlosev](https://github.com/miherlosev))\n  * [Aurelia](https://github.com/miherlosev/testcafe-aurelia-selectors) (by [@miherlosev](https://github.com/miherlosev))\n\n* **Plugins for Task Runners**\u003cbr/\u003e\n  Integrate TestCafe into your project's workflow.\n  * [Grunt](https://github.com/crudo/grunt-testcafe) (by [@crudo](https://github.com/crudo))\n  * [Gulp](https://github.com/DevExpress/gulp-testcafe) (by [@inikulin](https://github.com/inikulin))\n\n* **Custom Reporters**\u003cbr/\u003e\n  View test results in different formats.\n  * [TeamCity](https://github.com/Soluto/testcafe-reporter-teamcity) (by [@nirsky](https://github.com/nirsky))\n  * [Slack](https://github.com/Shafied/testcafe-reporter-slack) (by [@Shafied](https://github.com/Shafied))\n  * [NUnit](https://github.com/AndreyBelym/testcafe-reporter-nunit) (by [@AndreyBelym](https://github.com/AndreyBelym))\n  * [TimeCafe](https://github.com/jimthedev/timecafe) (by [@jimthedev](https://github.com/jimthedev))\n  * [Tesults](https://github.com/tesults/testcafe-reporter-tesults) (by [@Tesults](https://github.com/tesults))\n\n* **GitHub Action**\u003cbr/\u003e\n  Run TestCafe tests in GitHub Actions workflows.\n  * [Run TestCafe](https://github.com/DevExpress/testcafe-action/)\n\n* **Test Accessibility**\u003cbr/\u003e\n  Find accessibility issues in your web app.\n  * [axe-testcafe](https://github.com/helen-dikareva/axe-testcafe) (by [@helen-dikareva](https://github.com/helen-dikareva))\n\n* **IDE Plugins**\u003cbr/\u003e\n  Run tests and view results from your favorite IDE.\n  * [TestCafe Test Runner](https://github.com/romanresh/vscode-testcafe) for Visual Studio Code (by [@romanresh](https://github.com/romanresh))\n  * [TestLatte](https://github.com/Selminha/testlatte) for Visual Studio Code (by [@Selminha](https://github.com/Selminha))\n  * [TestCafe runner for Webstorm](https://github.com/lilbaek/webstorm-testcafe) (by [@lilbaek](https://github.com/lilbaek))\n  * [Code snippets for TestCafe](https://github.com/hdorgeval/testcafe-snippets) (by [@hdorgeval](https://github.com/hdorgeval))\n  * [SublimeText](https://github.com/churkin/testcafe-sublimetext) (by [@churkin](https://github.com/churkin))\n\n* **ESLint**\u003cbr/\u003e\n  Use ESLint when writing and editing TestCafe tests.\n  * [ESLint plugin](https://github.com/miherlosev/eslint-plugin-testcafe) (by [@miherlosev](https://github.com/miherlosev))\n\n* **Cucumber Support**\u003cbr/\u003e\n  Create and run tests that use the Cucumber syntax.\n  * [gherkin-testcafe](https://github.com/Arthy000/gherkin-testcafe) (by [@kiwigrid](https://github.com/kiwigrid), now maintained by [@Arthy000](https://github.com/Arthy000)) - run your Cucumber tests with TestCafe as a backend. Requires [CucumberJS](https://github.com/cucumber/cucumber-js).\n  * [testcafe-cucumber-steps](https://github.com/Marketionist/testcafe-cucumber-steps) (by [@Marketionist](https://github.com/Marketionist)) - provides predefined Cucumber steps for [gherkin-testcafe](https://github.com/Arthy000/gherkin-testcafe).\n\n## Different Versions of TestCafe\n\n| \u0026nbsp; | [TestCafe](https://testcafe.io) | [TestCafe Studio](https://www.devexpress.com/products/testcafestudio/?utm_source=github.com\u0026utm_medium=referral\u0026utm_campaign=tc-gh-diff)  |\n| ------ |:-------------------------------------------------:|:-----------------------------------------------------------------------:|\n| No need for WebDriver, browser plugins or other tools | \u0026#10003; | \u0026#10003; |\n| Cross-platform and cross-browser out of the box | \u0026#10003; | \u0026#10003; |\n| Write tests in the latest JavaScript or TypeScript | \u0026#10003; | \u0026#10003; |\n| Clear and flexible [API](https://testcafe.io/documentation/402632/reference) supports ES6 and [PageModel pattern](https://testcafe.io/documentation/402826/guides/concepts/page-model) | \u0026#10003; | \u0026#10003; |\n| Stable tests due to the [Smart Assertion Query Mechanism](https://testcafe.io/documentation/402837/guides/basic-guides/assert#smart-assertion-query-mechanism) | \u0026#10003; | \u0026#10003; |\n| 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) | \u0026#10003; | \u0026#10003; |\n| Custom reporter plugins | \u0026#10003; | \u0026#10003; |\n| Use third-party Node.js modules in test scripts | \u0026#10003; | \u0026#10003; |\n| Integration with popular CI systems | \u0026#10003; | \u0026nbsp;\u0026#10003;\\* |\n| Free and open-source | \u0026#10003; | \u0026nbsp; |\n| [Visual Test Recorder](https://docs.devexpress.com/TestCafeStudio/400165/guides/record-tests?utm_source=github.com\u0026utm_medium=referral\u0026utm_campaign=tc-gh-diff) | \u0026nbsp; | \u0026#10003; |\n| [Interactive Test Editor](https://docs.devexpress.com/TestCafeStudio/400190/user-interface/test-editor?utm_source=github.com\u0026utm_medium=referral\u0026utm_campaign=tc-gh-diff) | \u0026nbsp; | \u0026#10003; |\n| [Automatic Selector Generation](https://docs.devexpress.com/TestCafeStudio/400407/guides/record-tests/element-selectors#auto-generated-element-selectors?utm_source=github.com\u0026utm_medium=referral\u0026utm_campaign=tc-gh-diff) | \u0026nbsp; | \u0026#10003; |\n| [Run Configuration Manager](https://docs.devexpress.com/TestCafeStudio/400189/user-interface/run-configurations-dialog?utm_source=github.com\u0026utm_medium=referral\u0026utm_campaign=tc-gh-diff) | \u0026nbsp; | \u0026#10003; |\n| [IDE-like GUI](https://docs.devexpress.com/TestCafeStudio/400181/user-interface/code-editor?utm_source=github.com\u0026utm_medium=referral\u0026utm_campaign=tc-gh-diff) | \u0026nbsp; | \u0026#10003; |\n\n\\* You can use open-source TestCafe to run TestCafe Studio tests in CI systems.\n\n## Badge\n\nShow everyone you are using TestCafe: ![Tested with TestCafe](https://img.shields.io/badge/tested%20with-TestCafe-2fa4cf.svg)\n\nTo display this badge, add the following code to your repository readme:\n\n```html\n\u003ca href=\"https://github.com/DevExpress/testcafe\"\u003e\n    \u003cimg alt=\"Tested with TestCafe\" src=\"https://img.shields.io/badge/tested%20with-TestCafe-2fa4cf.svg\"\u003e\n\u003c/a\u003e\n```\n\n## Thanks to BrowserStack\n\nWe are grateful to BrowserStack for providing the infrastructure that we use to test code in this repository.\n\n\u003ca href=\"https://www.browserstack.com/\"\u003e\u003cimg alt=\"BrowserStack Logo\" src=\"https://raw.github.com/DevExpress/testcafe/master/media/BrowserStack.png\"/\u003e\u003c/a\u003e\n\n## License\n\nCode released under the [MIT license](LICENSE).\n\n## Creators\n\nDeveloper Express Inc. ([https://devexpress.com](https://devexpress.com))\n","funding_links":[],"categories":["JavaScript","Packages","Testing Frameworks","Testing Frameworks [🔝](#readme)","包","测试框架","目录","NodeJS","typescript","Testing","Unit Testing","Back-End Development","browser","Tools and frameworks (a-z↓)","Tools and frameworks"],"sub_categories":["Testing","Frameworks","测试","框架","测试相关","Other Frameworks"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDevExpress%2Ftestcafe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FDevExpress%2Ftestcafe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDevExpress%2Ftestcafe/lists"}