5 – Coleta de Logs – Parte II

Na aula passada montamos o relatório de execução do teste utilizando o ExtentReports. Vamos prosseguir com ele nessa aula, dessa vez mostrando como coletar prints de tela no Selenium e utilizá-los no ExtentReports.

Assim como no log do TestComplete, também é possível ter prints da tela dentro do ExtentReport. Mas como estamos no “mundo LEGO”, precisamos “montar” um método para efetuar essa coleta de print.

Tenha em mente que primeiro precisamos coletar o print, e então utilizá-lo no ExtentReport. Para facilitar a organização, vamos criar uma nova classe java chamada “Utils.java”. Nela vamos colocar “métodos úteis”, obviamente! Entre eles, as funções de coleta de logs e prints! A imagem abaixo ilustra a nova classe criada:

s177

Desejamos criar um método que tire o print da tela e use esse print para colocar no ExtendReport através de uma entrada de log. Vamos então criar a “casca” desse método:

s178

O método foi criado como estático para não termos que ficar inicializando a classe toda vez que precisarmos utilizar esse método. O método também possui um parâmetro do tipo “String”, o qual será utilizado para adicionar uma descrição ao log de print (exemplo: “Tela de Login”, “Dados de Identificação do Cliente”, “Dados de Endereço do Cliente”, etc…)

Na aula passada vimos que para adicionar um log utilizamos o objeto “extentTest” da classe “TestRule.java” conforme mostrado abaixo:

s179

É dessa classe que iremos “buscar” o objeto “extentTest” para ser utilizado na nova classe “Utils.java”. Mas esse objeto é privado, então precisamos criar um método na classe “TestRule.java” que o retorne para assim ser utilizado na classe “Utils.java”. Abaixo tem-se o método criado na classe “TestRule.java”:

s180

Pronto. Agora é só utilizá-lo lá classe “Utils.java”, conforme ilustrado abaixo (não esquecendo do import realizado):

s181

Abaixo tem-se o método chamado do “extentTest” para realizar o log com um print (atenção aos imports já realizados nas linhas 4 e 5):

s182

extentTest.log(Status.INFO, strLog, MediaEntityBuilder.createScreenCaptureFromPath(“screenshot.png”).build());

Ele é composto por três parâmetros:

  1. O status: nesse exemplo foi selecionado o status de informação para o log;
  2. A descrição do log: utilizando o parâmetro “strLog”;
  3. O print: nele é utilizado o método MediaEntityBuilder. createScreenCaptureFromPath, recebendo por parâmetro o caminho do print (“screenshot.png”). Ele vai utilizar arquivo de imagem “screenshot.png” que existe naquele caminho.

Obviamente há um erro mostrado na imagem acima. Ele acontece porque o método “MediaEntityBuilder. createScreenCaptureFromPath” exige ser circundado por um “try/catch” ou então ter um “thrown” no método “logPrint”, conforme mostrado abaixo:

s183

Será selecionado o “Surround with try/catch”:

s184

O método está QUASE pronto. Ele simplesmente adiciona uma entrada de log no html de log utilizando uma imagem disponível. Contudo, ainda não criamos o MÉTODO RESPONSÁVEL POR CRIAR A IMAGEM DA TELA. Será criado agora esse método, chamado “efetuarPrintTela()”, conforme mostrado no final da imagem abaixo:

s185

Ele será privado pois vamos assumir que ele será utilizado somente dentro da classe “Utils.java”.

========================================================================================

UPDATE Janeiro/2021: como pode perceber o blog já tem uma idade “avançada”, e algumas coisinhas vão mudando com o tempo. Bom, antes de prosseguir com os passos abaixo, é importante adicionar no seu pom.xml a seguinte dependência, do contrário a classe FileUtils não será encontrada com as versões mais atuais das dependências utilizadas no projeto até então:

<!– https://mvnrepository.com/artifact/commons-io/commons-io –>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>

=======================================================================================

Abaixo o método já pronto, com suas linhas de código (imports ainda não realizados):

s186

A linha 32 utiliza o objeto driver obtido da classe “TestRule.java” para tirar um print da tela.

As linhas 33 e 34 simplesmente pegam o print e o salva no diretório “System.getProperty(“user.dir”) + “\\src\\test\\resources\\” + strLog + “.png” sob o nome de “strLog.png”, onde “strLog” é a descrição do log (exemplo: “Tela de Login”, “Dados de Identificação do Cliente”, “Dados de Endereço do Cliente”, etc…)

As imagens abaixo mostram os imports a serem realizados:

s187

s188

s189

s190

Após os imports realizados:

s191

Na linha 33 tem-se um erro pois ali é necessário adicionar um “throws” no método efetuarPrintTela ou então adicionar um try/catch dentro dele, conforme ilustrado abaixo:

s192

Foi selecionada a segunda opção:

s193

Como esse método será utilizado dentro do método “logPrint”, o qual é estático (static), o método efetuarPrintTela também deverá ser estático, então o ajuste abaixo é efetuado:

s194

Método ajustado, é hora de utilizá-lo dentro do  método “logPrint”:

s195

Em suma: na linha 20 é feita a coleta do print de tela e salvo no diretório “System.getProperty(“user.dir”) + “\\src\\test\\resources\\” + strLog + “.png. Na linha 21 é buscada essa imagem e adicionada no log.

Contudo, ainda tem um pequeno ajuste na linha 21 (no método “logPrint(String strLog)”). É preciso dizer para ele buscar o print no caminho comentado acima. Para isso é feito o ajuste destacado abaixo:

s196

Método finalizado, é hora de utilizá-lo. Iremos utilizá-lo em alguns dos métodos da classe “ClienteSteps.java”, conforme destacado abaixo:

s197

Executando o teste, o log html obtido será:

s198

s199

Ao clicar sobre os “ícones” de imagens exibidos no log acima, é possível ver o print em tela cheia, conforme exemplo abaixo:

s200

EXERCÍCIO: o objetivo desse exercício é fixar o conhecimento de coleta de prints e seu uso pelo ExtentReport. Para isso:

  1. Releia com atenção a aula de hoje;
  2. Crie a classe “Utils.java”;
  3. Na classe “TestRule.java” crie o método “getExtentTest()” conforme apresentado na aula;
  4. Crie na classe “Utils.java” o método “logPrint” conforme apresentado na aula, não esquecendo de realizar os imports necessários;
  5. Na classe “Utils.java” crie o método privado “efetuarPrintTela”, não esquecendo de realizar os imports necessários;
  6. Nos métodos da classe “ClienteSteps.java”, realize a chamada do método “efetuarPrintTela” da classe “Utils.java” conforme apresentado na aula;
  7. Revise seu projeto e execute-o. Analise os logs coletados;

2 comentários sobre “5 – Coleta de Logs – Parte II

  1. Joabe da Rocha Borges 26 de outubro de 2021 / 15:17

    Boa tarde.
    Meus prints não estão abrindo em tela cheia. Eles até aparecem na minha evidencia mas não aparecem em tela cheia, consegue me auxiliar no que posso ter feito de errado?
    Outo ponto, meus prints estão sendo salvos na pasta da evidencia, tipo cada um deles aparece lá, isso esta correto?
    Obrigado pelas ajudas, ja favoritei a pagina posi é muuuuito boa para quem esta aprendendo.
    Parabens.

    Curtir

Deixe um comentário