Supercharged
End 2 End Testing

Quickstart

Plays nicely with your favorite frameworks → React Vue Angular

Scenario Driven
Write acceptance tests from user's perspective. Make tests readable and easy to follow.
Driver Agnostic
Run your tests via WebDriver, Puppeteer, TestCafe, Protractor, Appium. The code is the same. Learn More
Interactive Debug
Control tests as they run. Pause tests at any point and execute commands to try locators. Learn More
Rich Locators
Use semantic locators, CSS, XPath to find elements on page Learn More
PageObjects
PageObjects are essential to write stable and reusable code! Learn More
Web & Mobile Testing
Test native mobile apps using Appium or Detox. Learn More
Cucumber-like BDD
Automate business scenarios as you do in CucumberJS Learn More
Beautiful Reports
Integrated with Allure reporter Learn More
Data Management
Create fake data and clean it up via REST API Learn More
Parallel Testing
Tests are split into chunks and executed in multiple processes. Learn More
Reduced Flackiness
Automatically retry failed steps Learn More
Multi-Session Testing
Run a test using several browser windows

# Realworld Example

Can we use it for long scenarios? Sure!

const faker = require('faker');                               // Use 3rd-party JS code

Feature('Store');

Scenario('Create a new store', async (I, login, SettingsPage) => {
  const storeName = faker.lorem.slug();
  login('customer');                                          // Login customer from saved cookies
  I.mockRequest('GET', '/support-chat');                      // Mock HTTP requests with Polly
  SettingsPage.open();                                        // Use Page objects
  I.dontSee(storeName, '.settings');                          // Assert text not present inside an element (located by CSS)
  I.click('Add', '.settings');                                // Click link by text inside element (located by CSS)
  I.fillField('Store Name', storeName);                       // Fill fields by labels or placeholders
  I.fillField('Email', faker.internet.email());
  I.fillField('Telephone', faker.phone.phoneNumberFormat());
  I.selectInDropdown('Status', 'Active');                     // Use custom methods
  I.retry(2).click('Create');                                 // Auto-retry flaky step
  I.waitInUrl('/settings/setup/stores');                      // Explicit waiter
  I.see(storeName, '.settings');                              // Assert text present inside an element (located by CSS)
  const storeId = await I.grabTextFrom('#store-id');          // use await to get information from browser
  I.say(`Created a store with ${storeId}`);                   // print custom comments
}).tag('stores');`;

Trusted By Enterprises

We have been using CodeceptJS as our UI testing framework, and it has made writing tests so simp le for us, the amount of options and features available in CodeceptJS just out of the box are perfect for us to test an application like Percona Monitoring and Management (PMM), with so many dashboards & Metric plots. We would recommend CodeceptJS to anyone who is looking for a Javascript based testing framework.

Puneet Kala
Frontend QA Automation Engineer at Percona

We were searching for a solution to write tests which are good to read and easy to write. It must be able to run on several browsers and understandable across different teams with different knowledge and different frameworks in usage. CodeceptJS helps us with all this and much more at Porsche and we are happy that we made that decision.

Mitko Tschimev
Frontend Tech Lead at My Porsche Core
CodeceptJS offers enterprise support!
Contact SDCLabs for consulting, trainings, or hire engineers to write tests for you.