top of page
Image by Jess Bailey

 

 

 

 

Setup Cypress

​​​​​​​​​​​​​​​​​​​​​O setup do Cypress é muito mais do que apenas instalar o software; é a arquitetura de testes do seu projeto.

A Importância do Setup

Explica como um setup bem-feito garante consistência, reutilização de código (Princípio DRY) e escalabilidade para que seu projeto de automação possa crescer e ser facilmente integrado ao CI/CD.

O Setup para Cypress refere-se ao conjunto de ações e configurações necessárias para iniciar e manter um ambiente de automação de testes de ponta a ponta (E2E) utilizando o framework Cypress. É o alicerce que garante que os testes sejam executados de forma consistente, eficiente e escalável.

O setup não se limita apenas à instalação do software, mas abrange a estrutura de pastas, os arquivos de configuração e a integração com o projeto de desenvolvimento.

Componentes Essenciais do Setup

O setup do Cypress é composto por três pilares principais: a Instalação, a Estrutura de Pastas e os Arquivos de Configuração.

A Importância do Setup para a Automação

Um setup bem-feito é o que permite que o Cypress seja uma ferramenta poderosa e eficiente:

•Consistência: Definir a baseUrl e os timeouts no cypress.config.js garante que todos os testes rodem no ambiente correto e esperem o tempo adequado, reduzindo flakiness (testes instáveis).

