Skip to main content

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

ComandoMotivo
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 defaultCommandTimeout para apps lentos
  • Use pageLoadTimeout apenas quando o load realmente demora

📌 Resumo Final

ConfiguraçãoO que controla
defaultCommandTimeoutRetry de comandos e assertions
pageLoadTimeoutTempo de carregamento da página