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.

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.
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
- Usando Maven
- Manualmente sem usar nenhuma ferramenta
Para configurar atravรฉs 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
- Acesse https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Clique na versรฃo mais recente, por enquanto. ร 1.5.4
- Clique no jar, baixe e salve em sua mรกquina
- Adicione o arquivo jar no caminho de construรงรฃo:
- In Eclipse, clique com o botรฃo direito no projeto -> vรก para propriedades -> Caminho de construรงรฃo -> Bibliotecas -> Adicionar jars externos
- Selecione o arquivo jar
- 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(); } }



