UI Testing

You can write UI tests using Cypress. It is a NodeJS based full-stack testing framework which doesn't rely on Selenium.

To write integration tests, create a .js file in the cypress/integration directory.


Here is an example of an integration test to check insertion of a ToDo

context('ToDo', () => {
    before(() => {
        cy.login('Administrator', 'admin');

    it('creates a new todo', () => {
        cy.visit('/desk#Form/ToDo/New ToDo 1');
        cy.fill_field('description', 'this is a test todo', 'Text Editor').blur();
        cy.get('.page-title').should('contain', 'Not Saved');
        cy.location('hash').should('eq', '#List/ToDo/List');
        cy.get('.list-row').should('contain', 'this is a test todo');

Running Cypress Locally

Cypress uses any chromium based browser installed on your system to run tests. Every app has it's own cypress test suite. To run test for an app, run the following command from the frappe-bench directory.

bench --site [sitename] run-ui-tests [app]

This will open the Cypress Electron shell where you can run any test manually or run all of the tests.

You can also run tests in headless mode.

# run in headless mode
bench --site [sitename] run-ui-tests [app] --headless

To enable cypress parallel testing you can pass --parallel flag. More information on how cypress parallel tests work can be found here.

# run tests parallelly
bench --site [sitename] run-ui-tests [app] --parallel