Kako napraviti snimak zaslona Selenium webdriver
โก Pametni saลพetak
Snimi zaslon u Selenium WebDriver objaลกnjava snimanje vizualnih dokaza za otklanjanje pogreลกaka i vizualnu regresiju, pokrivajuฤi TakesScreenshot, snimanje cijele stranice, snimanje elemenata i AShot.

Snimka zaslona u Selenium
A Snimka zaslona u Selenium Webdriver koristi se za analizu greลกaka. Selenium webdriver moลพe automatski snimati snimke zaslona tijekom izvoฤenja. Ali ako korisnici trebaju sami snimiti snimku zaslona, โโmoraju upotrijebiti metodu TakeScreenshot koja obavjeลกtava WebDrive da napravi snimku zaslona i pohrani je u Selenium.
Kako napraviti snimak zaslona Selenium
Ovdje je korak po korak postupak snimanja snimke zaslona u selenium WebDriver
Korak 1) Pretvorite objekt web upravljaฤkog programa u TakeScreenshot
TakesScreenshot scrShot =((TakesScreenshot)webdriver);
Korak 2) Pozovite metodu getScreenshotAs za stvaranje slikovne datoteke
File SrcFile=scrShot.getScreenshotAs(OutputType.FILE);
Korak 3) Kopirajte datoteku na ลพeljenu lokaciju
Primjer: U ovom ฤemo primjeru snimiti zaslon https://demo.guru99.com/V4/ i spremite ga kao C:/Test.png
Evo koda snimke zaslona u selenu:
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); } }
NAPOMENA: Selenium verzija 3.9.0 i novije ne pruลพaju Apache Commons IO JAR. Moลพete ih jednostavno preuzeti ovdje i pozovite ih u svoj projekt
ล to je Ashot API?
Ashot je usluลพni program treฤe strane tvrtke Yandex podrลพan od Selenium WebDriver za snimanje snimki zaslona. Potrebna je snimka zaslona pojedinaฤnog WebElementa kao i snimka zaslona cijele stranice stranice, ลกto je znaฤajnije od veliฤine zaslona.
Kako preuzeti i konfigurirati Ashot API?
Postoje dvije metode za konfiguriranje Ashot API-ja
- Koriลกtenje Mavena
- Ruฤno bez upotrebe alata
Za konfiguraciju putem Mavena:
- Idi na https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Kliknite na najnoviju verziju, za sada. To je 1.5.4
- Kopirajte kod ovisnosti i dodajte u svoju datoteku pom.xml
- Spremite datoteku i Maven ฤe dodati jar vaลกoj putanji izgradnje
- I sada ste spremni!!!
Za ruฤno konfiguriranje bez ikakvog alata ovisnosti
- Idi na https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Kliknite na najnoviju verziju, za sada. To je 1.5.4
- Kliknite na staklenku, preuzmite je i spremite na svoj stroj
- Dodajte jar datoteku u svoj put izgradnje:
- In Eclipse, desnom tipkom miลกa kliknite projekt -> idite na svojstva -> Build Path -> Libraries -> Add External jar
- Odaberite jar datoteku
- Primijeni i zatvori
Snimite snimku zaslona cijele stranice pomoฤu AShot API-ja
Korak 1) Napravite Ashot objekt i pozovite metodu takeScreenshot() ako samo ลพelite snimku zaslona za stranicu veliฤine zaslona.
Screenshot screenshot = new Ashot().takeScreenshot(driver);
Ali ako ลพelite snimku zaslona stranice veฤu od veliฤine zaslona, โโpozovite metodu shootingStrategy() prije nego ลกto pozovete metodu takeScreenshot() za postavljanje pravila. Zatim pozovite metodu takeScreenshot() prosljeฤujuฤi webdriver, na primjer,
Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver);
Ovdje je 1000 vrijeme pomicanja u milisekundama, tako da ฤe se za snimanje zaslona program pomicati za svakih 1000 msec.
Korak 2): Sada uzmite sliku sa snimke zaslona i zapiลกite je u datoteku. Moลพete navesti vrstu datoteke kao jpg, png itd.
ImageIO.write(screenshot.getImage(), "jpg", new File(".\\screenshot\\fullimage.jpg"));
Snimanje snimke zaslona cijele stranice stranice koja je veฤa od veliฤine zaslona.
Primjer: Evo primjera snimanja zaslona cijele stranice https://demo.guru99.com/test/guru99home/ i spremite u datoteku "screenshot.jpg."
Zbog upotrebe klase ShootingStrategy Ashot API-ja, moฤi ฤemo snimiti punu sliku stranice veฤe od veliฤine zaslona.
Evo koda snimke zaslona u programu 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")); } }
Snimanje snimke zaslona odreฤenog elementa stranice
Primjer: Evo primjera snimanja snimke zaslona elementa Guru 99 logotip ukljuฤen https://demo.guru99.com/test/guru99home/ stranicu i spremite u datoteku โElementScreenshot.jpgโ.
Evo koda snimke zaslona u selenu:
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")); } }
Usporedba slike pomoฤu AShot-a
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(); } }



