Plays nicely with your favorite frameworks → React Vue Angular

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

kala
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
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.