Skärmdump i Selenium Webdriver
Ett skärmdump i Selenium Webdriver används för felanalys. Selen 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 TakeScreenshot-metoden som meddelar WebDrive att ta skärmdumpen och lagra den i Selenium.
I den här handledningen lär du dig,
- Fånga skärmdump med Selenium WebDriver
- Vad är Ashot API?
- Hur laddar jag ner och konfigurerar Ashot API?
- Ta helskärmens skärmdump med AShot API
- Ta en skärmdump av ett visst element på sidan
- Bildjämförelse med AShot
Fånga skärmdump med Selenium WebDriver
Att ta skärmdump i selen är en 3-stegsprocess
Steg 1) Konvertera objekt för webbdrivrutin till TakeScreenshot
TakesScreenshot scrShot = (((TakesScreenshot) webdriver);
Steg 2) Ring metoden getScreenshotAs för att skapa en bildfil
Fil SrcFile = scrShot.getScreenshotAs (OutputType.FILE);
Steg 3) Kopiera filen till önskad plats
Exempel: I det här exemplet tar vi skärmdump av http://demo.guru99.com/V4/ och sparar det som C: /Test.png.webp
paket Guru99TakeScreenshot;importera java.io.File;importera org.apache.commons.io.FileUtils;importera org.openqa.selenium.OutputType;importera org.openqa.selenium.TakesScreenshot;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.firefox.FirefoxDriver;importera org.testng.annotations.Test;offentlig klass Guru99TakeScreenshot {@Testapublic void testGuru99TakeScreenShot () kastar undantag {WebDriver-drivrutin;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");drivrutin = ny FirefoxDriver ();// goto urldriver.get ("http://demo.guru99.com/V4/");// Skärmbildsfunktion för samtalthis.takeSnapShot (drivrutin, "c: //test.png.webp");}/ *** Denna funktion tar en skärmdump* @param webdriver* @param fileWithPath* @ kastar undantag* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) kastar Undantag {// Konvertera webbdrivrutinsobjekt till TakeScreenshotTakesScreenshot scrShot = (((TakesScreenshot) webdriver);// Anropa getScreenshotAs-metoden för att skapa en bildfilFil SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Flytta bildfilen till en ny destinationFile DestFile = ny fil (fileWithPath);// Kopiera fil vid destinationFileUtils.copyFile (SrcFile, DestFile);}}
OBS: Selen version 3.9.0 och senare tillhandahåller inte Apache Commons IO JAR. Du kan helt enkelt ladda ner dem här och ringa dem i ditt projekt
Vad är Ashot API?
Ashot är ett tredjepartsverktyg från Yandex som stöds av Selenium WebDriver för att fånga skärmdumpar. Det tar en skärmdump av en enskild WebElement samt en helsides skä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
- 1.Använda Maven
- 2. manuellt utan att använda något verktyg
Så här konfigurerar du genom 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 din pom.xml-fil
- Spara filen och Maven lägger till burken i din byggväg
- Och nu är du redo !!!
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:
- Högerklicka på projektet i Eclipse -> gå till egenskaper -> Bygg väg -> Bibliotek -> Lägg till externa burkar
- Välj jar-filen
- Ansök och stäng
Ta helskärmens skärmdump med AShot API
Steg 1) Skapa ett Ashot-objekt och ring takeScreenshot () -metoden om du bara vill ha skärmdumpen för skärmstorlekssidan.
Skärmdump skärmdump = ny Ashot (). TakeScreenshot (drivrutin);
Men om du vill ha en skärmdump av sidan större än skärmstorleken, ring metoden shootingStrategy () innan du ringer till takeScreenshot () -metoden för att ställa in policyn. Ring sedan en metod takeScreenshot () som passerar webbdrivaren, till exempel,
Skärmdump skärmdump = ny AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (drivrutin);
Här rullas 1000 ut i millisekunder, så för att ta en skärmdump kommer programmet att rulla för varje 1000 ms.
Steg 2): Hämta nu bilden från skärmdumpen och skriv den till filen. Du kan ange filtypen jpg.webp, png, etc.
ImageIO.write (screenshot.getImage (), "jpg.webp", ny fil (". \\ screenshot \\ fullimage.jpg.webp"));
Ta en helsides skärmdump av en sida som är större än skärmstorleken.
Exempel: Här är exemplet med att fånga en helskärmdump av http://demo.guru99.com/test/guru99home/ och spara till filen "screenshot.jpg.webp."
På grund av användning av ShootingStrategy-klassen i Ashot API kommer vi att kunna ta en helbild på en sida som är större än skärmstorleken. Här är programmet:
paket Guru99;importera java.io.File;importera java.io.IOException;importera javax.imageio.ImageIO;importera org.openqa.selenium.By;importera org.openqa.selenium.WebElement;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.chrome.ChromeDriver;importera ru.yandex.qatools.ashot.AShot;importera ru.yandex.qatools.ashot.Screenshot;importera ru.yandex.qatools.ashot.shooting.ShootingStrategies;offentlig klass TestScreenshotUsingAshot {public static void main (String [] args) kastar IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");WebDriver-drivrutin = ny ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). fönster (). maximera ();Skärmdump = ny AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (drivrutin);ImageIO.write (screenshot.getImage (), "jpg.webp", ny fil ("c: \\ ElementScreenshot.jpg.webp"));}}
Ta en skärmdump av ett visst element på sidan
Exempel: Här är exemplet med att fånga elementskärmbild av Guru 99-logotypen på http://demo.guru99.com/test/guru99home/ sidan och spara till filen "ElementScreenshot.jpg.webp". Här är koden:
paket Guru99;importera java.io.File;importera java.io.IOException;importera javax.imageio.ImageIO;importera org.openqa.selenium.By;importera org.openqa.selenium.WebElement;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.chrome.ChromeDriver;importera ru.yandex.qatools.ashot.AShot;importera ru.yandex.qatools.ashot.Screenshot;importera ru.yandex.qatools.ashot.shooting.ShootingStrategies;offentlig klass TestElementScreenshotUsingAshot {public static void main (String [] args) kastar IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");WebDriver-drivrutin = ny ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). fönster (). maximera ();// Hitta elementet för att ta en skärmdumpWebElement-element = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));// Tillsammans med förarens passelement också i takeScreenshot () -metoden.Screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver, element);ImageIO.write (screenshot.getImage (), "jpg.webp", ny fil ("c: \\ ElementScreenshot.jpg.webp"));}}
Bildjämförelse med AShot
paket Guru99;importera java.awt.image.BufferedImage;importera java.io.File;importera java.io.IOException;importera javax.imageio.ImageIO;importera org.openqa.selenium.By;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.WebElement;importera org.openqa.selenium.chrome.ChromeDriver;importera ru.yandex.qatools.ashot.AShot;importera ru.yandex.qatools.ashot.Screenshot;importera ru.yandex.qatools.ashot.comparison.ImageDiff;importera ru.yandex.qatools.ashot.comparison.ImageDiffer;offentlig klass TestImageComaprison {public static void main (String [] args) kastar IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");WebDriver-drivrutin = ny ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Hitta elementet och ta en skärmdumpWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));Screenshot logoElementScreenshot = new AShot (). TakeScreenshot (driver, logoElemnent);// läs bilden för att jämföraBufferedImage expectImage = ImageIO.read (ny fil ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// Skapa ImageDiffer-objekt och anropsmetod makeDiff ()ImageDiffer imgDiff = ny ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (actualImage, expectedImage);if (diff.hasDiff () == true) {System.out.println ("Bilderna är samma");} annat {System.out.println ("Bilderna är olika");}driver.quit ();}}
Sammanfattning
- Ashot API är ett freeware från Yandex.
- Det är ett verktyg för att ta en skärmdump i Selenium.
- Det hjälper dig att ta en skärmdump av en enskild WebElement på olika plattformar som stationära webbläsare, iOS Simulator Mobile Safari, Android Emulator Browser.
- Det kan ta en skärmdump på en sida som är större än skärmstorleken.
- Den här funktionen har tagits bort i selenversion 3, så Ashot API är ett bra alternativ.
- Det kan dekorera skärmdumparna.
- Det ger en skärmdump jämförelse.
Möjligt på grund av bidrag från Shradhdha Dave