Skærmbillede i Selenium Webdriver
Et skærmbillede i Selenium Webdriver bruges til fejlanalyse. Selen webdriver kan automatisk tage skærmbilleder under udførelsen. Men hvis brugerne har brug for at tage et screenshot alene, skal de bruge TakeScreenshot-metoden, som giver WebDrive besked om at tage skærmbilledet og gemme det i Selenium.
I denne vejledning lærer du,
- Capture Screenshot ved hjælp af Selenium WebDriver
- Hvad er Ashot API?
- Hvordan downloades og konfigureres Ashot API?
- Optag skærmbillede med fuld side med AShot API
- Tager et skærmbillede af et bestemt element på siden
- Billedsammenligning ved hjælp af AShot
Capture Screenshot ved hjælp af Selenium WebDriver
At tage skærmbillede i selen er en 3-trins proces
Trin 1) Konverter webdriverobjekt til TakeScreenshot
TakesScreenshot scrShot = ((TakesScreenshot) webdriver);
Trin 2) Ring til getScreenshotAs-metoden for at oprette billedfil
Fil SrcFile = scrShot.getScreenshotAs (OutputType.FILE);
Trin 3) Kopier fil til ønsket placering
Eksempel: I dette eksempel tager vi skærmoptagelse af http://demo.guru99.com/V4/ og gemmer det som C: /Test.png.webp
pakke Guru99TakeScreenshot;import java.io.File;importer 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;offentlig klasse Guru99TakeScreenshot {@Prøvepublic void testGuru99TakeScreenShot () kaster undtagelse {WebDriver driver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");driver = ny FirefoxDriver ();// goto urldriver.get ("http://demo.guru99.com/V4/");// Skærmbillede-funktion af opkaldthis.takeSnapShot (driver, "c: //test.png.webp");}/ *** Denne funktion tager skærmbillede* @param webdriver* @param fileWithPath* @kaster undtagelse* /offentlig statisk ugyldighed takeSnapShot (WebDriver webdriver, String fileWithPath) kaster undtagelse {// Konverter webdriverobjekt til TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Ring til getScreenshotAs metode til at oprette billedfilFil SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Flyt billedfil til en ny destinationFile DestFile = ny fil (fileWithPath);// Kopier fil ved destinationFileUtils.copyFile (SrcFile, DestFile);}}
BEMÆRK: Selen version 3.9.0 og derover indeholder ikke Apache Commons IO JAR. Du kan bare downloade dem her og ringe til dem i dit projekt
Hvad er Ashot API?
Ashot er et tredjepartsværktøj fra Yandex understøttet af Selenium WebDriver til at fange skærmbillederne. Det tager et screenshot af et individuelt WebElement såvel som et helsides screenshot af en side, hvilket er mere markant end skærmstørrelsen.
Hvordan downloades og konfigureres Ashot API?
Der er to metoder til at konfigurere Ashot API
- 1. ved hjælp af Maven
- 2. manuelt uden brug af noget værktøj
Sådan konfigureres gennem Maven:
- Gå til https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Klik på den nyeste version indtil videre. Det er 1.5.4
- Kopier afhængighedskoden, og tilføj til din pom.xml-fil
- Gem filen, så tilføjer Maven krukken til din build-sti
- Og nu er du klar !!!
At konfigurere manuelt uden noget afhængighedsværktøj
- Gå til https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Klik på den nyeste version indtil videre. Det er 1.5.4
- Klik på krukken, download og gem den på din maskine
- Tilføj jar-filen i din build-sti:
- I Eclipse skal du højreklikke på projektet -> gå til egenskaber -> Byg sti -> Biblioteker -> Tilføj eksterne krukker
- Vælg jar-filen
- Ansøg og luk
Optag skærmbillede med fuld side med AShot API
Trin 1) Opret et Ashot-objekt og kald takeScreenshot () -metoden, hvis du bare vil have skærmbilledet til siden med skærmstørrelse.
Screenshot screenshot = nyt Ashot (). TakeScreenshot (driver);
Men hvis du vil have et skærmbillede af siden større end skærmstørrelsen, skal du kalde metoden shootingStrategy (), før du ringer til takeScreenshot () -metoden for at opsætte politikken. Ring derefter til en metode takeScreenshot (), der passerer webdriveren, f.eks.
Skærmbillede screenshot = nyt AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver);
Her rulles 1000 ud i millisekunder, så for at tage et skærmbillede ruller programmet for hver 1000 msek.
Trin 2): Få nu billedet fra skærmbilledet og skriv det til filen. Du kan angive filtypen som jpg.webp, png osv.
ImageIO.write (screenshot.getImage (), "jpg.webp", ny fil (". \\ screenshot \\ fullimage.jpg.webp"));
Tager et fuldskærmsbillede af en side, der er større end skærmstørrelsen.
Eksempel: Her er eksemplet med at tage et fuldskærmsbillede af http://demo.guru99.com/test/guru99home/ og gemme det som "screenshot.jpg.webp".
På grund af brugen af ShootingStrategy-klassen i Ashot API vil vi være i stand til at tage et fuldt billede af en side, der er større end skærmstørrelsen. Her er programmet:
pakke Guru99;import java.io.File;importere java.io.IOException;importere javax.imageio.ImageIO;importer 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;offentlig klasse TestScreenshotUsingAshot {offentlig statisk ugyldig hoved (String [] args) kaster IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");WebDriver-driver = ny ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). vindue (). maksimere ();Screenshot = ny AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver);ImageIO.write (screenshot.getImage (), "jpg.webp", ny fil ("c: \\ ElementScreenshot.jpg.webp"));}}
Tager et skærmbillede af et bestemt element på siden
Eksempel: Her er eksemplet med at fange elementskærmbillede af Guru 99-logoet på http://demo.guru99.com/test/guru99home/ side og gemme i filen "ElementScreenshot.jpg.webp". Her er koden:
pakke Guru99;import java.io.File;importere java.io.IOException;importere javax.imageio.ImageIO;importer 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;offentlig klasse TestElementScreenshotUsingAshot {offentlig statisk ugyldig hoved (String [] args) kaster IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");WebDriver-driver = ny ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). vindue (). maksimere ();// Find elementet for at tage et skærmbilledeWebElement-element = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));// Sammen med driverpass-element også i takeScreenshot () -metoden.Screenshot = ny AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver, element);ImageIO.write (screenshot.getImage (), "jpg.webp", ny fil ("c: \\ ElementScreenshot.jpg.webp"));}}
Billedsammenligning ved hjælp af AShot
pakke Guru99;import java.awt.image.BufferedImage;import java.io.File;importere java.io.IOException;importere javax.imageio.ImageIO;importer 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;offentlig klasse TestImageComaprison {offentlig statisk ugyldig hoved (String [] args) kaster IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");WebDriver-driver = ny ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Find elementet og tag et screenshotWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));Screenshot logoElementScreenshot = ny AShot (). TakeScreenshot (driver, logoElemnent);// læs billedet for at sammenligneBufferedImage expectImage = ImageIO.read (ny fil ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// Opret ImageDiffer-objekt og opkaldsmetode makeDiff ()ImageDiffer imgDiff = ny ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (actualImage, expectedImage);hvis (diff.hasDiff () == true) {System.out.println ("Billeder er ens");} andet {System.out.println ("Billeder er forskellige");}driver.quit ();}}
Resumé
- Ashot API er en freeware fra Yandex.
- Det er et værktøj til at tage et screenshot i Selenium.
- Det hjælper dig med at tage et screenshot af et individuelt WebElement på forskellige platforme som desktop-browsere, iOS Simulator Mobile Safari, Android Emulator Browser.
- Det kan tage et sideskærmbillede af en side, der er større end skærmstørrelsen.
- Denne funktion er blevet fjernet i selen version 3, så Ashot API er en god mulighed.
- Det kan dekorere skærmbillederne.
- Det giver en sammenligning af skærmbilleder.
Muliggjort på grund af bidrag fra Shradhdha Dave