1 - Se eu não tenho acesso ao backend, mas quero verificar se uma mesma resposta da API sempre gera o mesmo resultado no frontend, como posso fazer isso?
Mostrar resposta
cy.intercept(method, url, staticResponse)
Mostrar resposta
- Custom Commands
- App Actions
- Page Objects (infelizmente na minha opinião)
- Gherkin (infelizmente também na minha opinião)
- fixtures para dados de testes e mocks
- …
3 - Se você está usando um seletor CSS que muda com frequência, exigindo constantes ajustes no script de teste, o que você faria?
Mostrar resposta
- Procurar um seletor mais estável
- Adição de atributos
data-testid
para fins de testabilidade - Uso das diferentes combinações possíveis com o comando
cy.contains()
. Ex.cy.contains('label', 'Phone Number').next().type('5555555') // Imaginando que o próximo elemento depois do label seria o input com o qual quero interagir
4 - Se você precisa testar uma funcionalidade, mas uma parte dela está demorando para renderizar, como você lida com essa situação?
Mostrar resposta
- Identificar o motivo pelo qual está demorando.
Mostrar resposta
.should
para assertions (devido ao mecanismo de retriability do Cypress)
Exemplos:
cy.get('ul li').should('have.length', 5) // Primeiro aguarda pela quantidade certa de list items
cy.get('li').last().should('have.text', 'some-text') // Para então verificar o conteúdo do último
// Também é possível passar ao comando .should uma função de callback a qual recebe o "sujeito" gerado pelo comando anterior
cy.get('ul li').should(($listItems) => {
cy.wrap($listItems).each(() => {/* do something with each list item */})
})
.then
para trabalhar com o "sujeito" gerado pelo comando anterior.
cy.request(method, url, body).then((response) => {
/* lógica que busca um token e o armazena em uma variável "global" que possa ser utilizada por outro comando (ou teste) */
})
Mostrar resposta
Primeiro, faço uma asserção positiva para garantir que estou no lugar certo, e então, faço algo como .should('not.be.visible')
ou .should('not.exist')
dependendo se o elemento está "escondido" por uma regra de CSS ou se deixou de estar no DOM.