Jak zrobić zrzut ekranu w Selenium Sterownik sieciowy
Zrzut ekranu w Selenium
A Zrzut ekranu w Selenium Sterownik internetowy służy do analizy błędów. Selenium webdriver może automatycznie robić zrzuty ekranu podczas wykonywania. Jeśli jednak użytkownicy muszą samodzielnie przechwycić zrzut ekranu, muszą skorzystać z metody TakeScreenshot, która powiadamia dysk WebDrive o konieczności wykonania zrzutu ekranu i zapisania go w Selenium.
Jak zrobić zrzut ekranu w Selenium
Oto proces krok po kroku, jak wykonać zrzut ekranu w Selenium WebDriver
Krok 1) Konwertuj obiekt sterownika internetowego na TakeScreenshot
TakesScreenshot scrShot =((TakesScreenshot)webdriver);
Krok 2) Wywołaj metodę getScreenshotAs, aby utworzyć plik obrazu
File SrcFile=scrShot.getScreenshotAs(OutputType.FILE);
Krok 3) Skopiuj plik do wybranej lokalizacji
Przykład: W tym przykładzie zrobimy zrzut ekranu https://demo.guru99.com/V4/ i zapisz go jako C:/Test.png
Oto kod zrzutu ekranu w 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);
}
}
UWAGA: Selenium wersja 3.9.0 i nowsze nie udostępnia plików JAR Apache Commons IO. Możesz je po prostu pobrać w tym miejscu i wywołaj je w swoim projekcie
Co to jest API Ashota?
Ashot to narzędzie strony trzeciej opracowane przez Yandex wspierany przez Selenium WebDriver do przechwytywania zrzutów ekranu. Wykonuje zrzut ekranu pojedynczego elementu WebElement, a także zrzut ekranu całej strony strony, który jest ważniejszy niż rozmiar ekranu.
Jak pobrać i skonfigurować API Ashota?
Istnieją dwie metody konfiguracji API Ashota
- Korzystanie z Maven
- Ręcznie, bez użycia jakichkolwiek narzędzi
Aby skonfigurować za pomocą Mavena:
- Iść do https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Na razie kliknij najnowszą wersję. Jest to wersja 1.5.4
- Skopiuj kod zależności i dodaj go do pliku pom.xml
- Zapisz plik, a Maven doda słoik do ścieżki kompilacji
- A teraz jesteś gotowy!!!
Aby skonfigurować ręcznie bez żadnego narzędzia zależności
- Iść do https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Na razie kliknij najnowszą wersję. Jest to wersja 1.5.4
- Kliknij słoik, pobierz i zapisz go na swoim komputerze
- Dodaj plik jar do ścieżki kompilacji:
- In Eclipse, kliknij projekt prawym przyciskiem myszy -> przejdź do właściwości -> Ścieżka budowania -> Biblioteki -> Dodaj zewnętrzne słoiki
- Wybierz plik jar
- Zastosuj i zamknij
Przechwyć zrzut ekranu całej strony za pomocą interfejsu API AShot
Krok 1) Utwórz obiekt Ashot i wywołaj metodę takeScreenshot(), jeśli chcesz mieć tylko zrzut ekranu dla strony z rozmiarem ekranu.
Screenshot screenshot = new Ashot().takeScreenshot(driver);
Jeśli jednak chcesz, aby zrzut ekranu strony był większy niż rozmiar ekranu, wywołaj metodę shootStrategy() przed wywołaniem metody takeScreenshot() w celu skonfigurowania polityki. Następnie wywołaj metodę takeScreenshot() przekazującą webdriver, na przykład:
Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver);
Tutaj 1000 jest przewijane w milisekundach, więc w przypadku zrobienia zrzutu ekranu program będzie przewijał co 1000 ms.
Krok 2): Teraz pobierz obraz ze zrzutu ekranu i zapisz go w pliku. Możesz podać typ pliku jako jpg, png itp.
ImageIO.write(screenshot.getImage(), "jpg", new File(".\\screenshot\\fullimage.jpg"));
Wykonywanie zrzutu ekranu całej strony strony większej niż rozmiar ekranu.
Przykład: Oto przykład przechwycenia całostronicowego zrzutu ekranu https://demo.guru99.com/test/guru99home/ i zapisz w pliku „screenshot.jpg”.
Dzięki zastosowaniu klasy ShootingStrategy API Ashot będziemy mogli przechwycić pełny obraz strony większy niż rozmiar ekranu.
Oto kod zrzutu ekranu w programie selenowym:
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"));
}
}
Wykonanie zrzutu ekranu konkretnego elementu strony
Przykład: Oto przykład przechwycenia zrzutu ekranu elementu logo Guru 99 https://demo.guru99.com/test/guru99home/ stronę i zapisz w pliku „ElementScreenshot.jpg”.
Oto kod zrzutu ekranu w 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"));
}
}
Porównanie obrazów przy użyciu 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();
}
}
Podsumowanie
- Ashot API jest darmowym oprogramowaniem firmy Yandex.
- Jest to narzędzie do robienia zrzutów ekranu Selenium.
- Pomaga zrobić zrzut ekranu pojedynczego elementu WebElement na różnych platformach, takich jak przeglądarki komputerowe, iOS Simulator Mobile Safari, Android Przeglądarka emulatora.
- Może wykonać zrzut ekranu strony większej niż rozmiar ekranu.
- Funkcja ta została usunięta w wersji Selenium 3, więc API Ashot jest dobrą opcją.
- Może ozdobić zrzuty ekranu.
- Zapewnia porównanie zrzutów ekranu.



