Slik tar du skjermbilde Selenium webdriver
โก Smart oppsummering
Ta skjermbilde i Selenium WebDriver forklarer hvordan man fanger opp visuelle bevis for feilsรธking og visuell regresjon, og dekker TakesScreenshot, helsides opptak, elementopptak og AShot.

Skjermbilde i Selenium
A Skjermbilde i Selenium Webdriver brukes til feilanalyse. Selenium webdriver kan automatisk ta skjermbilder under utfรธrelsen. Men hvis brukere trenger รฅ ta et skjermbilde pรฅ egenhรฅnd, mรฅ de bruke TakeScreenshot-metoden som varsler WebDrive om รฅ ta skjermbildet og lagre det i Selenium.
Slik tar du skjermbilde Selenium
Her er en trinn-for-trinn-prosess for hvordan du tar skjermbilde i selen WebDriver
Trinn 1) Konverter webdriverobjekt til TakeScreenshot
TakesScreenshot scrShot =((TakesScreenshot)webdriver);
Trinn 2) Kall getScreenshotAs-metoden for รฅ lage bildefil
File SrcFile=scrShot.getScreenshotAs(OutputType.FILE);
Trinn 3) Kopier filen til รธnsket plassering
Eksempel: I dette eksemplet skal vi ta skjermfangst av https://demo.guru99.com/V4/ & lagre den som C:/Test.png
Her er skjermbildekoden i selen:
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); } }
NOTAT: Selenium versjon 3.9.0 og nyere gir ikke Apache Commons IO JAR. Du kan ganske enkelt laste dem ned her. og ring dem i prosjektet ditt
Hva er Ashot API?
Ashot er et tredjepartsverktรธy av Yandex stรธttet av Selenium WebDriver for รฅ ta skjermbildene. Det tar et skjermbilde av et individuelt WebElement sรฅ vel som et helsides skjermbilde av en side, som er mer betydningsfull enn skjermstรธrrelsen.
Hvordan laste ned og konfigurere Ashot API?
Det er to metoder for รฅ konfigurere Ashot API
- Bruke Maven
- Manuelt uten bruk av noe verktรธy
For รฅ konfigurere gjennom Maven:
- Gรฅ til https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Klikk pรฅ den nyeste versjonen, for nรฅ. Det er 1.5.4
- Kopier avhengighetskoden og legg til pom.xml-filen
- Lagre filen, og Maven vil legge krukken til byggebanen din
- Og nรฅ er du klar!!!
For รฅ konfigurere manuelt uten noe avhengighetsverktรธy
- Gรฅ til https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Klikk pรฅ den nyeste versjonen, for nรฅ. Det er 1.5.4
- Klikk pรฅ krukken, last ned og lagre den pรฅ maskinen din
- Legg til jar-filen i byggebanen din:
- In Eclipse, hรธyreklikk pรฅ prosjektet -> gรฅ til egenskaper -> Bygg bane -> Biblioteker -> Legg til eksterne krukker
- Velg jar-filen
- Pรฅfรธr og lukk
Ta skjermbilde pรฅ hele siden med AShot API
Trinn 1) Lag et Ashot-objekt og kall takeScreenshot()-metoden hvis du bare vil ha skjermbildet for skjermstรธrrelsessiden.
Screenshot screenshot = new Ashot().takeScreenshot(driver);
Men hvis du vil ha et skjermbilde av siden som er stรธrre enn skjermstรธrrelsen, kaller du shootingStrategy()-metoden fรธr du kaller takeScreenshot()-metoden for รฅ sette opp policyen. Deretter kaller du en metode takeScreenshot() som passerer webdriveren, for eksempel,
Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver);
Her rulles 1000 ut tid i millisekunder, sรฅ for รฅ ta et skjermbilde vil programmet rulle for hver 1000 msek.
Trinn 2): Nรฅ, fรฅ bildet fra skjermbildet og skriv det til filen. Du kan angi filtypen som jpg, png, etc.
ImageIO.write(screenshot.getImage(), "jpg", new File(".\\screenshot\\fullimage.jpg"));
Ta et helsides skjermbilde av en side som er stรธrre enn skjermstรธrrelsen.
Eksempel: Her er eksempelet pรฅ รฅ ta et helsides skjermbilde av https://demo.guru99.com/test/guru99home/ og lagre til filen "screenshot.jpg."
Pรฅ grunn av bruk av ShootingStrategy-klassen til Ashot API, vil vi kunne ta et fullstendig bilde av en side som er stรธrre enn skjermstรธrrelsen.
Her er skjermbildekoden i selenprogrammet:
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")); } }
Ta et skjermbilde av et bestemt element pรฅ siden
Eksempel: Her er et eksempel pรฅ hvordan man tar et skjermbilde av et element Guru 99-logoen pรฅ https://demo.guru99.com/test/guru99home/ side og lagre til filen "ElementScreenshot.jpg".
Her er skjermbildekoden i selen:
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")); } }
Bildesammenligning med 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(); } }



