Como fazer uma captura de tela Selenium webdriver

โšก Resumo Inteligente

Tirar captura de tela Selenium O WebDriver explica como capturar evidรชncias visuais para depuraรงรฃo e regressรฃo visual, abordando os mรฉtodos TakesScreenshot, captura de pรกgina inteira, captura de elementos e AShot.

  • ???? Por que capturar: Comprove as falhas e documente as execuรงรตes.
  • ๐Ÿ› ๏ธ Tira uma captura de tela: Cast WebDriver, chamar getScreenshotAs, salvar arquivo.
  • ๐Ÿ–ผ๏ธ Captura de Elementos: Selenium A versรฃo 4 suporta o mรฉtodo getScreenshotAs em um WebElement.
  • ๐Ÿ“ฆ A Shot: Costura pรกginas inteiras e compara pixels.
  • ๐Ÿค– Testes visuais de IA: O Applitools detecta diferenรงas ignorando o ruรญdo.
  • ๐Ÿ“Š Relatรณrios: Incorpore capturas de tela no Allure ou no ExtentReports.

Como fazer uma captura de tela Selenium webdriver

Captura de tela em Selenium

A Captura de tela em Selenium Driver da Web รฉ usado para anรกlise de bugs. Selenium O webdriver pode fazer capturas de tela automaticamente durante a execuรงรฃo. Mas se os usuรกrios precisarem capturar uma captura de tela por conta prรณpria, eles precisarรฃo usar o mรฉtodo TakeScreenshot, que notifica o WebDrive para fazer a captura de tela e armazenรก-la em Selenium.

Captura de tela em Selenium

Como fazer uma captura de tela Selenium

Aqui estรก um processo passo a passo sobre como capturar uma captura de tela no Selenium WebDriver

Passo 1) Converter objeto de driver da web em TakeScreenshot

TakesScreenshot scrShot =((TakesScreenshot)webdriver);

Passo 2) Chame o mรฉtodo getScreenshotAs para criar o arquivo de imagem

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

Passo 3) Copie o arquivo para o local desejado

Exemplo: Neste exemplo faremos uma captura de tela de https://demo.guru99.com/V4/ e salve-o como C:/Test.png

Aqui estรก o cรณdigo da captura de tela em selรชnio:

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 {

    @Test

    public void testGuru99TakeScreenShot() throws Exception{

		WebDriver driver ;
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
    	driver = new FirefoxDriver();

        //goto url

        driver.get("https://demo.guru99.com/V4/");

        //Call take screenshot function

        this.takeSnapShot(driver, "c://test.png") ;     

    }

    /**

     * This function will take screenshot

     * @param webdriver

     * @param fileWithPath

     * @throws Exception

     */

    public static void takeSnapShot(WebDriver webdriver,String fileWithPath) throws Exception{

        //Convert web driver object to TakeScreenshot

        TakesScreenshot scrShot =((TakesScreenshot)webdriver);

        //Call getScreenshotAs method to create image file

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

            //Move image file to new destination

                File DestFile=new File(fileWithPath);

                //Copy file at destination

                FileUtils.copyFile(SrcFile, DestFile);

    }

}

OBSERVAร‡รƒO: Selenium a versรฃo 3.9.0 e superior nรฃo fornece Apache Commons IO JAR. Vocรช pode simplesmente baixรก-los aqui. e chame-os em seu projeto

O que รฉ API Ashot?

Ashot รฉ um utilitรกrio de terceiros da Yandex suportado pela Selenium WebDriver para capturar as capturas de tela. Ele faz uma captura de tela de um WebElement individual, bem como uma captura de tela de pรกgina inteira de uma pรกgina, o 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 nenhuma ferramenta

Para configurar atravรฉs do Maven:

Configurar atravรฉs do Maven

  • 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

Configurar manualmente sem qualquer ferramenta de dependรชncia

  1. Adicione o arquivo jar no caminho de construรงรฃo:
  2. In Eclipse, clique com o botรฃo direito no projeto -> vรก para propriedades -> Caminho de construรงรฃo -> Bibliotecas -> Adicionar jars externos
  3. Selecione o arquivo jar
  4. Aplicar e fechar

Capture captura de tela de pรกgina inteira com API AShot

Passo 1) Crie um objeto Ashot e chame o mรฉtodo takeScreenshot() se desejar apenas a captura de tela da pรกgina de tamanho de tela.

Screenshot 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 รฉ rolado 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, png, etc.

ImageIO.write(screenshot.getImage(), "jpg", new File(".\\screenshot\\fullimage.jpg"));

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 uma captura de tela de pรกgina inteira de https://demo.guru99.com/test/guru99home/ e salve no arquivo โ€œscreenshot.jpgโ€.

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 cรณdigo da captura de tela no programa Selenium:

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");
WebDriver driver  = new ChromeDriver();	

driver.get("https://demo.guru99.com/test/guru99home/");
driver.manage().window().maximize();
		
Screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver);

ImageIO.write(screenshot.getImage(), "jpg", new File("c:\\ElementScreenshot.jpg"));
	
	}

}

Tirar uma captura de tela de um elemento especรญfico da pรกgina

Exemplo: Aqui estรก um exemplo de captura de tela de um elemento. Guru 99 logotipo em https://demo.guru99.com/test/guru99home/ pรกgina e salve no arquivo โ€œElementScreenshot.jpgโ€.

Aqui estรก o cรณdigo da captura de tela em selรชnio:

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");
WebDriver driver  = new ChromeDriver();	

driver.get("https://demo.guru99.com/test/guru99home/");
driver.manage().window().maximize();
		
// Find the element to take a screenshot

WebElement element = driver.findElement(By.xpath ("//*[@id=\"site-name\"]/a[1]/img"));

// Along with driver pass element also in takeScreenshot() method.

Screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver,element);

ImageIO.write(screenshot.getImage(), "jpg", new File("c:\\ElementScreenshot.jpg"));
	}
}

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");
        WebDriver driver = new ChromeDriver();
        driver.get("https://demo.guru99.com/test/guru99home/");

        // Find the element and take a screenshot

        WebElement logoElement = driver.findElement(By.xpath("//*[@id=\"site-name\"]/a[1]/img"));
        Screenshot logoElementScreenshot = new AShot().takeScreenshot(driver, logoElemnent);

        // read the image to compare

        BufferedImage expectedImage = ImageIO.read(new File("C:\\Guru99logo.png"));

        BufferedImage actualImage = logoElementScreenshot.getImage();

        // Create ImageDiffer object and call method makeDiff()

        ImageDiffer imgDiff = new ImageDiffer();
        ImageDiff diff = imgDiff.makeDiff(actualImage, expectedImage);

        if (diff.hasDiff() == true) {
            System.out.println("Images are same");

        } else {
            System.out.println("Images are different");
        }
        driver.quit();
    }
}

Perguntas Frequentes

Eles documentam as falhas e comprovam rapidamente os erros intermitentes.

Ferramentas como o Applitools comparam capturas de tela de forma inteligente, ignorando conteรบdo dinรขmico.

Sim. As ferramentas de IA produzem TakesScreenshot, AShot e Selenium 4 trechos.

Use A Shot ou Selenium 4 com Chrome DevTools Page.captureScreenshot.

TakesScreenshot captura a รกrea visรญvel da tela. A Shot une pรกginas inteiras.

Captura o que รฉ renderizado. Redija dados sensรญveis antes de compartilhar.

Salve vocรช mesmo o arquivo retornado por getScreenshotAs.

Sim. Use element.getScreenshotAs(OutputType.FILE) diretamente.

Resuma esta postagem com: