Entenda um pouco da história do protractor-helper e o que está por trás dessa nova versão

Se você automatiza ou pretende automatizar testes de aplicações web com o framework Protractor, a biblioteca protractor-helper irá lhe ajudar a escrever testes mais confiáveis, pois ela utiliza a classe ExpectedConditions, do Protractor, para garantir que os scripts de teste irão interagir com determinados elementos, ou realizar verificações, somente quando tais elementos estiverem no estado correto, tais como visíveis, clicáveis, presentes, etc.

No desenvolvimento de aplicações web, infelizmente é comum testes automatizados de interfáce gráfica de usuário não serem confiávies, resultando em falsas falhas, e então perdendo a credibilidade do time de desenvolvimento.

Um teste que falha quando não há nada de errado com a aplicação sendo testada é o que chamamos de falso negativo, e estes devem sempre ser evitados.

Um dos motivos dos falsos negativos são testes mal arquitetados, os quais não esperam por um determinado botão estar na tela, por exemplo, antes de tentar clicar nele, ou testes que não esperam pela transição entre uma URL e outra.

O protractor-helper foi criado no ano de 2017, visto uma necessidade interna na empresa onde eu trabalhava na época, para resolver exatamente este problema, porém sem a complexidade da classe ExpectedConditions, e desde então ele vem evoluindo.

Conheça algumas das suas funcionalidades mais comuns

Algumas das funções mais utilizadas no protractor-helper são:

helper.click(element)

Esta função recebe um elemento como argumento, e só clica nele quando o mesmo estiver visível na tela, e habilitado para o clique.

helper.fillFieldWithText(element, text)

Esta função recebe como primeiro argumento um elemento, tal como um input de texto, e como segundo argumento uma string, e só preenche tal string no campo quando o mesmo estiver visível.

helper.waitForElementVisibility(element)

Estão função, como o próprio nome descreve, espera por um elemento estar visível. O elemento é passado como argumento da função.

Agora vejamos algumas das últimas versões lançadas.

Versão 3.7.0

No início, algumas funções do protractor-helper, tais como as funções click e fillFieldWithText, chamavam-se clickWhenClickable e fillFieldWithTextWhenVisible. Porém, na versão 3.7.0 foram criadas suas funções sucessoras, para substituí-las.

Estas novas funções possibilitam a escrita de linhas de código mais curtas, o que ajuda na legibilidade do código.

Versão 3.7.8

Na versão 3.7.8 anunciamos as funções que seriam depreciadas, onde além das que seriam removidas por terem uma substituta, também resolvemos remover outras duas funções, que não eram alinhadas com a razão principal da existência da biblioteca, que é a escrita de testes robustos e confiáveis.

Estas outras funções são as seguintes: getBodyElementFromCurrentBrowserOrBrowserInstance e openNewBrowserInTheSamePage.

Por fim, também resolvermos depreciar o argumento mensagem de erro (errorMessage), o qual podia ser passado opciolmente para alterar a mensagem padrão em caso de uma falha. Esta decisão foi tomada devido às mensagens padrão serem bastante claras, sugerindo exatamente por que um determinado passo do teste falhou. Veja alguns exemplos.

Versão 4

E enfim chegamos na versão 4, onde as funções e argumentos que foram anunciados que seriam removidos realmente aconteceu. Por isso da mudança da major version, visto que é uma breaking change.

Saiba o que fazer se você já usava uma versão anterior à versão 4

Abaixo estão listadas as funções removidas as quais possuem uma substituta, portanto, se você utiliza alguma das funções listadas à esquerda da lista, basta substituí-las pela função correspondente listada à direita.

  • clickWhenClickable - click
  • fillFieldWithTextWhenVisible - fillFieldWithText
  • fillInputFieldWithFileWhenPresent - uploadFileIntoInputField
  • clearFieldWhenVisible - clear
  • clearFieldWhenVisibleAndFillItWithText - clearAndFillItWithText
  • tapWhenTappable - tap
  • fillFieldWithTextWhenVisibleAndPressEnter - fillFieldWithTextAndPressEnter
  • scrollToElementWhenVisible - scrollToElement

Porém, se você utilizava as funções getBodyElementFromCurrentBrowserOrBrowserInstance e/ou openNewBrowserInTheSamePage, você terá que às substituir por sua implementação usando somente o Protractor. Veja os exemplos abaixo.

Em vez de escrever

helper.getBodyElementFromCurrentBrowserOrBrowserInstance()

Use:

browser.element(by.css('body'))

E em vez de escrever:

helper.openNewBrowserInTheSamePage()

Use:

browser.forkNewDriverInstance(true)

Por fim, se você alterava a mensagem padrão de alguma função, veja o exemplo abaixo para saber o que deve ser alterado em seu código.

Digamos que sua implementação da função waitForElementVisibility fosse a seguinte:

helper.waitForElementVisibility(someElement, 5000, 'Element is still visible')

Sua nova implementação deve ser a seguinte:

helper.waitForElementVisibility(someElement)

Agradecimentos

Gostaria de aproveitar este post para agradecer ao Paulo Gonçalves, por me ajudar a manter esta biblioteca, a qual ajuda outros profissionais a escreverem testes automatizados robustos e confiáveis. Muito obrigado Paulo!


Então é isso, e se você ficou com alguma dúvida, deixe um comentário que irei responder o mais rápido possível.

👋 Até a próxima, e bons testes! ✅


Este conteúdo também está disponível em Inglês através do seguinte link https://bit.ly/35RhG8c.

Deixe um comentário