Retry-ability | Cypress | Test & QA
- Retry-ability | Cypress | Test & QA
🔁 O que é Retry-ability?
Retry-ability é a capacidade do Cypress de repetir automaticamente comandos e assertions até que eles passem ou até o timeout configurado seja atingido.
Isso elimina a necessidade de wait() manuais e deixa os testes mais estáveis.
⏱️ Timeouts que influenciam o Retry
🔹 defaultCommandTimeout
Define quanto tempo o Cypress vai tentar novamente comandos como:
cy.get()cy.contains().should().and()
Exemplo de configuração
defaultCommandTimeout: 16000
➡️ O Cypress tentará por até 16 segundos antes de falhar.
Exemplo prático
cy.get('.alert')
.should('contain', 'Sucesso')
Se o elemento ou o texto demorar para aparecer, o Cypress vai tentar repetidamente por até 16s.
🔹 pageLoadTimeout
Define o tempo máximo que o Cypress espera o evento de load da página após:
cy.visit()- navegações de página
Exemplo de configuração
pageLoadTimeout: 10000
➡️ O Cypress espera até 10 segundos a página carregar completamente.
Exemplo
cy.visit('/dashboard')
Se a página não disparar o evento load em até 10s, o teste falha.
🧪 Onde configurar esses parâmetros
📁 cypress.config.js
const { defineConfig } = require('cypress')
module.exports = defineConfig({
e2e: {
baseUrl: 'http://localhost:3000',
pageLoadTimeout: 10000,
defaultCommandTimeout: 16000
}
})
✅ Comandos com Retry-ability
🔍 Queries
cy.get('[data-cy=submit]')
cy.contains('Salvar')
✔️ Assertions
cy.get('.message')
.should('be.visible')
.and('contain', 'Cadastro realizado')
➡️ O Cypress repete query + assertion juntas até passar ou estourar o timeout.
❌ Comandos sem Retry-ability
| Comando | Motivo |
|---|---|
cy.click() | Executa apenas uma vez |
cy.type() | Executa apenas uma vez |
cy.visit() | Não repete |
cy.wait(tempo) | Pausa fixa |
Boa prática
cy.get('button')
.should('be.enabled')
.click()
🚫 Anti-padrão
cy.wait(5000)
cy.get('.success').should('exist')
❌ Teste lento ❌ Instável
✅ Forma correta
cy.get('.success', { timeout: 16000 })
.should('exist')
🧠 Regras de Ouro
- Nunca use
wait()sem motivo real - Confie no retry-ability
- Ajuste
defaultCommandTimeoutpara apps lentos - Use
pageLoadTimeoutapenas quando o load realmente demora
📌 Resumo Final
| Configuração | O que controla |
|---|---|
defaultCommandTimeout | Retry de comandos e assertions |
pageLoadTimeout | Tempo de carregamento da página |