Kako napraviti snimku zaslona u Selenium WebDriver

Sadržaj:

Anonim

Snimka zaslona u Selenium Webdriver

Zaslon selenom Webdriver se koristi za bug analizi. Selenium webdriver može automatski snimati snimke zaslona tijekom izvršavanja. Ali ako korisnici sami trebaju snimiti snimku zaslona, ​​moraju koristiti metodu TakeScreenshot koja obavještava WebDrive da napravi snimku zaslona i pohrani je u Selenium.

U ovom ćete tutorijalu naučiti,

  • Snimite snimku zaslona pomoću programa Selenium WebDriver
  • Što je Ashot API?
  • Kako preuzeti i konfigurirati Ashot API?
  • Snimite snimku zaslona cijele stranice pomoću AShot API-ja
  • Snimanje snimke zaslona određenog elementa stranice
  • Usporedba slika pomoću AShota

Snimite snimku zaslona pomoću programa Selenium WebDriver

Snimanje zaslona u selenu postupak je u 3 koraka

Korak 1) Pretvorite objekt web upravljačkog programa u TakeScreenshot

TakesScreenshot scrShot = ((TakesScreenshot) webdriver);

Korak 2) Pozovite metodu getScreenshotAs za stvaranje datoteke slike

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

Korak 3) Kopirajte datoteku na željeno mjesto

Primjer: U ovom ćemo primjeru snimiti zaslon http://demo.guru99.com/V4/ i spremiti ga kao C: /Test.png.webp

paket Guru99TakeScreenshot;import java.io.File;import org.apache.commons.io.FileUtils;import org.openqa.selenium.OutputType;import org.openqa.selenium.TakesScreenshot;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;javna klasa Guru99TakeScreenshot {@Testpublic void testGuru99TakeScreenShot () baca izuzetak {Upravljački program za WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");upravljački program = novi FirefoxDriver ();// idite na urldriver.get ("http://demo.guru99.com/V4/");// Poziv za snimanje zaslonathis.takeSnapShot (pokretački program, "c: //test.png.webp");}/ *** Ova će funkcija snimiti snimku zaslona* @param webdriver* @param fileWithPath* @throws Izuzetak* /javna statička praznina takeSnapShot (WebDriver webdriver, String fileWithPath) baca iznimku {// Pretvorba objekta web upravljačkog programa u TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Pozovite metodu getScreenshotAs za stvaranje datoteke slikeDatoteka SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Premjesti slikovnu datoteku na novo odredišteDatoteka DestFile = nova datoteka (fileWithPath);// Kopiraj datoteku na odredišteFileUtils.copyFile (SrcFile, DestFile);}}

NAPOMENA: Selen verzija 3.9.0 i novija ne nudi Apache Commons IO JAR. Možete ih jednostavno preuzeti ovdje i nazvati ih u svom projektu

Što je Ashot API?

Ashot je uslužni program treće strane tvrtke Yandex koji podržava Selenium WebDriver za snimanje zaslona. Potrebna je snimka zaslona pojedinog WebElementa, kao i snimka zaslona stranice na cijeloj stranici, što je značajnije od veličine zaslona.

Kako preuzeti i konfigurirati Ashot API?

Postoje dvije metode za konfiguriranje Ashot API-ja

  • 1.Upotreba Mavena
  • 2. Ručno bez upotrebe bilo kakvog alata

Da biste konfigurirali putem Mavena:

  • Idite na https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  • Za sada kliknite najnoviju verziju. To je 1.5.4
  • Kopirajte kod ovisnosti i dodajte ga u svoju datoteku pom.xml

  • Spremite datoteku i Maven će dodati jar na vašu stazu izrade
  • I sad ste spremni !!!

Za ručno konfiguriranje bez ikakvog alata ovisnosti

  1. Idite na https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Za sada kliknite najnoviju verziju. To je 1.5.4
  3. Kliknite staklenku, preuzmite i spremite je na svoj stroj

  1. Dodajte jar datoteku u svoj put gradnje:
  2. U Eclipseu kliknite desnom tipkom miša na projekt -> idite na svojstva -> Put izgradnje -> Knjižnice -> Dodaj vanjske staklenke
  3. Odaberite datoteku jar
  4. Prijavite se i zatvorite

Snimite snimku zaslona cijele stranice pomoću AShot API-ja

Korak 1) Stvorite Ashot objekt i pozovite metodu takeScreenshot () ako samo želite snimku zaslona za stranicu veličine zaslona.

Snimka zaslona zaslona = novi Ashot (). TakeScreenshot (upravljački program);

Ali ako želite snimak zaslona stranice veći od veličine zaslona, ​​nazovite metodu shootingStrategy () prije nego što pozovete metodu takeScreenshot () da biste postavili pravilo. Zatim pozovite metodu takeScreenshot () koja prosljeđuje web pogonitelj, na primjer,

Snimka zaslona zaslona = novi AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (upravljački program);

Ovdje se vrijeme 1000 pomiče u milisekundama, pa će se za snimanje snimke zaslona program pomicati za svakih 1000 ms.

Korak 2): Sada preuzmite sliku sa snimka zaslona i zapišite je u datoteku. Možete navesti vrstu datoteke kao jpg.webp, png itd.

