Como fazer uma captura de tela no Selenium WebDriver

Índice:

Anonim

Captura de tela no Selenium Webdriver

Uma captura de tela no Selenium Webdriver é usada para análise de bug. O webdriver Selenium pode fazer capturas de tela automaticamente durante a execução. Mas se os usuários precisarem fazer uma captura de tela por conta própria, eles precisam usar o método TakeScreenshot que notifica o WebDrive para tirar a captura de tela e armazená-la no Selenium.

Neste tutorial, você aprenderá,

  • Captura de tela usando Selenium WebDriver
  • O que é Ashot API?
  • Como baixar e configurar a API Ashot?
  • Capture screenshot de página inteira com API AShot
  • Tirar uma captura de tela de um elemento específico da página
  • Comparação de imagens usando AShot

Captura de tela usando Selenium WebDriver

A captura de tela no Selenium é um processo de 3 etapas

Etapa 1) Converter o objeto do driver da web em TakeScreenshot

TakesScreenshot scrShot = ((TakesScreenshot) webdriver);

Etapa 2) Chame o método getScreenshotAs para criar o arquivo de imagem

Arquivo SrcFile = scrShot.getScreenshotAs (OutputType.FILE);

Etapa 3) Copiar o arquivo para o local desejado

Exemplo: neste exemplo, faremos a captura de tela de http://demo.guru99.com/V4/ e a salvaremos como C: /Test.png.webp

package Guru99TakeScreenshot;import java.io.File;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.firefox.FirefoxDriver;import org.testng.annotations.Test;public class Guru99TakeScreenshot {@Testepublic void testGuru99TakeScreenShot () throws Exception {Driver WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");driver = novo FirefoxDriver ();// ir para urldriver.get ("http://demo.guru99.com/V4/");// Chame a função de captura de telathis.takeSnapShot (driver, "c: //test.png.webp");}/ *** Esta função fará uma captura de tela* @param webdriver* @param fileWithPath* @throws Exception* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) throws Exception {// Converter o objeto do driver da web em TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Chame o método getScreenshotAs para criar o arquivo de imagemArquivo SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Mova o arquivo de imagem para o novo destinoArquivo DestFile = novo arquivo (fileWithPath);// Copiar arquivo no destinoFileUtils.copyFile (SrcFile, DestFile);}}

NOTA: Selenium versão 3.9.0 e superior não fornece Apache Commons IO JAR. Você pode simplesmente baixá-los aqui e chamá-los em seu projeto

O que é Ashot API?

Ashot é um utilitário de terceiros da Yandex com suporte do Selenium WebDriver para capturar as capturas de tela. Ele tira uma captura de tela de um WebElement individual, bem como uma captura de tela de página inteira de uma página, que é mais significativo do que o tamanho da tela.

Como baixar e configurar a API Ashot?

Existem dois métodos para configurar a API Ashot

  • 1. Usando Maven
  • 2. Manualmente, sem usar qualquer ferramenta

Para configurar por meio do Maven:

  • Acesse https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  • Clique na versão mais recente, por enquanto. É 1.5.4
  • Copie o código de dependência e adicione ao seu arquivo pom.xml

  • Salve o arquivo, e o Maven adicionará o jar ao seu caminho de construção
  • E agora você está pronto !!!

Para configurar manualmente sem qualquer ferramenta de dependência

  1. Acesse https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Clique na versão mais recente, por enquanto. É 1.5.4
  3. Clique no jar, baixe e salve em sua máquina

  1. Adicione o arquivo jar em seu caminho de compilação:
  2. No Eclipse, clique com o botão direito do mouse no projeto -> vá para propriedades -> Caminho de construção -> Bibliotecas -> Adicionar jars externos
  3. Selecione o arquivo jar
  4. Aplicar e fechar

Capture screenshot de página inteira com API AShot

Etapa 1) Crie um objeto Ashot e chame o método takeScreenshot () se quiser apenas a captura de tela para a página de tamanho de tela.

Captura de tela screenshot = new Ashot (). TakeScreenshot (driver);

Mas se você quiser uma captura de tela da página maior que o tamanho da tela, chame o método shootingStrategy () antes de chamar o método takeScreenshot () para configurar a política. Em seguida, chame um método takeScreenshot () passando o webdriver, por exemplo,

Screenshot screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver);

