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
- Idite na https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Za sada kliknite najnoviju verziju. To je 1.5.4
- Kliknite staklenku, preuzmite i spremite je na svoj stroj
- Dodajte jar datoteku u svoj put gradnje:
- U Eclipseu kliknite desnom tipkom miša na projekt -> idite na svojstva -> Put izgradnje -> Knjižnice -> Dodaj vanjske staklenke
- Odaberite datoteku jar
- 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