Как да направите екранна снимка Selenium уебдрайвер
Екранна снимка в Selenium
A Екранна снимка в Selenium Уебдрайвер се използва за анализ на грешки. Selenium webdriver може автоматично да прави екранни снимки по време на изпълнението. Но ако потребителите трябва сами да направят екранна снимка, те трябва да използват метода TakeScreenshot, който уведомява WebDrive да направи екранната снимка и да я съхрани в Selenium.
Как да направите екранна снимка 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
Ето кода на екранната снимка в селен:
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 е помощна програма на трета страна от Yandex с подкрепата на Selenium WebDriver за заснемане на екранни снимки. Прави се екранна снимка на отделен WebElement, както и екранна снимка на цяла страница на страница, което е по-важно от размера на екрана.
Как да изтеглите и конфигурирате Ashot API?
Има два метода за конфигуриране на Ashot API
- Използване на Maven
- Ръчно без използване на инструмент
За да конфигурирате чрез Maven:
- Отиди https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Кликнете върху най-новата версия, за сега. Това е 1.5.4
- Копирайте кода на зависимостта и добавете към вашия pom.xml файл
- Запазете файла и Maven ще добави буркана към пътя ви за изграждане
- И сега сте готови!!!
За ръчно конфигуриране без инструмент за зависимост
- Отиди https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Кликнете върху най-новата версия, за сега. Това е 1.5.4
- Кликнете върху буркана, изтеглете го и го запазете на вашата машина
- Добавете jar файла във вашия път за изграждане:
- In Eclipse, щракнете с десния бутон върху проекта -> отидете на свойства -> Път на изграждане -> Библиотеки -> Добавяне на външни буркани
- Изберете jar файла
- Приложи и затвори
Заснемане на екранна снимка на цяла страница с AShot API
Стъпка 1) Създайте обект Ashot и извикайте метода takeScreenshot(), ако просто искате екранната снимка за страницата с размер на екрана.
Screenshot screenshot = new Ashot().takeScreenshot(driver);
Но ако искате екранна снимка на страницата, по-голяма от размера на екрана, извикайте метода shootingStrategy(), преди да извикате метода takeScreenshot(), за да настроите правилата. След това извикайте метод takeScreenshot(), предавайки уебдрайвера, например,
Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver);
Тук 1000 е време за превъртане в милисекунди, така че за правене на екранна снимка програмата ще превърта за всеки 1000 милисекунди.
Стъпка 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“.
Ето кода на екранната снимка в селен:
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(); } }
Oбобщение
- Ashot API е безплатен софтуер от Yandex.
- Това е помощна програма за правене на екранна снимка Selenium.
- Помага ви да направите екранна снимка на отделен WebElement на различни платформи като настолни браузъри, iOS Simulator Mobile Safari, Android Емулатор браузър.
- Може да направи екранна снимка на страница, по-голяма от размера на екрана.
- Тази функция е премахната във версия 3 на селен, така че API на Ashot е добър вариант.
- Може да украси екранните снимки.
- Предоставя сравнение на екранни снимки.