Aqui, 1000 é o tempo de rolagem em milissegundos, portanto, para fazer uma captura de tela, o programa rolará a cada 1000 ms.

Etapa 2): Agora, pegue a imagem da captura de tela e grave-a no arquivo. Você pode fornecer o tipo de arquivo como jpg.webp, png, etc.

ImageIO.write (screenshot.getImage (), "jpg.webp", novo arquivo (". \\ screenshot \\ fullimage.jpg.webp"));

Tirar uma captura de tela de página inteira de uma página maior que o tamanho da tela.

Exemplo: Aqui está o exemplo de captura de tela de página inteira de http://demo.guru99.com/test/guru99home/ e salve no arquivo "screenshot.jpg.webp."

Devido ao uso da classe ShootingStrategy da API Ashot, seremos capazes de capturar uma imagem completa de uma página maior que o tamanho da tela. Aqui está o programa:

package Guru99;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import org.openqa.selenium.By;import org.openqa.selenium.WebElement;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import ru.yandex.qatools.ashot.AShot;import ru.yandex.qatools.ashot.Screenshot;import ru.yandex.qatools.ashot.shooting.ShootingStrategies;public class TestScreenshotUsingAshot {public static void main (String [] args) throws IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Driver WebDriver = novo ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();Screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver);ImageIO.write (screenshot.getImage (), "jpg.webp", novo arquivo ("c: \\ ElementScreenshot.jpg.webp"));}}

Tirar uma captura de tela de um elemento específico da página

Exemplo: Aqui está o exemplo de captura de tela do elemento do logotipo Guru 99 na página http://demo.guru99.com/test/guru99home/ e salve no arquivo "ElementScreenshot.jpg.webp". Aqui está o código:

package Guru99;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import org.openqa.selenium.By;import org.openqa.selenium.WebElement;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import ru.yandex.qatools.ashot.AShot;import ru.yandex.qatools.ashot.Screenshot;import ru.yandex.qatools.ashot.shooting.ShootingStrategies;public class TestElementScreenshotUsingAshot {public static void main (String [] args) throws IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Driver WebDriver = novo ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();// Encontre o elemento para fazer uma captura de telaElemento WebElement = driver.findElement (By.xpath ("// * [@ id = \" nome do site \ "] / a [1] / img"));// Junto com o elemento de passagem do driver também no método takeScreenshot ().Screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver, elemento);ImageIO.write (screenshot.getImage (), "jpg.webp", novo arquivo ("c: \\ ElementScreenshot.jpg.webp"));}}

Comparação de imagens usando AShot

package Guru99;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import ru.yandex.qatools.ashot.AShot;import ru.yandex.qatools.ashot.Screenshot;import ru.yandex.qatools.ashot.comparison.ImageDiff;import ru.yandex.qatools.ashot.comparison.ImageDiffer;public class TestImageComaprison {public static void main (String [] args) throws IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");Driver WebDriver = novo ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Encontre o elemento e faça uma captura de telaWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" nome do site \ "] / a [1] / img"));Screenshot logoElementScreenshot = new AShot (). TakeScreenshot (driver, logoElemnent);// leia a imagem para compararBufferedImage expectedImage = ImageIO.read (new File ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// Cria o objeto ImageDiffer e chama o método makeDiff ()ImageDiffer imgDiff = new ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (actualImage, expectImage);if (diff.hasDiff () == true) {System.out.println ("As imagens são iguais");} outro {System.out.println ("As imagens são diferentes");}driver.quit ();}}

Resumo

  • Ashot API é um freeware da Yandex.
  • É um utilitário para fazer uma captura de tela no Selenium.
  • Ele ajuda você a fazer uma captura de tela de um WebElement individual em diferentes plataformas, como navegadores de desktop, iOS Simulator Mobile Safari, Android Emulator Browser.
  • Ele pode fazer uma captura de tela de uma página maior que o tamanho da tela.
  • Este recurso foi removido na versão 3 do selênio, então Ashot API é uma boa opção.
  • Ele pode decorar as imagens.
  • Ele fornece uma comparação de captura de tela.

Tornado possível devido às contribuições de Shradhdha Dave