Using Cypress to do RPA
February 20, 2020 - Søren Alsbjerg HørupIntroducing automation is something I am extremely keen on. Recently, I have been using Cypress at work, an end-to-end testing framework for browser based applications.
I got the idea that Cypress could be used to do Robot Process Automation (RPA) through the use of GitHub actions. My idea was to:
- Implement a Cypress test suite which opened a specific website.
- Traversed the website, to find meaningful data.
- Email the data.
- Let GitHub actions start the process.
I look at the bond prices every day on Nasdaq to get an indication on which direction my mortgage is going. A good candidate to automate: let Cypress look at the mortage and send me the result on email such that:
- I do not have to remember to check every day
- I do not have to access the site manually and spend time on this.
- I get the result every day at a specific time, e.g. 10:00..
Implementation is super simple, write a test that opens the specific Nasdaq page, selects the element of interest and then emails the element of interest to me using an email client. For my tests, I used mail-slurp since it is free and works well.
The complete cypress code is here:
/// <reference types="cypress" />
import { MailSlurp } from "mailslurp-client";
let last = undefined;
const TO = Cypress.env("TO");
const API\_KEY = Cypress.env("API\_KEY");
const mailslurp = new MailSlurp({apiKey:API\_KEY});
const from = Cypress.env("FROM");
context('Actions', () => {
it("Open Nasdaq", ()=>
{
cy.log(MailSlurp);
cy.visit('http://www.nasdaqomxnordic.com/bonds/denmark/microsite?Instrument=XCSE0%3A5NYK01EA50');
});
it("Find Last", ()=>
{
cy.get(".db-a-lsp").should((e)=>
{
if (e != null)
{
last = e.first().text();
}
});
});
it("Email Last", async ()=>
{
//cy.log(last);
await mailslurp.sendEmail(from,
{
to:\[TO\],
subject:'0.5% kurs ' + last,
body:last
}
);
});
});
Quick and dirty. Three actions are defined:
- Open Nasdaq: simply opens the URL in question.
- Find Last: finds the price of the latest sale of the given bond.
- Email Last: emails me the result
Simple as that. Running the “test” does exactly that. To automate, I use GitHub actions to start Cypress on every push but also every day at 09:00 UTC time.
I will definitely try to identify more use cases where this can be applicable in the future.