ImageIO.write (screenshot.getImage (), "jpg.webp", nova datoteka (". \\ screenshot \\ fullimage.jpg.webp"));

Snimanje snimke zaslona cijele stranice stranice koja je veća od veličine zaslona.

Primjer: Evo primjera snimanja snimke zaslona s cijelom stranicom http://demo.guru99.com/test/guru99home/ i spremanja u datoteku "screenshot.jpg.webp".

Zahvaljujući upotrebi klase ShootingStrategy Ashot API-ja, moći ćemo snimiti punu sliku stranice veće od veličine zaslona. Evo programa:

paket Guru99;import java.io.File;import java.io.IOException;uvoz javax.imageio.ImageIO;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.chrome.ChromeDriver;uvoz ru.yandex.qatools.ashot.AShot;uvoz ru.yandex.qatools.ashot.Screenshot;uvoz ru.yandex.qatools.ashot.shooting.ShootingStrategies;javna klasa TestScreenshotUsingAshot {public static void main (String [] args) baca IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Upravljački program WebDriver = novi ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();Snimka zaslona = novi AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver);ImageIO.write (screenshot.getImage (), "jpg.webp", nova datoteka ("c: \\ ElementScreenshot.jpg.webp"));}}

Snimanje snimke zaslona određenog elementa stranice

Primjer: Evo primjera snimanja snimke zaslona elementa logotipa Guru 99 na stranici http://demo.guru99.com/test/guru99home/ i spremite u datoteku "ElementScreenshot.jpg.webp". Evo koda:

paket Guru99;import java.io.File;import java.io.IOException;uvoz javax.imageio.ImageIO;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.chrome.ChromeDriver;uvoz ru.yandex.qatools.ashot.AShot;uvoz ru.yandex.qatools.ashot.Screenshot;uvoz ru.yandex.qatools.ashot.shooting.ShootingStrategies;javna klasa TestElementScreenshotUsingAshot {public static void main (String [] args) baca IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Upravljački program WebDriver = novi ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();// Pronađite element za snimanje zaslonaWebElement element = driver.findElement (By.xpath ("// * [@ id = \" ime-mjesta \ "] / a [1] / img"));// Zajedno s elementom propuštanja vozača i u metodi takeScreenshot ().Snimka zaslona = novi AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (pokretački program, element);ImageIO.write (screenshot.getImage (), "jpg.webp", nova datoteka ("c: \\ ElementScreenshot.jpg.webp"));}}

Usporedba slika pomoću AShota

paket Guru99;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;uvoz javax.imageio.ImageIO;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.chrome.ChromeDriver;uvoz ru.yandex.qatools.ashot.AShot;uvoz ru.yandex.qatools.ashot.Screenshot;uvoz ru.yandex.qatools.ashot.comparison.ImageDiff;import ru.yandex.qatools.ashot.comparison.ImageDiffer;javna klasa TestImageComaprison {public static void main (String [] args) baca IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");Upravljački program WebDriver = novi ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Pronađite element i napravite snimku zaslonaWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" ime-mjesta \ "] / a [1] / img"));Snimka zaslona logoElementScreenshot = novi AShot (). TakeScreenshot (upravljački program, logoElemnent);// pročitaj sliku za usporedbuBufferedImage očekuje seImage = ImageIO.read (nova datoteka ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// Stvaranje objekta ImageDiffer i metoda poziva makeDiff ()ImageDiffer imgDiff = novi ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (stvarna slika, očekivana slika);if (diff.hasDiff () == true) {System.out.println ("Slike su iste");} ostalo {System.out.println ("Slike su različite");}driver.quit ();}}

Sažetak

  • Ashot API je besplatni program Yandexa.
  • To je uslužni program za snimanje snimke zaslona u programu Selenium.
  • Pomaže vam da napravite snimku zaslona pojedinog WebElementa na različitim platformama kao što su stolni preglednici, iOS Simulator Mobile Safari, Android Emulator Browser.
  • Može snimiti snimku zaslona stranice veće od veličine zaslona.
  • Ova je značajka uklonjena u selenovoj verziji 3, tako da je Ashot API dobra opcija.
  • Može ukrasiti snimke zaslona.
  • Pruža usporedbu snimke zaslona.

Omogućeno zahvaljujući doprinosima Shradhdhe Davea