[Cypress] Precisa fazer uma instrução condicional baseado se um elemento existe?
Published: 2024-05-21 16:53:16

Tentamos ao máximo evitar que nossos testes precisem de instruções de condições, por quê? Porque se temos condicionais significa que em algum aspecto temos comportamentos que estão acontecendo que não temos o controle e isso pode ser ruim para a automação que necessita de estabilidade. 

Imagina você trabalhar na sua automação com alguns dados e caso você não tenha o controle da manipulação desses dados, se esperar por um dado específico mas ele não aparecer, pois você não produziu a sua massa de dados para aquele teste, assim se garantiu que o que existia na base seria ideal, mas se provou que não é.

Eu coloco esse exemplo pois, da mesma maneira pode acontecer com alguns elementos que queremos que eles estejam presente na página, mas acabam não estando porque o estado atual da massa de dados é outro.

Por exemplo, você tem um teste que precisa verificar se um ususário é adicionado a uma lista, todos os usuários adicionados trazem seu avatar. Se você não está manipulando os dados dessa lista de usuários, você pode começar seu teste com alguns usuários ou até mesmo nenhum e você precisa saber a quantidade exata de usuários para quando adicionar o novo usuário fazer a validação do total final.
Dessa forma, a única forma de você saber a quantidade de usuários iniciais seria verificar a quantidade de elementos da lista na página, verificando assim quantos avatares aparecem antes de adicionar, correto? 

Lembrando, é claro que existem outros meios para se fazer isso, o exemplo que estou dando é para quando temos um contexto que não conseguimos manipular os dados por uma API ou diretamente no banco de dados antes dos testes e temos que solucionar através da UI.

Sendo assim, você precisa antes de adicionar, verificar a quantidade desses avatares (sabendo que temos o mesmo componente que representa os avatares com um locator genérico para os mesmos), mas aí que surge um problema, se você apenas se usar de `cy.get(avatarLocator).its('length')`, o comando irá falhar caso o **avatarLocator **não exista, e você não quer que falhe, pois sabe que isso pode acontecer, pois pode não ter nenhum usuário na lista.

Então, como realizar essa condicional para verificar se existe o elemento ou não? Pois se não existir você saberá que a lista está fazia e poderá continuar com as próximas instruções sem seu teste falhar.


![cypress-tips](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uxufuahglzulcoggfm9o.png)

Perceba que com esse código podemos criar condições para aqueles comportamentos que não conseguimos gerenciar através de alguma manipulação de dados e evitamos que o teste falhe quando não deveria. A tomada de decisão é baseado se um elemento existe ou não. Eu dei esse exemplo, mas com certeza se pode utilizar dessa mesma lógica para outros exemplos que tiver enfrentando, como aqueles cenários onde determinado botão só aparece caso um dado estado do usuário seja atendido. Já passou por isso?

E aí, gostou? Deu para destravar aí nos seus testes?
Tem outras ideias? Compartilha com a gente!

Quer saber mais sobre mim, acesso aqui: [Nathan Araujo](https://araujosnathan.com/)