Instalação e Configuração Inicial
Instalação Automática (Recomendada)
A maneira mais simples de adicionar o Cypress a um projeto Angular é usando o schematic oficial. Ele cuida de toda a configuração para você.
ng add @cypress/schematic
Este comando instala o Cypress, configura os arquivos necessários e adiciona scripts ao package.json.
Iniciando o Test Runner
Após a instalação, inicie o Cypress Test Runner (a interface interativa de testes) pela primeira vez:
ng e2e
Este comando abre a interface visual do Cypress onde você pode criar, executar e depurar seus testes.
Estrutura Criada
O schematic cria automaticamente a seguinte estrutura:
cypress.config.ts- Arquivo de configuração principalcypress/e2e/- Pasta para testes end-to-endcypress/fixtures/- Arquivos de dados para os testescypress/support/- Comandos customizados e configurações
Criação de Testes: Do Básico ao Avançado
Aprenda três métodos diferentes para criar testes E2E, desde escrever código manualmente até usar IA para geração automática.
Método 1: Código
Abordagem tradicional de escrever testes manualmente com controle total sobre o comportamento.
Método 2: Gravação
Use extensões de navegador para gravar suas ações e convertê-las em código Cypress automaticamente.
Método 3: IA
Inteligência artificial para gerar cenários de teste e código Cypress de forma automática.
Cy‑Fi (Extensão)
Grave ações no navegador e gere código Cypress automaticamente. Ideal para acelerar o bootstrap de testes.
Método 1: Escrevendo Testes Manualmente
Esta é a abordagem mais poderosa e flexível, onde você tem controle total sobre o fluxo do teste escrevendo o código diretamente.
✅ Passo 1: Criando o Primeiro Teste
Crie um arquivo cypress/e2e/app.cy.ts e adicione um teste básico para verificar se a página principal carrega corretamente.
describe('Testes da Página Principal', () => {
beforeEach(() => {
cy.visit('/');
});
it('Deve exibir a mensagem de boas-vindas', () => {
cy.get('h1').should('contain.text', 'Welcome');
});
it('Deve exibir o botão de login', () => {
cy.get('[data-cy="login-button"]').should('be.visible');
});
});
💡 Dicas importantes:
- Use
data-cycomo seletor para elementos (melhor que classes CSS) - Sempre adicione
beforeEachpara setup comum - Use asserções descritivas com
.should()
✅ Passo 2: Comandos Customizados
Para lógicas repetitivas como login, crie comandos próprios em cypress/support/commands.ts.
// cypress/support/commands.ts
Cypress.Commands.add('login', (username: string, password: string) => {
cy.visit('/login');
cy.get('[data-cy="username-input"]').type(username);
cy.get('[data-cy="password-input"]').type(password);
cy.get('[data-cy="login-button"]').click();
cy.url().should('include', '/dashboard');
cy.get('[data-cy="welcome-message"]').should('be.visible');
});
// Exemplo de uso:
describe('Teste de Login', () => {
it('Login com credenciais válidas', () => {
cy.login('usuario@teste.com', 'senha123');
cy.get('[data-cy="dashboard-title"]').should('contain', 'Dashboard');
});
});
✅ Passo 3: Variáveis de Ambiente
Configure o arquivo cypress.config.ts para gerenciar dados sensíveis e configurações.
import { defineConfig } from 'cypress'
export default defineConfig({
e2e: {
baseUrl: 'http://localhost:4200',
viewportWidth: 1280,
viewportHeight: 720,
video: true,
screenshotOnRunFailure: true,
env: {
login_user: 'testuser@example.com',
login_password: 'securepassword123',
api_url: 'https://api.exemplo.com'
},
retries: {
runMode: 2,
openMode: 0
}
},
});
Acesse as variáveis nos testes com Cypress.env('login_user').
Método 2: Gravando Testes com Extensão
Para acelerar a criação, use uma extensão de navegador que grava suas ações e as converte em código Cypress automaticamente.
🎬 Como Usar Extensões de Gravação
-
1
Instale uma extensão: Procure por "Cypress Recorder" ou "Cy-Fi" na Chrome Web Store
-
2
Configure: Abra o DevTools (F12) na sua aplicação Angular
-
3
Inicie a gravação: Vá para a aba da extensão e clique em "Record" ou "Start Recording"
-
4
Interaja: Clique em botões, preencha formulários, navegue pela aplicação
-
5
Finalize: Pare a gravação e copie o código gerado
🔧 Ajustando o Código Gerado
O código gerado pela extensão geralmente precisa de ajustes para seguir as melhores práticas:
❌ Código gerado (pode ter problemas):
cy.get('.btn-primary').click();
cy.get('#username').type('user');
cy.get('.form-input').type('pass');
✅ Código ajustado (boas práticas):
cy.get('[data-cy="login-button"]').click();
cy.get('[data-cy="username-input"]').type('user');
cy.get('[data-cy="password-input"]').type('pass');
🔧 Melhorias adicionais:
- Adicione asserções
.should('be.visible') - Use
beforeEachpara setup - Adicione waits explícitos se necessário
Método 3: Geração com IA (No-Code)
Utilize inteligência artificial para planejar, simular e gerar o código dos seus testes, ideal para ter novas ideias e acelerar o desenvolvimento.
🤖 Gerando Cenários de Teste com IA
Descreva a funcionalidade da sua aplicação e deixe a IA sugerir cenários de teste completos (caminhos felizes e de erro).
🎮 Simulação Visual Interativa
Crie componentes da sua aplicação visualmente e teste interações antes de gerar o código Cypress final.
Crie seu Cenário de Teste
Componentes Adicionados:
Ações de Teste
// Logs do Teste
Código Cypress Gerado:
🚀 Benefícios do Método IA
✅ Vantagens
- Ideias criativas para cenários de teste
- Identificação automática de edge cases
- Geração rápida de código boilerplate
- Consistência nos padrões de teste
- Documentação automática dos testes
🔧 Como Usar
- 1. Descreva sua funcionalidade
- 2. Clique em "Gerar Cenários com IA"
- 3. Crie componentes no playground
- 4. Teste interações visuais
- 5. Gere o código Cypress final
Cy‑Fi: Gravador de Ações → Código Cypress
A Cy‑Fi é uma extensão de navegador que grava suas ações em páginas web e gera código Cypress automaticamente. Ideal para iniciar rapidamente suítes de testes sem escrever tudo do zero. Link para a Chrome Web Store.
🔎 Visão Geral
De acordo com a página oficial da extensão, a Cy‑Fi "records user actions on a web page and generates Cypress code for automation and testing." Ela oferece:
- Uso de comandos do
@testing-library/cypresspara seletores melhores - Interface amigável, grava cliques, digitação, navegação e submissões
- Geração automática de código + editor integrado para editar/remover ações
- Pausar/retomar gravação e copiar o código para a área de transferência
- Inspector para encontrar o melhor seletor do elemento
- Inserção de assertions baseada no elemento
Fonte: Cy‑Fi — Chrome Web Store.
⚙️ Como Usar
Passos básicos
- Abra a extensão e clique em Play para iniciar a gravação
- Acompanhe suas ações pelo popup da extensão
- Clique em Stop para encerrar ou Resume para continuar
- Use Reset para limpar ou Copy para copiar o código
Inspector & Assertions
- Clique em Inspect e selecione um elemento para obter o seletor
cy.get(...)(ESC para sair) - Para assertions: inicie a gravação e pressione ALT(Win)/OPTION(Mac) + clique direito no elemento; escolha a asserção
🧩 Exemplo de Código Gerado
Após gravar um fluxo de login simples, um resultado típico pode ser:
it('fluxo básico de login (Cy‑Fi)', () => {
cy.visit('/login');
cy.get('[data-cy="username-input"]').type('user@teste.com');
cy.get('[data-cy="password-input"]').type('SenhaSegura123');
cy.get('[data-cy="submit-login"]').click();
cy.url().should('include', '/dashboard');
});
Ajuste seletores para data-cy, centralize credenciais via Cypress.env e adicione asserções de negócio.
✅ Boas Práticas ao usar a Cy‑Fi
- Substitua seletores frágeis (classes/ids dinâmicos) por data-cy
- Inclua asserções claras após cada ação importante
- Refatore o código gerado em
commands.tsquando reaproveitável - Use
fixtureseinterceptpara dados/mocks
Referência: Cy‑Fi — Chrome Web Store.
Estratégias de Teste
Diretrizes práticas para o que testar, como testar, onde testar e como preparar dados/mocks. Use os exemplos de Cypress prontos para copiar.
✅ Caminho Feliz (Happy Path)
Foque nos fluxos críticos e mais usados que precisam funcionar sempre.
O que testar
- Autenticação básica (login/logout)
- Fluxos de compra/pagamento
- Cadastro e edição de perfis
- Navegação principal e carregamento de páginas
Como/onde testar
- Ambiente de staging com dados realistas
- Mocks mínimos: prefira back-end real quando possível
- Use seletores
data-cyestáveis
Exemplo Cypress
describe('Checkout - caminho feliz', () => {
it('deve completar uma compra', () => {
cy.visit('/');
cy.get('[data-cy="login-button"]').click();
cy.get('[data-cy="username-input"]').type('user@teste.com');
cy.get('[data-cy="password-input"]').type('SenhaSegura123');
cy.get('[data-cy="submit-login"]').click();
cy.get('[data-cy="product-card"]').first().within(() => {
cy.get('[data-cy="add-to-cart"]').click();
});
cy.get('[data-cy="open-cart"]').click();
cy.get('[data-cy="checkout"]').click();
cy.get('[data-cy="order-success"]').should('be.visible');
});
});
❌ Caminhos de Erro (Sad Paths)
Cobrem validações, permissões e falhas externas. Priorize mensagens claras e comportamentos previsíveis.
Validações
- Campos obrigatórios e formatos (email, CPF, CEP)
- Limites (mín/máx de caracteres, quantidade, preço)
- Erros inline e desabilitar envio inválido
Permissões
- Redirecionar anônimos para login
- Bloquear acesso a rotas/admin para perfis comuns
Falhas externas
- Timeouts/500 de API (simulados com
cy.intercept) - Indisponibilidade de serviços (pagamento, CEP)
Exemplo Cypress com intercept/mocks
describe('Login - caminhos de erro', () => {
it('deve mostrar erro de credenciais inválidas', () => {
cy.intercept('POST', '/api/login', { statusCode: 401, body: { message: 'Credenciais inválidas' } });
cy.visit('/login');
cy.get('[data-cy="username-input"]').type('user@teste.com');
cy.get('[data-cy="password-input"]').type('errada');
cy.get('[data-cy="submit-login"]').click();
cy.get('[data-cy="toast-error"]').should('contain', 'Credenciais inválidas');
});
});
📦 Dados de Teste e Mocks
Onde armazenar
cypress/fixtures/para JSONs estáticos- Geração dinâmica via helpers no
support/
Como usar
cy.fixture('user.json')para carregar dadoscy.intercept()para simular APIs- Variáveis em
Cypress.envpara segredos
Exemplo
it('deve listar produtos mockados', () => {
cy.fixture('products.json').then((products) => {
cy.intercept('GET', '/api/products', { statusCode: 200, body: products });
});
cy.visit('/catalogo');
cy.get('[data-cy="product-card"]').should('have.length.at.least', 1);
});
Evidências de Teste
Como configurar, gerar e localizar evidências em vídeo e em screenshots no Cypress.
🎥 Evidências em Vídeo
O Cypress grava vídeos automaticamente no modo headless. Você também pode forçar a gravação por configuração.
Passo a passo
- Habilite vídeos no
cypress.config.ts - Execute os testes em modo headless
- Recupere os arquivos na pasta configurada
Configuração
import { defineConfig } from 'cypress'
export default defineConfig({
e2e: {
video: true,
videosFolder: 'cypress/videos',
screenshotOnRunFailure: true
}
});
Comando
npx cypress run --browser chrome
Onde encontrar
cypress/videos/ (um .mp4 por spec)
📸 Evidências em Screenshots
O Cypress cria screenshots automaticamente em falhas no modo headless e permite capturas manuais em pontos estratégicos.
Passo a passo
- Habilite
screenshotOnRunFailurena configuração - Use
cy.screenshot()para capturas manuais - Recupere os arquivos na pasta configurada
Exemplo prático
it('captura evidências do fluxo de login', () => {
cy.visit('/login');
cy.screenshot('login-inicial');
cy.get('[data-cy="username-input"]').type('user@teste.com');
cy.get('[data-cy="password-input"]').type('SenhaSegura123');
cy.screenshot('login-pre-submit');
cy.get('[data-cy="submit-login"]').click();
cy.screenshot('login-sucesso');
});
Configuração
import { defineConfig } from 'cypress'
export default defineConfig({
e2e: {
screenshotOnRunFailure: true,
screenshotsFolder: 'cypress/screenshots'
}
});
Onde encontrar
cypress/screenshots/ (pastas por spec e por teste)
Automação CI/CD
Execute seus testes E2E automaticamente a cada push/PR usando GitHub Actions. Abaixo um workflow completo e dicas práticas.
🚀 Workflow GitHub Actions
Crie o arquivo .github/workflows/cypress.yml:
name: Angular CI with Cypress
on:
push:
branches: [ "main", "develop" ]
pull_request:
branches: [ "main", "develop" ]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- name: Install
run: npm ci
- name: Build
run: npm run build --if-present
- name: Start app (background)
run: |
npm run start &
env:
CI: true
- name: Wait for app
run: npx wait-on http://localhost:4200
- name: Cypress Run
run: npx cypress run --browser chrome
env:
CYPRESS_baseUrl: http://localhost:4200
- name: Upload videos
if: always()
uses: actions/upload-artifact@v3
with:
name: cypress-videos
path: cypress/videos
- name: Upload screenshots
if: always()
uses: actions/upload-artifact@v3
with:
name: cypress-screenshots
path: cypress/screenshots
⚡ Dicas de Otimização
Execução Paralela
- Divida specs e use
--parallelcom Cypress Dashboard - Estruture specs curtas e independentes
Matriz de Browsers
- Valide em múltiplos navegadores (chrome, firefox, edge)
- Use
strategy.matrixno workflow
🔐 Segredos e Variáveis
Configure segredos no repositório e injete-os como variáveis de ambiente:
- name: Cypress Run
run: npx cypress run
env:
CYPRESS_login_user: ${{ secrets.LOGIN_USER }}
CYPRESS_login_password: ${{ secrets.LOGIN_PASSWORD }}
Cypress Preview: IA no Cypress Studio
Cypress revelou uma versão preview com foco em IA para acelerar a criação de testes automatizados. A atualização prepara o terreno para a próxima era da criação de testes assistida por IA, permitindo gravação, edição em linha e sugestões mais inteligentes na interface do Cypress.
✨ Visão Geral
O Cypress Studio agora, em versão preview, permite:
- Gravar interações do usuário e gerar código Cypress automaticamente
- Edição em tempo real dos testes direto na interface do Cypress
- Geração de seletores aprimorada e sugestões de assertions com IA
- Base técnica preparada para entender intenção do usuário e criar cenários mais complexos
⚙️ Como habilitar a versão Preview
Passos
- Atualize para a versão mais recente do Cypress
- Habilite a flag experimental no arquivo de configuração
- Abra o Preview e use o Studio para gravar e editar testes
Comandos
npm i -D cypress@latest
npx cypress open
Configuração
import { defineConfig } from 'cypress'
export default defineConfig({
e2e: {
baseUrl: 'http://localhost:4200',
experimentalStudio: true // habilita o Studio em modo preview
}
});
🎬 Vídeo: Primeiro teste E2E (visita e asserção)
Assista a uma gravação curta demonstrando a criação e execução de um teste E2E no Cypress.
Fonte: Cypress Docs - First test video.
🧪 Usando o Cypress Studio com IA
Fluxo sugerido
- Abra o Preview (UI) e selecione a spec ou crie uma nova
- Habilite o Studio e grave as interações (cliques, digitações, navegação)
- Use o clique com botão direito para adicionar asserções automaticamente
- Edite o teste em linha direto na interface
- Peça sugestões de seletores/asserções quando disponíveis
Exemplo gerado
it('preenche o formulário e valida sucesso', () => {
cy.visit('/cadastro');
cy.get('[data-cy="nome-input"]').type('João Teste');
cy.get('[data-cy="email-input"]').type('joao@teste.com');
cy.get('[data-cy="submit-button"]').click();
cy.get('[data-cy="toast-success"]').should('contain', 'Cadastro realizado');
});
🔍 Outras novidades da versão
- Comandos como
cy.url(),cy.hash(),cy.go(),cy.reload(),cy.title()ecy.location()passam a usar CDP/WebDriver BiDi, evitando erros de origem cruzada - Suporte a Vite 7 e Angular 20 no Teste de Componentes
Exemplo de configuração de Component Testing
import { defineConfig } from 'cypress'
export default defineConfig({
component: {
devServer: {
framework: 'angular',
bundler: 'vite' // Vite 7
}
}
});
Complementos: Iframe e Relatórios (Mochawesome)
Conteúdo adaptado a partir de um guia interno (Criado por Jeferson Dal Molin, última alteração em 27 jun, 2022). Tempo estimado de leitura: ~3 minutos.
📦 Instalação de pacotes
Exemplo baseado em um projeto Angular (pasta totvs-hgp-hvp-config/thf2 no VSCode).
Cypress
npm i cypress@10.2.0 --save-devIframe (PO-UI)
Como PO‑UI renderiza telas em iframe, use o plugin:
npm i cypress-iframe@1.0.1 --save-devRelatórios
npm i mochawesome@7.1.3 --save-dev⚙️ Configuração (cypress.config.ts)
Exemplo de opções úteis: requestTimeout estendido (ambientes lentos) e reporter do Mochawesome.
import { defineConfig } from 'cypress'
export default defineConfig({
e2e: {
baseUrl: 'http://localhost:4200',
requestTimeout: 60000, // padrão 5000ms
experimentalStudio: false
},
reporter: 'mochawesome',
reporterOptions: {
reportDir: 'report',
overwrite: true,
html: true,
json: true
}
});
🧩 Suporte a Iframe (cypress-iframe)
Importação em support/e2e.ts
// support/e2e.ts
import 'cypress-iframe';
// outros imports/supportUso no teste
it('interage dentro do iframe', () => {
cy.visit('/po-ui-exemplo');
cy.frameLoaded('iframe#po-ui');
cy.iframe().find('[data-cy="botao-confirmar"]').click();
});🧪 Estrutura de Testes (e2e)
Organize cypress/e2e por módulos/funcionalidades. Exemplo simples:
cypress/
e2e/
auth/
login.cy.ts
pedidos/
checkout.cy.ts
fixtures/
support/
commands.ts
e2e.ts▶️ Execução e Relatórios
Com interface (Preview)
npx cypress openEscolha E2E Testing, o navegador e a spec.
Headless + Mochawesome
npx cypress runRelatórios em /report e vídeos/screenshots nas pastas padrão.