•Reutilização de Código: O uso da pasta support para comandos customizados evita a repetição de código (Princípio DRY - Don't Repeat Yourself), tornando os testes mais curtos e fáceis de manter.

•Escalabilidade: A separação clara entre testes (e2e), dados (fixtures) e configuração permite que o projeto cresça, suportando centenas de testes sem se tornar caótico.

•Integração com CI/CD: O package.json define os comandos de execução (cy:run) que serão chamados pelo Jenkins ou outra ferramenta de CI/CD.

Em resumo, o setup do Cypress é a definição da arquitetura de testes do seu projeto, transformando um conjunto de scripts em um framework de automação robusto e pronto para produção.

Passo a Passo.:

Instalar GIT na máquina https://git-scm.com/downloads

Instalação rápida

- Via winget (Windows 10/11 recente):
  - winget install --id Git.Git -e --source winget

1 - Instalar Node.JS https://nodejs.org/pt/download Marcar instalação automatica das pastas - phyton e chocolate.

2 - Validar instalação > abrir CMD e digitar - ver versões instaladas. node -v e npm -v

3 - baixar o VS Code - editor de código. Pode ser a IA TRAE também.

4 - Criar pasta na raiz do computador C: Nome do projeto

5 - Instalar Cypress saber as versões do cypress npm show cypress versions --json Acessa a pasta do projeto no editor de código conforme abaixo. Iniciar o npm: C:\PastadoProjeto > npm init -y

Após iniciar npm, instalar cypress C:\PastadoProjeto > npm install cypress@14.0.1 --save-dev

[serve para registrar o pacote(cypress) como uma dependência de desenvolvimento no arquivo package.json do seu projeto. Isso significa que o Cypress é necessário apenas para o desenvolvimento e testes do projeto, mas não para a execução da aplicação em produção. ]

6 - Abrir a pasta do projeto no editor de codigo - acessar o package.json e inserir o comando: < "cypress:open": "cypress open", > dentro da sessão Scripts, assim:

{

  "name": "atomacaopaula",

  "version": "1.0.0",

  "description": "",

  "main": "index.js",

  "scripts": {

    "cypress:open": "cypress open",

    "test": "echo \"Error: no test specified\" && exit 1"

  },

  "keywords": [],

  "author": "",

  "license": "ISC",

  "type": "commonjs",

  "devDependencies": {

    "@faker-js/faker": "^10.1.0",

    "cypress": "^14.0.1"

  }

}

7 - Criar pasta Pages na raiz da pasta Cypress

      7.1 - Criar o arquivo nomedafuncionalidade.js

OBS.: se o a pasta CYPRESS nao for criada, pode-se digitar o comando npx cypress open, forçando ele a abrir e criar a pasta. Depois feche tudo e recomece.

8 - ir no terminal e digitar "npx cypress open" para abrir o Test Runner do cypress

Continue > E2E Testing> > Selecionar Browser > Start > Clicar em Specs no menu > clicar em Criar Specs e nomear o arquivo Cy, exemplo: "cadastro.cy.js" continuar. É criada automaticamente a pasta E2E com o arquivo de acesso a aplicação no formato informado acima,

9 - ir no arquivo cypress.config.js  realizar a configuração do arquivo 

const { defineConfig } = require('cypress');

 

module.exports = defineConfig({

  video: true,

  // grava vídeo no cypress run

  // opcional

  videosFolder: 'cypress/videos',

  screenshotOnRunFailure: true,

  trashAssetsBeforeRuns: false,

  videoCompression: 32,

  // videoCompression: 32,      // opcional para comprimir o mp4

  // trashAssetsBeforeRuns: false, // mantém vídeos/screenshots de execuções anteriores

  e2e: {

    baseUrl: 'http://localhost:8000',

    setupNodeEvents(on, config) {

      // listeners

    },

  },

});

10 - Ir no e2e > no arquivo .cy.js e deixar p describe dessa forma:

 

describe('template spec', () => { it('passes', () => { cy.visit('/') // Aqui, o visit vai na baseURL informada no config.js }) })

11 - INSTALAR BIBLIOTECA faker para senhas e nomes aleatórios

npm i -D @faker-js/faker

         11.1 - No arquivo .js que for usar o faker, deve-se incluir o comando:

import { fakerPT_BR } from '@faker-js/faker'


 

class formulario {

 

    forumulariopassos() {

        const nomeSanitizado = (fakerPT_BR.person.fullName() || 'Ana Maria')

            .normalize('NFD')                  // separa acentos

            .replace(/[\u0300-\u036f]/g, '')   // remove acentos

            .replace(/[^A-Za-z\s]/g, ' ')      // remove pontuação/dígitos, mantém letras e espaço

            .replace(/\s+/g, ' ')              // compacta múltiplos espaços

            .trim()

            .slice(0, 255);

Comandos Cypress

Como Esperar Elemento Aparecer

- Use cy.get com assert e timeout:
  - cy.get('#mensagemSucesso', { timeout: 10000 }).should('be.visible')


- Para existir no DOM (mesmo que escondido):
  - cy.get('#mensagemSucesso', { timeout: 10000 }).should('exist')


- Para texto específico:
  - cy.get('#mensagemSucesso', { timeout: 10000 }).should('contain.text', 'Login realizado com sucesso!')


Redirecionamento/URL

- Espera até ir para a rota:
  - cy.location('pathname', { timeout: 10000 }).should('eq', '/cadastro')
  - ou cy.url({ timeout: 10000 }).should('include', '/cadastro')


Esperar Requisição de API

- Intercepte e espere a resposta antes de checar o elemento:
  - cy.intercept('POST', '/api/login').as('loginApi')
  - cy.get('#btnAcessar').click()
  - cy.wait('@loginApi')
  - cy.get('#mensagemSucesso').should('be.visible')


Timer/SetTimeout (seu caso do login)

- Controlar o tempo do app em testes:
  - cy.clock() no começo do teste
  - Após clicar, avance o tempo:
    - cy.tick(2000)


  - Depois faça asserções:
    - cy.get('#mensagemSucesso').should('be.visible')
    - cy.location('pathname').should('eq', '/cadastro')

Ajustar Timeout Padrão (opcional)

- Config global (aplica a todos os get/contains ):
  - No cypress.config.js dentro de e2e :
    - defaultCommandTimeout: 10000


- Por teste:
  - Cypress.config('defaultCommandTimeout', 10000)

Padrão Completo para Login

describe('Login', () => {
  it('aguarda sucesso e redireciona', () => {
    cy.visit('/login')
    cy.clock()

    cy.get('#email').type('teste@email.com')
    cy.get('#senha').type('123456')
    cy.get('#btnAcessar').click()

    cy.tick(2000)

    cy.get('#mensagemSucesso', { timeout: 10000 }).should('be.visible')
    cy.location('pathname', { timeout: 10000 }).should('eq', '/cadastro')
  })
})

class Login {
  loginpassos() {
    // Opcional: controlar timers (para o setTimeout do app)
    cy.clock();

    cy.get('#email', { timeout: 10000 })
      .should('be.visible')
      .type('teste@gmail.com', { delay: 100 });

    cy.get('#senha', { timeout: 10000 })
      .should('be.visible')
      .type('1234', { delay: 100 });

    // Espera pela requisição de login
    cy.intercept('POST', '/api/login').as('loginApi');

    cy.get('#btnAcessar', { timeout: 10000 })
      .should('be.visible')
      .click();

    cy.wait('@loginApi')
      .its('response.statusCode')
      .should('eq', 200);

    // Mensagem de sucesso
    cy.get('#mensagemSucesso', { timeout: 10000 })
      .should('be.visible')
      .and('contain', 'Login realizado com sucesso');

    // Avança o relógio do app (2s do setTimeout)
    cy.tick(2000);

    // Verifica redirecionamento
    cy.location('pathname', { timeout: 10000 })
      .should('eq', '/cadastro');

    cy.screenshot('formulario-acessado-com-sucesso');
  }
}

export default new Login;

Teste de Software - Em Foco.
bottom of page