diff --git a/cypress/support/commands.js b/cypress/support/commands.js index 8e9543f..4d20569 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -1,30 +1,4 @@ -// *********************************************** -// This example commands.js shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** -// -// -// -- This is a parent command -- -// Cypress.Commands.add('login', (email, password) => { ... }) -// -// -// -- This is a child command -- -// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) -// -// -// -- This is a dual command -- -// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) -// -// -// -- This will overwrite an existing command -- -// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) - -//Overwrite type() +// * Overwrite Cypress.Commands.overwrite("type", (originalFn, element, text, options) => { if (options && options.sensitive) { @@ -41,7 +15,7 @@ Cypress.Commands.overwrite("type", (originalFn, element, text, options) => { return originalFn(element, text, options) }) -// Login +// * Login Cypress.Commands.add("login", (user, password) => { const TEST_IDS = { @@ -57,13 +31,12 @@ Cypress.Commands.add("login", (user, password) => { cy.get(TEST_IDS.loginButton).click() }) -// Checkout +// * Checkout Cypress.Commands.add("addProductToCart", (productNumberList) => { for (let index in productNumberList) { cy.fixture("products.json").then((products) => { const product = products[productNumberList[index]] - cy.log(product.productName) cy.get(`[data-test="add-to-cart-${product.dataTestName}"]`).click() }) } @@ -73,6 +46,7 @@ Cypress.Commands.add("goToCart", () => { cy.get(".shopping_cart_link").click() cy.get('[data-test="checkout"]').click() }) + Cypress.Commands.add( "fillPersonalDataAtCheckout", (firstName, lastName, postalCode) => { @@ -96,7 +70,6 @@ Cypress.Commands.add("validateCheckoutInfos", (productNumberList) => { productPriceList.push(productsList[index].productPrice) } - cy.log("**Product Name**") cy.get(".inventory_item_name") .should("have.length", productNumberList.length) .then(($els) => { @@ -104,20 +77,16 @@ Cypress.Commands.add("validateCheckoutInfos", (productNumberList) => { }) .should("deep.equal", productNameList) - cy.log("**Product Desc**") cy.get(".inventory_item_desc") .should("have.length", productNumberList.length) .then(($els) => { - // jQuery => Array => get "innerText" from each return Cypress._.map(Cypress.$.makeArray($els), "innerText") }) .should("deep.equal", productDescriptionList) - cy.log("**Product Price**") cy.get(".inventory_item_price") .should("have.length", productNumberList.length) .then(($els) => { - // jQuery => Array => get "innerText" from each return Cypress._.map(Cypress.$.makeArray($els), "innerText") }) .should("deep.equal", productPriceList) @@ -141,6 +110,7 @@ Cypress.Commands.add("validateCheckoutInfos", (productNumberList) => { /Total: \${1,}([0-9]{1,}\.[0-9]{1,}|[0-9]{1,})\.([0-9]{2})/, ) }) + Cypress.Commands.add("finishOrder", () => { cy.get('[data-test="finish"]').click() cy.get(".complete-header").contains("Thank you for your order!") diff --git a/cypress/support/index.d.ts b/cypress/support/index.d.ts new file mode 100644 index 0000000..4d8125e --- /dev/null +++ b/cypress/support/index.d.ts @@ -0,0 +1,49 @@ +/// + +declare namespace Cypress { + interface Chainable { + /** + * Login in application + * If you don't put any parameters we will use the username and password in cypress.env.json + * @param username string + * @param password string + * @example + * cy.login() + * cy.login(username,password) + */ + login(username: string, password: string): Chainable + /** + * Add a list of products to cart + * @param productList array + * @example + * cy.addProductToCart([product1, product2]) + */ + addProductToCart(productList: array): Chainable + /** + * Add a list of products to cart + * @param firstName string + * @param secondName string + * @param postalCode string + * @example + * cy.fillPersonalDataAtCheckout(firstName, secondName, postalCode) + */ + fillPersonalDataAtCheckout( + firstName: string, + secondName: string, + postalCode: string, + ): Chainable + /** + * Validate the information of list of products added to cart like name, description and price + * @param productList array + * @example + * cy.validateCheckoutInfos([product1, product2]) + */ + validateCheckoutInfos(productList: array): Chainable + /** + * After add the products to card and fill the personal information, finish order + * @example + * cy.finishOrder() + */ + finishOrder(): Chainable + } +} diff --git a/docs/plugins.md b/docs/plugins.md index bb420fa..5cb222c 100644 --- a/docs/plugins.md +++ b/docs/plugins.md @@ -18,4 +18,4 @@ You can configure it as a pre-commit step, but I'm the only one working on this A modern JavaScript utility library delivering modularity, performance & extras. Webpage: [https://lodash.com/](https://lodash.com/) -I'm using this plugin in the checkout command to get the property "innerText". However, I can also use it to test Flaky Tests as the [Cypress documentation recommends](https://www.cypress.io/blog/2020/12/03/retry-rerun-repeat#repeat). +Cypress natively imports Lodash. I'm using this plugin in the checkout command to get the property "innerText". However, I can also use it to test Flaky Tests as the [Cypress documentation recommends](https://www.cypress.io/blog/2020/12/03/retry-rerun-repeat#repeat). diff --git a/package-lock.json b/package-lock.json index 0a9812c..3526fe9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,6 @@ "devDependencies": { "@faker-js/faker": "^8.2.0", "cypress": "^13.4.0", - "lodash": "^4.17.21", "prettier": "3.0.3" } }, diff --git a/package.json b/package.json index f3a3844..b11c4e9 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,6 @@ "devDependencies": { "@faker-js/faker": "^8.2.0", "cypress": "^13.4.0", - "lodash": "^4.17.21", "prettier": "3.0.3" } -} +} \ No newline at end of file