No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Cypress Avanzado

Curso de Cypress Avanzado

Javier Fuentes Mora

Javier Fuentes Mora

Custom commands

11/29
Recursos

Aportes 5

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Estos son los comandos personalizados que he añadido:

Cypress.Commands.add("login", (email, password) => {
    const userInput = "#user_login";
    const passwordInput = "#user_password";
    const loginButton = "#login_form > div.form-actions > input";

    cy.visit("<Login page>");
    cy.get(userInput).should("be.visible").type(email);
    cy.get(passwordInput)
        .should("be.visible")
        .type(password, { sensitive: true });
    cy.get(loginButton).should("be.visible").click();

    return cy;
});

Cypress.Commands.add("is", (chainer) => {
    if (chainer === "login.error") {
        const error = ".alert.alert-error";

        cy.get(error).should("be.visible");
    } else if (chainer === "login.success") {
        const tabs = {
            account_summary_tab: "#account_summary_tab",
            account_activity_tab: "#account_activity_tab",
            transfer_founds_tab: "#transfer_funds_tab",
        };

        cy.get(tabs.account_activity_tab).should("be.visible");
        cy.get(tabs.account_summary_tab).should("be.visible");
        cy.get(tabs.transfer_founds_tab).should("be.visible");
    } else {
        throw new Error(`${chainer} is not recognized as valid chainer`);
    }

    return cy;
});

De tal manera que la prueba me queda así:

describe("Login with custom command", () => {
    it("error login", () => {
        cy.login("aaaa", "aaaa").is("login.error");
    });

    it("success login", () => {
        cy.login("username", "password").is("login.success");
    });
});

Buenas! Lei en la documentacion de cypress que es una practica no recomendada hacer el login usando elementos del DOM, en su lugar deberíamos hacerlo programaticamente (enviando el request)

https://docs.cypress.io/guides/references/best-practices#Organizing-Tests-Logging-In-Controlling-State

excelente esto de los custom commands

podrias hacer un login por api mucho mas rapido que usando la interfaz

Cypress.Commands.add('loginByApi', (email, password) => {
    cy.request({
      method: 'POST',
      url: `${api}/login`,
      body: {
        email,
        password
      },
    })
        .its('body')
        .then((body) => {
            cy.setCookie('access_token', body.data.access_token);
            cy.wrap(body.data.access_token).as('token');
        });
  });

Me encantó la opcion de redefinir funciones nativas de Cypress, para ofuscar el password por ejemplo. Pero seguiria trabajando con POM, me parece mas organizado y legible.