Scenario Driven
Write acceptance tests from user's perspective. Make tests readable and easy to follow.Driver Agnostic
Run your tests via Playwright, WebDriver, Puppeteer, TestCafe, Protractor, Appium. The code is the same. Learn MoreInteractive Debug
Control tests as they run. Pause tests at any point and execute commands to try locators. Learn MoreRich Locators
Use semantic locators, CSS, XPath to find elements on page Learn MorePageObjects
PageObjects are essential to write stable and reusable code! Learn MoreWeb & Mobile Testing
Test native mobile apps using Appium or Detox. Learn MoreCucumber-like BDD
Automate business scenarios as you do in CucumberJS Learn MoreAPI Testing
Write tests for REST and GraphQL APIs Learn MoreData Management
Create fake data and clean it up via REST API Learn MoreParallel Testing
Tests are split into chunks and executed in multiple processes. Learn MoreReduced Flackiness
Automatically retry failed steps Learn MoreAI-powered
Use OpenAI GPT to heal failing tests Learn More# Realworld Example
Can we use it for long scenarios? Sure!
const { faker } = require('@faker-js/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
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'); // 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
Loved By Teams
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.
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.
Frontend Tech Lead at My Porsche Core
β Try Testomat.io, next-gen Test Management system for automated & manual tests.
Brought to you by creators of CodeceptJS.