Reutilização de códigos na escrita de testes com o Selenium WebDriver
Melhorando as práticas de escrita de scripts de teste com Selenium WebDriver(SWD) em Java
Primeiramente, não existe a forma “100%” correta de escrever um código, existem diversas formas e algumas incluem “boas práticas” que são aquelas mais adotadas pela comunidade que interage com aquele tipo de escrita.
Além disso, não sou expert em SWD, muito menos em Java, minha pretensão aqui é ajudar quem está iniciando o aprendizado em automação de testes com o SWD em Java.
Dito isso vamos lá, nesse pouco mais de 1 mês que aprendi e comecei a fazer automação com o SWD eu aprendi que nem sempre muito é mais. What??? É isso mesmo, não é porque você tem muito código que você fez uma boa cobertura ou fez da melhor forma, aprendi isso na raça. Depois que terminei de escrever os principais pontos de automação do sistema, as classes ficaram enormes e eu percebi que estava repetindo muito código, mas muito mesmo, além disso alguns métodos também. Foi aí que parei de criar scripts e passei a melhorar e reutilizar meus códigos. Fazendo uma análise, pude perceber que daria para reutilizar muita coisa e então iniciei a reforma.
Inicialmente vamos entender alguns dos principais comandos que você vai utilizar praticamente em todos os tipos de sistema Web:
findElement(By());
Sem esse carinha você praticamente nem irá sair do lugar tentando criar sua automação, mas, ele geralmente vem acompanhado de algum outro método. Ele serve para encontrar um elemento, dado o comando junto com o By, que pode ser ID, xpath, className, entre outros, em particular eu gosto de usar mais o xpath, até mesmo porque você consegue encontrar qualquer elemento na página com ele.
.click();
Serve para enviar o comando de click simples.
.sendKeys();
Serve para mandar o comando simples de texto escrito pelo teclado.
Select();
Serve para selecionar uma opção de um campo Select com dropdown.
Então seguindo, esses comandos serão utilizado muitas vezes ao longo dos seus testes, imagine ter que ficar escrevendo diversas vezes driver.findElement(ById()).click, dá um certo trabalho, além disso como falei, vai ocasionar em pouco ou nenhum reaproveitamento de código.
Tendo entendido isso, vamos olhar como podemos melhorar isso. Inicialmente eu criei uma classe base para meus testes e todas as outras classes de testes estendem essa classe base e dentro dela eu tenho todos os métodos que serão reutilizados ao longo da escrita. Vamos observar na imagem a seguir 2 métodos extremamente utilizados que são o de sendKeys() e o click():
Vejam, todos os comandos de escrita e click simples são contemplados nesses 2 métodos, a partir da criação deles, caso eu queira realizar um click ou escrever algo eu chamo o método e passo dentro deles os parâmetros, no caso do método de escrita eu passo o xpath que é pra localizar o elemento e também o texto que você quer que seja escrito, no de click só precisa passar o xpath, já que o click não recebe parâmetro igual ao sendKeys.
Mas Márcio, ainda não entendi a diferença e o que isso poderia melhorar, você pode ser mais claro?
Óbvio! Vamos analisar como eu escrevia os testes antes e como escrevo agora, observem as imagens abaixo:
Bom, se você é muito iniciante no SWD deve estar se perguntando, que teste é esse WriteEverything? Ah, ele não é o teste em si, é porque eu preferi criar pequenas partes do teste e chamar elas no método de teste real, criando o código em pequenos pedaços facilita a reutilização e também torna o código mais legível(depois escreverei sobre isso), enfim, esse é um método simples de preencher os campos de texto e o select. Se você observar, os 3 métodos fazem a mesma coisa, porém, o primeiro era como eu escrevia logo que comecei a aprender, deis passei para o segundo método porque fui aprendendo um pouco mais e o último é como eu escrevo atualmente. Você percebe que utilizando a terceira forma o código fica muito mais simples e legível? Olha o quanto menos você precisou escrever e como está organizado. Agora imagine isso em mais de 20 classes de testes você tendo que escrever tudo da forma como está o primeiro método, e aí? Um pouco triste, não é?
Para finalizar vou mostrar o método do select que não aparece nas imagens anteriores.
Existem diversas outras formas de reutilizar códigos e melhorar seus testes, portanto, não pare de ver possibilidades, é o que eu venho fazendo. Lembrando que não existe forma perfeita, é apenas uma forma que encontrei de melhorar e otimizar minha escrita de testes.
Espero que tenham curtido e que despertem em vocês a vontade de melhoria contínua assim como eu tenho para sempre criar e melhorar tudo o que você constrói, afinal, outras pessoas podem depois precisar fazer uma manutenção em seu código e seria bem legal que estivesse legível não é mesmo? Imagine você pegar um código todo mal feito para dar manutenção? Seria péssimo e difícil, então, vamos melhorar as práticas para que possamos nos ajudar!
Referências:
A plataforma da Alura me deu uma base boa em Java, que me fez enxergar essas melhorias:
Além disso fiz algumas consultas com meu amigo Elvis, que é um monstro em Java e me deu algumas sugestões também:
Para aprender sobre o Selenium Webdriver fiz o curso do Júlio de Lima:
Caso tenha dúvidas deixa nos comentários ou então me envia uma mensagem no Linkedin: