End-to-end testing, simplified

No WebDriver required. No manual timeouts needed. Cross-browser testing out-of-the-box.
npm i -g testcafe
and Create your first test today

Why people love TestCafe

  • 1 Minute to Set Up

    1 Minute to Set Up

    TestCafe does not require WebDriver or other testing software. It runs on Node.js and uses the browsers you already have.
  • Clean code

    Clean code

    TestCafe frees you from the need to insert manual timeouts and use cumbersome boilerplate expressions. You’ll spend less time tracking down annoying issues and more time doing what matters most.
  • Free and Open Source

    Free and Open Source

    TestCafe is available for free and distributed under the MIT license. We are committed to our open-source community and are actively extending TestCafe's capabilities.

Write tests with ease

TestCafe’s intuitive syntax makes teams more productive from day one.
Check the test below and see for yourself.
TestCafe 😊
fixture `Pizza Palace`
    .page `https://testcafe-demo-page.glitch.me/`;

test('Submit a form', async t => {
    await t
        // automatically dismiss dialog boxes
        .setNativeDialogHandler(() => true)

        // drag the pizza size slider
        .drag('.noUi-handle', 100, 0)

        // select the toppings
        .click('#step2 .next-step')

        // fill the address form
        .typeText('#phone-input', '+1-541-754-3001')
        .click('#step3 .next-step')

        // zoom into the iframe map
        .switchToIframe('.restaurant-location iframe')
        .click('button[title="Zoom in"]')

        // submit the order
Selenium (JavaScript) 😕
const {Builder, By, Key, until} = require('selenium-webdriver');

(async function pizzaPalace() {

    const driver = await new Builder().forBrowser('firefox').build();
    try {
        await driver.get('https://testcafe-demo-page.glitch.me/');

        // drag the pizza size slider
        const sourceEle = driver.findElement(By.className("noUi-handle"));
        const actions = driver.actions({async: true});
        await actions.dragAndDrop(sourceEle, {x:100, y:0}).perform();

        // select the toppings
        await driver.findElement(By.className("next-step")).click();
        await driver.findElement(By.css('label[for="pepperoni"]')).click(); 
        await driver.findElement(By.css('#step2 .next-step')).click();

        // fill the address form
        await driver.wait(until.elementLocated(By.css('.google-map')),10000);
        await driver.findElement(By.className("confirm-address")).click();   
        await driver.findElement(By.id('phone-input')).sendKeys('+1-541-754-3001');
        await driver.findElement(By.css('#step3 .next-step')).click();

        // zoom into the iframe map
        await driver.wait(until.elementLocated(By.css('.restaurant-location iframe')),10000);
        const restaurantLocationFrame = await driver.findElement(By.css('.restaurant-location iframe'));
        await driver.switchTo().frame(restaurantLocationFrame);
        await driver.wait(until.elementLocated(By.css('button[title="Zoom in"]')),10000);
        await driver.findElement(By.css('button[title="Zoom in"]')).click();

        // submit the order
        await driver.switchTo().defaultContent();
        await driver.findElement(By.className("complete-order")).click();

        // dismiss the confirmation dialog
        await driver.wait(until.alertIsPresent());
        const confirmationMessage = driver.switchTo().alert();
        await confirmationMessage.accept();
    } finally {
        await driver.quit();

Test in every browser that matters

Don’t let Internet Explorer push you over the Edge. Run your tests in desktop browsers and headless browsers. Connect to remote testing servers, mobile devices and cloud browser farms.
  • chrome
  • firefox
  • safari
  • edge
  • ie
  • opera
  • browserstack
  • lambdatest

Deploy without fear

  • CI/CD-ready


    TestCafe integrates with all popular CI/CD solutions.
  • Concurrent test runs

    Concurrent test runs

    Run your tests in multiple browsers at once to save time and computing resources.
  • If something goes wrong...

    If something goes wrong...

    Use the built-in Debug Mode to pin-point the source of your frustration.
Why TestCafe?

Automate Your Web Testing – 100% Code‑Free!

You can now visually record automated test scripts. Code-free tests lower the learning curve and improve productivity.
Try TestCafe Studio IDE

Comments from your peers

  • image

    Rodrigo Finger

    @RodrigoFinger@DXTestCafe is the best automated front-end testing tool I've used so far. @TestCafeStudio is a good starting point to explore its features, easy to use for the testing team. Writing a js script with it allows to build more complex test scenarios. Easy and fast to setup and use.
  • image

    Christine Zierold

    @ChrisZie_Since I'm using #testcafe on a daily basis now to build my #automatedUItest, I love it every day more and more. The code looks so clean and I don't need to 'waitForElementVisible' or just 'wait()'. Everyone should try this out. It is amazing. #TestAutomation #QAisAwesome
  • image

    Damien Hampton

    @damien_hamptonI used to hate JavaScript, but that was because I didn't understand it. Now I can't get enough! More #javascript koolaid: TestCafé looks like a very cool UI testing framework: buff.ly/2EeJUPX Very easy to use! @dxtestcafe
Get Started