Hur man tar en skärmdump Selenium webbdrivrutin
⚡ Smart sammanfattning
Ta skärmdump i Selenium WebDriver förklarar hur man samlar in visuella bevis för felsökning och visuell regression, och täcker TakesScreenshot, helsidesinspelningar, elementinsamlingar och AShot.

Skärmdump in Selenium
A Skärmdump in Selenium Webdriver används för bugganalys. Selenium webdriver kan automatiskt ta skärmdumpar under körningen. Men om användare behöver ta en skärmdump på egen hand måste de använda metoden TakeScreenshot som meddelar WebDrive att ta skärmdumpen och lagra den i Selenium.
Hur man tar en skärmdump Selenium
Här är en steg-för-steg-process om hur man tar skärmdump i selenium WebDriver
Steg 1) Konvertera webbdrivrutinsobjekt till TakeScreenshot
TakesScreenshot scrShot =((TakesScreenshot)webdriver);
Steg 2) Anrop getScreenshotAs-metoden för att skapa bildfil
File SrcFile=scrShot.getScreenshotAs(OutputType.FILE);
Steg 3) Kopiera filen till önskad plats
Exempel: I det här exemplet tar vi skärmdump av https://demo.guru99.com/V4/ & spara den som C:/Test.png
Här är skärmdumpkoden 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); } }
OBS: Selenium version 3.9.0 och högre tillhandahåller inte Apache Commons IO JAR. Du kan helt enkelt ladda ner dem här. och ring dem i ditt projekt
Vad är Ashot API?
Ashot är ett tredjepartsverktyg från Yandex stöds av Selenium WebDriver för att fånga skärmdumparna. Det tar en skärmdump av ett enskilt WebElement såväl som en helsidesskärmdump av en sida, vilket är viktigare än skärmstorleken.
Hur laddar jag ner och konfigurerar Ashot API?
Det finns två metoder för att konfigurera Ashot API
- Använda Maven
- Manuellt utan att använda något verktyg
För att konfigurera via Maven:
- Gå till https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Klicka på den senaste versionen för tillfället. Det är 1.5.4
- Kopiera beroendekoden och lägg till i din pom.xml-fil
- Spara filen så lägger Maven till burken till din byggväg
- Och nu är du redo!!!
Att konfigurera manuellt utan något beroendeverktyg
- Gå till https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Klicka på den senaste versionen för tillfället. Det är 1.5.4
- Klicka på burken, ladda ner och spara den på din maskin
- Lägg till jar-filen i din byggsökväg:
- In Eclipse, högerklicka på projektet -> gå till egenskaper -> Byggväg -> Bibliotek -> Lägg till externa burkar
- Välj jar-filen
- Applicera och stäng
Ta en helsidesskärmdump med AShot API
Steg 1) Skapa ett Ashot-objekt och anrop metoden takeScreenshot() om du bara vill ha skärmdumpen för sidan med skärmstorlek.
Screenshot screenshot = new Ashot().takeScreenshot(driver);
Men om du vill ha en skärmdump av sidan som är större än skärmstorleken, anropa metoden shootingStrategy() innan du anropar metoden takeScreenshot() för att ställa in policyn. Anropa sedan en metod takeScreenshot() som passerar webbdrivrutinen, till exempel,
Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver);
Här rullas 1000 ut tiden i millisekunder, så för att ta en skärmdump rullar programmet för varje 1000 ms.
Steg 2): Hämta nu bilden från skärmdumpen och skriv den till filen. Du kan ange filtypen som jpg, png, etc.
ImageIO.write(screenshot.getImage(), "jpg", new File(".\\screenshot\\fullimage.jpg"));
Ta en helsidesskärmdump av en sida som är större än skärmstorleken.
Exempel: Här är exemplet på att ta en helsidesskärmdump av https://demo.guru99.com/test/guru99home/ och spara till filen "screenshot.jpg."
På grund av att vi använder ShootingStrategy-klassen i Ashot API kommer vi att kunna ta en hel bild av en sida som är större än skärmstorleken.
Här är skärmdumpkoden 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 en skärmdump av ett visst element på sidan
Exempel: Här är ett exempel på hur man tar en skärmdump av ett element Guru 99-logotypen på https://demo.guru99.com/test/guru99home/ sida och spara till filen "ElementScreenshot.jpg".
Här är skärmdumpkoden 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")); } }
Bildjämförelse 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(); } }



