As promised in the previous post this one will be about a basic setup using Cypress. We will also dive a bit into how we could make the same action in different ways and obviously make it better.
You must have the following programs installed on your computer before we can begin:
Create a new project folder first, then go there in your terminal. After that, execute the following command to launch a fresh Node.js project:
npm init -y
This will create a new package.json file in your project folder.
Then, use the following command to install Cypress as a development dependency:
npm install cypress --save-dev
By doing this, Cypress will be installed and added to your package.json file’s devDependencies section, also you should be able to see the node_modules folder and the package-lock.json present.
You can use Cypress now that it has been installed by executing the following command:
npx cypress open
The Welcome to Cypress! Test runner screen should be displayed and you should be able to click on “E2E Testing”. Leave the default config as is and click the “Continue” button. You should see the list of browsers detected by cypress and also a folder name “cypress” should be created in the project folder.
Select your preferred browser and click on the “Start E2E Testing in <browserName>”, I chose Chrome.
If you want to see all the examples that Cypress has to offer click on the “Scaffold example specs”, we will go with the “Create new spec” and rename the spec to “firstTest”. Your path should look like this “cypress/e2e/firstTest.cy.js” click “Create spec” and click on the “Run spec”.
Your test should “pass” without issues.
Let’s create the following login test on the saucedemo.com page.
This code defines a test suite called “Login” and a test case called “Should log in without issues”.
The test case accesses the website at https://www.saucedemo.com, logs in with a username and password, and then confirms that the URL contains “inventory.html.”
Click firstTest.cy.js in the Cypress Test Runner to launch the test. The test will be executed in a browser after this is clicked. A green checkmark should appear next to the test case name indicating that the test has passed.
Create a new file called login-data.json in the cypress/fixtures folder, and add the following JSON data:
This file contains an array of users, each with a username and password property. You can add different data to this file if you want to test different login scenarios.
The test hits the login button after entering each user’s login information. The test confirms that the URL contains “/inventory.html” to show that the login was successful if the user is a “standard user.” The user then signs out of the website by clicking the logout button after clicking the burger button to view the menu.
The test confirms that there are three error messages on the page and that the last error message contains one of the two potential error messages if the user is not a standard user.
Now we used a fixture to iterate through three different cases and as you can see only minimal adjustments were needed.
Congratulations! You have successfully parameterised the login test and used data-driven testing with Cypress.
In conclusion, you can test more scenarios with less code if you parameterize your tests with data. You may quickly read data from external files and use it in your tests by using the cy.fixture command.
But there is a question, can we make this look better?
Yes of course, by using custom commands.
In the file called commands.js in the cypress/support folder, add the following code:
This code creates a new Cypress command called login that takes username and password as arguments.
Update the firstTest.cy.js test file with the following code to use the login custom command:
This code replaces the cy.get() commands with the cy.login() command, passing in the username and password for each user from the login-data.json file.
Congratulations! The login test has been successfully refactored to use a Cypress custom command.
You can increase the modularity and reusability of your test code by writing new Cypress commands. You can log in the website with several usernames and passwords without repeating the code by using the cy.login() command. Happy Testing!