Hvordan ta skjermbilde i Selenium WebDriver

Innholdsfortegnelse:

Anonim

Skjermbilde i Selenium Webdriver

Et skjermbilde i Selenium Webdriver brukes til feilanalyse. Seleniumdriver kan automatisk ta skjermbilder under utførelsen. Men hvis brukerne trenger å ta et skjermbilde alene, må de bruke TakeScreenshot-metoden som varsler WebDrive om å ta skjermbildet og lagre det i Selenium.

I denne veiledningen vil du lære,

  • Ta skjermbilde med Selenium WebDriver
  • Hva er Ashot API?
  • Hvordan laste ned og konfigurere Ashot API?
  • Ta skjermbilde på helside med AShot API
  • Ta et skjermbilde av et bestemt element på siden
  • Bildesammenligning ved bruk av AShot

Ta skjermbilde med Selenium WebDriver

Å ta skjermbilde i selen er en 3-trinns prosess

Trinn 1) Konverter webdriverobjekt til TakeScreenshot

TakesScreenshot scrShot = (((TakesScreenshot) webdriver);

Trinn 2) Ring getScreenshotAs-metoden for å lage bildefilen

Fil SrcFile = scrShot.getScreenshotAs (OutputType.FILE);

Trinn 3) Kopier filen til ønsket plassering

Eksempel: I dette eksemplet tar vi skjermopptak av http://demo.guru99.com/V4/ og lagrer det som C: /Test.png.webp

pakke Guru99TakeScreenshot;importere java.io.File;importer org.apache.commons.io.FileUtils;importer org.openqa.selenium.OutputType;importer org.openqa.selenium.TakesScreenshot;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.firefox.FirefoxDriver;importer org.testng.annotations.Test;offentlig klasse Guru99TakeScreenshot {@Testpublic void testGuru99TakeScreenShot () kaster unntak {WebDriver driver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");driver = ny FirefoxDriver ();// goto urldriver.get ("http://demo.guru99.com/V4/");// Skjermbilde-funksjon for anropthis.takeSnapShot (driver, "c: //test.png.webp");}/ *** Denne funksjonen tar et skjermbilde* @param webdriver* @param fileWithPath* @kaster unntak* /offentlig statisk tomrom takeSnapShot (WebDriver webdriver, String fileWithPath) kaster Unntak {// Konverter webdriverobjekt til TakeScreenshotTakesScreenshot scrShot = (((TakesScreenshot) webdriver);// Call getScreenshotAs metode for å opprette bildefilFil SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Flytt bildefilen til en ny destinasjonFile DestFile = ny fil (fileWithPath);// Kopier fil på destinasjonenFileUtils.copyFile (SrcFile, DestFile);}}

MERKNAD: Selen versjon 3.9.0 og nyere gir ikke Apache Commons IO JAR. Du kan bare laste dem ned her og ringe dem i prosjektet ditt

Hva er Ashot API?

Ashot er et tredjepartsverktøy fra Yandex støttet av Selenium WebDriver for å fange skjermbildene. Det tar et skjermbilde av et individuelt WebElement, samt et helsides skjermbilde av en side, som er mer signifikant enn skjermstørrelsen.

Hvordan laste ned og konfigurere Ashot API?

Det er to metoder for å konfigurere Ashot API

  • 1. bruker Maven
  • 2.Manuelt uten å bruke noe verktøy

Slik konfigurerer du gjennom Maven:

  • Gå til https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  • Klikk på den siste versjonen, for nå. Det er 1.5.4
  • Kopier avhengighetskoden og legg til i pom.xml-filen

  • Lagre filen, og Maven vil legge glasset til din byggesti
  • Og nå er du klar !!!

Å konfigurere manuelt uten noe avhengighetsverktøy

  1. Gå til https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Klikk på den siste versjonen, for nå. Det er 1.5.4
  3. Klikk på glasset, last ned og lagre det på maskinen din

  1. Legg til jar-filen i din byggesti:
  2. I Eclipse høyreklikker du på prosjektet -> går til egenskaper -> Bygg bane -> Biblioteker -> Legg til eksterne krukker
  3. Velg jar-filen
  4. Påfør og lukk

Ta skjermbilde på helside med AShot API

Trinn 1) Lag et Ashot-objekt og ring takeScreenshot () -metoden hvis du bare vil ha skjermbildet for skjermstørrelsessiden.

Skjermbilde skjermbilde = nytt Ashot (). TakeScreenshot (driver);

Men hvis du vil ha et skjermbilde av siden større enn skjermstørrelsen, kan du ringe metoden shootingStrategy () før du ringer til takeScreenshot () -metoden for å sette opp policyen. Ring deretter en metode takeScreenshot () som passerer nettdriveren, for eksempel,

Skjermbilde screenshot = nytt AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver);

