Как сделать скриншот в Selenium WebDriver

Скриншот в Selenium Webdriver используется для анализа ошибок. Selenium может автоматически делать скриншоты во время выполнения тестов. Но если пользователь хочет сделать снимок экрана самостоятельно, ему нужно использовать метод TakeScreenshot, который сообщает WebDriver о необходимости сделать скриншот и сохранить его в Selenium.

Как сделать скриншот в Selenium WebDriver
Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ

Содержание:

Как сделать скриншот в Selenium

Ниже приведён пошаговый процесс создания скриншота в Selenium WebDriver.

Шаг 1. Преобразуйте объект веб-драйвера в TakeScreenshot:

TakesScreenshot scrShot =((TakesScreenshot)webdriver);

Шаг 2. Вызовите метод getScreenshotAs для создания файла изображения:

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

Шаг 3. Скопируйте файл в необходимое место.

В этом примере мы сделаем скриншот страницы https://demo.guru99.com/V4/ & и сохраним его в C:/Test.png.

Ниже приведён код для создания скриншота в Selenium:

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);

    }

}

Примечание: Selenium версии 3.9.0 и выше не поддерживает Apache Commons IO JAR. Вы можете скачать его здесь и вызвать в своём проекте.

Что такое Ashot API?

Ashot — это сторонняя утилита от компании Яндекс для создания скриншотов, которую поддерживает Selenium WebDriver. Она делает скриншот как отдельного веб-элемента, так и снимок страницы полностью.

Как загрузить и настроить Ashot API?

Существует два способа настройки Ashot API:

  1. С использованием Maven.
  2. Вручную без использования каких-либо инструментов.

Для настройки с помощью Maven:

Код зависимости Ashot API
  • Сохраните файл, и Maven добавит jar-файл в ваш путь сборки.

Для ручной настройки

jar-файл для настройки Ashot API
  • Добавьте jar-файл в путь сборки.
  • Далее в Eclipse щёлкните правой кнопкой мыши на проекте -> перейдите в свойства -> путь сборки (Build Path) -> библиотеки (Libraries) -> добавить внешние jar-файлы (Add External jars).
  • Выберите jar-файл.
  • Примените и закройте.

Создание скриншота всей страницы с помощью AShot API

Шаг 1. Создайте объект Ashot и вызовите метод takeScreenshot(), если вам нужен скриншот страницы, соответствующий размерам экрана устройства:

Screenshot screenshot = new Ashot().takeScreenshot(driver);

Если вам нужен скриншот страницы, превышающий размер экрана, то перед использованием метода takeScreenshot() вызовите метод shootingStrategy() для настройки. Затем вызовите метод takeScreenshot(), например:

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

Шаг 2. Сохраните получившееся изображение в файл. Вы можете выбрать тип файла, например, jpg, png и т. д.

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

Создание полноэкранного скриншота страницы, превышающей размер экрана.

Пример: создание полноэкранного скриншота страницы https://demo.guru99.com/test/guru99home/ и сохранение его в файл screenshot.jpg.

Благодаря использованию класса ShootingStrategy из Ashot API, можно захватить полное изображение страницы, превышающее размер экрана.

Ниже приведён код для создания скриншота в 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"));
	
	}

}

Создание скриншота определённого элемента страницы

Вот пример создания скриншота части логотипа Guru 99 на странице https://demo.guru99.com/test/guru99home/ и сохранения его в файл ElementScreenshot.jpg.

Ниже приведён код для создания скриншота в 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 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"));
	}
}

Сравнение изображений с помощью 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();
    }
}

Краткие итоги

  • Ashot API — бесплатный инструмент от компании Яндекс для создания скриншотов в Selenium.
  • С его помощью можно сделать скриншот отдельного веб-элемента на различных платформах, таких как браузеры для ПК, iOS-симулятор мобильного браузера Safari, эмулятор браузера Android.
  • Ashot API может делать снимки страниц, размер которых превышает размер экрана.
  • Инструмент также позволяет выделять части скриншота и обеспечивает возможность сравнения снимков.

Перевод статьи «How to Take Screenshot in Selenium WebDriver».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *