Discutirei os seguintes tópicos:
- Por que a captura de tela é necessária nos testes de automação?
- Como capturar screenshot no Selenium?
Então, vamos começar, pessoal!
Captura de tela no Selenium WebDriver: Por que a captura de tela é necessária nos testes de automação?
Capturas de tela são desejáveis para análise de bug. pode tirar capturas de tela automaticamente durante a execução. Suponha que você escreva um script de teste para automatizar uma página da web, você não manteria o monitoramento para ver se está funcionando bem o tempo todo. Você deixaria o script fazer seu trabalho e você estaria ocupado com outro trabalho.
- As capturas de tela nos ajudam a entender o fluxo do aplicativo e a verificar se ele está se comportando de acordo.
- Você precisa fazer o typecast da instância do WebDriver para TakesScreenshot.
- Isso ajuda enquanto você está se apresentando teste de navegação cruzada como o usuário precisa para ver os relatórios de execução
- Rastrear a execução seria muito fácil se você estiver trabalhando em um navegador sem controle.
- Capturas de tela dos testes que falharam também podem ser facilmente capturadas.
Agora, vamos seguir em frente e aprender exatamente como você pode fazer uma captura de tela enquanto testa um aplicativo.
Captura de tela no Selenium WebDriver: Como capturar a tela no Selenium?
Para capturar uma imagem no Selenium, podemos fazer uso de uma interface, chamada TakesScreenshot. Este método euindica ao motorista que pode capturar uma imagem e armazená-la de diferentes maneiras.
Sintaxe:
File file = ((TakesScreenshot) driver) .getScreenshotAs (OutputType.FILE) String screenshotBase64 = ((TakesScreenshot) driver) .getScreenshotAs (OutputType.BASE64)
Onde Tipo de saída define o tipo de saída para uma captura de tela.
Para capturar a tela e armazená-la em um local específico, existe um método chamado “ getScreenshotAs '
Vamos entender isso em detalhes
Para WebDriver estendendo TakesScreenshot método, isso faz o melhor esforço dependendo do navegador para retornar o seguinte em uma ordem preferível:
- A página inteira
- Janela atual
- Parte visível do quadro atual
- Uma captura de tela de toda a tela contendo o navegador
- Todo o conteúdo do elemento HTML - a parte visível do elemento HTML
Sintaxe:
X getScreenshotAs (OutputType (X). Target) lança WebDriverException
Onde
- X é o tipo de retorno do método
- Alvo contém o endereço de destino
- Lança se a implementação subjacente não suportar captura de tela.
O caso de teste falhou
surgiu com algumas novas funcionalidades excelentes que tornam o teste de um aplicativo muito mais fácil. Isso ocorre porque o permite a interação fora da sandbox Javascript. Uma das novas funcionalidades úteis é poder fazer capturas de tela do WebDriver.
Você pode fazer capturas de tela em qualquer fase do teste, mas principalmente, é usado para quando um teste falha e fazer capturas de tela ajuda a análise para que possamos ver o que deu errado durante uma falha de teste. Isso pode ser feito usando Anotações TestNG.
Para fazer isso, primeiro, eu preciso
- Crie uma classe e implementeTestNG ‘ ITestListener ' .
- Em seguida, chame um método ‘OnTestFailure’ .
- Adicione o código para fazer a captura de tela neste método.
- Em vez de apenas fazer a captura de tela, obtenha o nome do método de teste e faça uma captura de tela com o nome do teste e coloque-o na pasta de destino.
Agora, a questão é como obter o objeto driver na classe TestListeners usando TestNG?
Vou ajudá-lo a entender como é fácil fazer isso.
Para fazer uma captura de tela no Selenium, precisamos ter um objeto driver. Obtenha o driver do ITestContext que deve ser definido na configuração básica, onde é fácil criar nossa instância do driver. Espero que vocês estejam claros com isso. Seguindo em frente, daremos uma olhada na demonstração, onde ajudarei você a entender como é simples fazer uma captura de tela no Selenium.Estarei explicando dois programas diferentes aqui para que você tenha uma ideia adequada sobre como fazer uma captura de tela no Selenium.
O primeiro programa trata de como capturar uma imagem do caso de teste executado com sucesso. O segundo programa ajuda a entender como fazer uma captura de tela durante a falha do teste.
Captura de tela no Selenium WebDriver: Demo
A primeira coisa a fazer quando você deseja testar um aplicativo da web é ter os arquivos Jar Selenium e as bibliotecas Java. Você pode escolher um IDE de sua preferência. Eu prefiro trabalhar no Eclipse IDE porque é fácil de usar.
- Vou definir o driver do navegador para
- Instancie a instância do driver com o ChromeDriver.
- Obtenha o URL da página da web.
- Execute as ações correspondentes.
Nesse caso, vou tirar uma captura de tela de nossa página oficial
Consulte o código abaixo:
import java.io.File import java.io.IOException import org.apache.commons.io.FileUtils import org.openqa.selenium.OutputType import org.openqa.selenium.TakesScreenshot import org.openqa.selenium.WebDriver import org.openqa .selenium.chrome.ChromeDriver public class Screen {public static void main (String [] args) lança Exception {System.setProperty ('webdriver.chrome.driver', 'C: UsersNeha_VaidyaDesktopchromedriver_win32chromedriver.exe') WebDriver driver = new ChromeDriver.exe ') driver.get ('http://www.edureka.co/') TakesScreenshot ts = (TakesScreenshot) driver Arquivo fonte = ts.getScreenshotAs (OutputType.FILE) FileUtils.copyFile (fonte, novo arquivo ('./ Screenshots / Tela .png ')) System.out.println (' a captura de tela foi tirada ') driver.quit ()}}
A saída para o código acima é descrita abaixo:
E a pasta contém a imagem
Agora, vamos entender como fazer uma captura de tela do teste que falhou
- Primeiro,
- Adicione o arquivo XML TestNG.
- Adicione as dependências do maven.
- Crie uma classe BaseClass que contém a instância do WebDriver.
- Defina duas funções, nomeadamente inicialização () e falha ()
- Chame essas duas funções em outra classe, demo que herda a BaseClass.
- Esta classe Demo contém os dois métodos setUp () que chama a função initialization (), tearDown () ajuda a fechar o driver e ScreenshotTest () onde declaramos a saída real e esperada.
- Nesse caso, declararei verdadeiro e falso, o que resulta na falha do caso de teste.
- Crie outra classe, ListenersClass, que ajuda o WebDriver a ouvir os eventos específicos.
- Adicione este código na classe demo @Listeners (ListenersClass.class) antes da função principal para ouvir o caso de teste.
Você pode consultar este código:
BaseClass
adicione dois números em java
pacote com.edureka import java.io.File import java.io.IOException import org.apache.commons.io.FileUtils import org.openqa.selenium.OutputType import org.openqa.selenium.TakesScreenshot import org.openqa.selenium.WebDriver import org.openqa.selenium.chrome.ChromeDriver import org.testng.annotations.Listeners public class BaseClass {public static WebDriver driver public static void initialization () {System.setProperty ('webdriver.chrome.driver', 'C: UsersNeha_VaidyaDesktopwinchromedriver_32. exe ') driver = new ChromeDriver () driver.get (' http://www.edureka.co/ ')} public void failed () {Arquivo srcFile = ((TakesScreenshot) driver) .getScreenshotAs (OutputType.FILE) try {FileUtils.copyFile (srcFile, new File ('/ C: / Users / Neha_Vaidya / eclipse-workspace / Screens /' + 'ScreenshotsTaken / tests.jpg'))} catch (IOException e) {e.printStackTrace ()}} }
DemoClass
package com.edureka import org.testng.Assert import org.testng.annotations.AfterMethod import org.testng.annotations.BeforeMethod import org.testng.annotations.Listeners import org.testng.annotations.Test @Listeners (ListenersClass.class) public demo de classe estende BaseClass {@BeforeMethod public void setUp () {inicialização ()} @AfterMethod public void tearDown () {driver.quit ()} @Test public void takeScreenshotTest () {Assert.assertEquals (true, false)}}
ListenersClass
pacote com.edureka import org.testng.ITestContext import org.testng.ITestListener import org.testng.ITestResult public class ListenersClass extends BaseClass implementa ITestListener {public void onTestStart (ITestResult result) {// TODO stub de método gerado automaticamente} public void onTestSuccess (ITestResult result) {// TODO Auto-generated method stub} public void onTestFailure (ITestResult result) {System.out.println ('Failed Test') failed ()} public void onTestSkipped (ITestResult result) {// TODO Auto- stub do método gerado} public void onTestFailedButWithinSuccessPercentage (ITestResult result) {// TODO stub do método gerado automaticamente} public void onStart (ITestContext context) {// TODO stub do método gerado automaticamente} public void onFinish (ITestContext context) {// TODO Auto stub de método gerado}}
A saída é representada desta maneira:
Com isso, chegamos ao fim deste blog “Como fazer uma captura de tela no Selenium WebDriver”. Espero que tenham gostado deste artigo e tenham entendido como executar um caso de teste. Tem alguma questão para nós? Mencione isso na seção de comentários de “Como fazer uma captura de tela no Selenium WebDriver” e entraremos em contato com você. Se você deseja aprender mais sobre o Selenium WebDriver e construir uma carreira no mesmo, consulte nosso que vem com treinamento ao vivo conduzido por instrutor e experiência em projetos da vida real. Este treinamento irá ajudá-lo a entender o Teste de Selênio em profundidade e ajudá-lo a obter domínio sobre o assunto.