Her rulles 1000 ut i millisekunder, så for å ta et skjermbilde vil programmet bla for hver 1000 msek.

Trinn 2): Nå får du bildet fra skjermbildet og skriver det til filen. Du kan oppgi filtypen som jpg.webp, png, etc.

ImageIO.write (screenshot.getImage (), "jpg.webp", ny fil (". \\ screenshot \\ fullimage.jpg.webp"));

Ta et helsides skjermbilde av en side som er større enn skjermstørrelsen.

Eksempel: Her er eksemplet med å ta et helsides skjermbilde av http://demo.guru99.com/test/guru99home/ og lagre i filen "screenshot.jpg.webp."

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 programmet:

pakke Guru99;importere java.io.File;importere java.io.IOException;importere javax.imageio.ImageIO;importer org.openqa.selenium.By;importer org.openqa.selenium.WebElement;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.chrome.ChromeDriver;importer ru.yandex.qatools.ashot.AShot;importer ru.yandex.qatools.ashot.Screenshot;importer ru.yandex.qatools.ashot.shooting.ShootingStrategies;offentlig klasse TestScreenshotUsingAshot {public static void main (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 (). vindu (). maksimere ();Skjermbilde = nytt AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver);ImageIO.write (screenshot.getImage (), "jpg.webp", ny fil ("c: \\ ElementScreenshot.jpg.webp"));}}

Ta et skjermbilde av et bestemt element på siden

Eksempel: Her er eksemplet på å fange skjermbilde av Guru 99-logoen på http://demo.guru99.com/test/guru99home/ siden og lagre i filen "ElementScreenshot.jpg.webp". Her er koden:

pakke Guru99;importere java.io.File;importere java.io.IOException;importere javax.imageio.ImageIO;importer org.openqa.selenium.By;importer org.openqa.selenium.WebElement;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.chrome.ChromeDriver;importer ru.yandex.qatools.ashot.AShot;importer ru.yandex.qatools.ashot.Screenshot;importer ru.yandex.qatools.ashot.shooting.ShootingStrategies;offentlig klasse TestElementScreenshotUsingAshot {public static void main (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 (). vindu (). maksimere ();// Finn elementet for å ta et skjermbildeWebElement-element = driver.findElement (By.xpath ("// * [@ id = \" nettsted-navn \ "] / a [1] / img"));// Sammen med driverpass-element også i takeScreenshot () -metoden.Skjermbilde = nytt AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver, element);ImageIO.write (screenshot.getImage (), "jpg.webp", ny fil ("c: \\ ElementScreenshot.jpg.webp"));}}

Bildesammenligning ved bruk av AShot

pakke Guru99;importere java.awt.image.BufferedImage;importere java.io.File;importere java.io.IOException;importere javax.imageio.ImageIO;importer org.openqa.selenium.By;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.WebElement;importer org.openqa.selenium.chrome.ChromeDriver;importer ru.yandex.qatools.ashot.AShot;importer ru.yandex.qatools.ashot.Screenshot;importer ru.yandex.qatools.ashot.comparison.ImageDiff;importer ru.yandex.qatools.ashot.comparison.ImageDiffer;offentlig klasse TestImageComaprison {public static void main (String [] args) kaster IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");WebDriver driver = ny ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Finn elementet og ta et skjermbildeWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));Skjermbilde logoElementScreenshot = nytt AShot (). TakeScreenshot (driver, logoElemnent);// les bildet for å sammenligneBufferedImage expectImage = ImageIO.read (ny fil ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// Opprett ImageDiffer-objekt og anropsmetode makeDiff ()ImageDiffer imgDiff = ny ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (actualImage, expectedImage);if (diff.hasDiff () == true) {System.out.println ("Bilder er like");} annet {System.out.println ("Bilder er forskjellige");}driver.quit ();}}

Sammendrag

  • Ashot API er et gratisprogram fra Yandex.
  • Det er et verktøy for å ta et skjermbilde i Selenium.
  • Det hjelper deg å ta et skjermbilde av et individuelt WebElement på forskjellige plattformer som stasjonære nettlesere, iOS Simulator Mobile Safari, Android Emulator Browser.
  • Det kan ta et skjermbilde av en side som er større enn skjermstørrelsen.
  • Denne funksjonen er fjernet i selen versjon 3, så Ashot API er et godt alternativ.
  • Det kan dekorere skjermbildene.
  • Det gir en sammenligning av skjermbilde.

Gjort mulig på grunn av bidrag fra Shradhdha Dave