Kako narediti posnetek zaslona v programu Selenium WebDriver

Kazalo:

Anonim

Posnetek zaslona v programu Selenium Webdriver

Screenshot v Selen Webdriver se uporablja za analizo hrošču. Selenium webdriver lahko med izvajanjem samodejno posname posnetke zaslona. Če pa morajo uporabniki sami posneti posnetek zaslona, ​​morajo uporabiti metodo TakeScreenshot, ki obvesti WebDrive, da posname posnetek zaslona in ga shrani v Selenium.

V tej vadnici boste izvedeli,

  • Posnemite posnetek zaslona s programom Selenium WebDriver
  • Kaj je Ashot API?
  • Kako prenesti in konfigurirati Ashot API?
  • Posnemite celoten zaslon strani z AShot API
  • Posnetek zaslona določenega elementa strani
  • Primerjava slik z uporabo AShot

Posnemite posnetek zaslona s programom Selenium WebDriver

Posnetek zaslona v selenu je postopek v treh korakih

Korak 1) Pretvorite objekt spletnega gonilnika v TakeScreenshot

TakesScreenshot scrShot = ((TakesScreenshot) spletni gonilnik);

Korak 2) Pokličite metodo getScreenshotAs za ustvarjanje slikovne datoteke

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

Korak 3) Kopirajte datoteko na želeno lokacijo

Primer: V tem primeru bomo posneli zaslon http://demo.guru99.com/V4/ in ga shranili kot 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;javni razred Guru99TakeScreenshot {@Testpublic void testGuru99TakeScreenShot () vrže izjemo {Gonilnik WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");voznik = novi FirefoxDriver ();// pojdi na urldriver.get ("http://demo.guru99.com/V4/");// Pokliči funkcijo posnetka zaslonathis.takeSnapShot (gonilnik, "c: //test.png.webp");}/ *** Ta funkcija bo posnela posnetek zaslona* @param spletni gonilnik* @param fileWithPath* @throws Izjema* /javna statična praznina takeSnapShot (WebDriver webdriver, String fileWithPath) vrže izjemo {// Pretvorite objekt spletnega gonilnika v TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) spletni gonilnik);// Pokličite metodo getScreenshotAs za ustvarjanje slikovne datotekeDatoteka SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Premakni slikovno datoteko na nov ciljDatoteka DestFile = nova datoteka (fileWithPath);// Kopiraj datoteko na ciljFileUtils.copyFile (SrcFile, DestFile);}}

OPOMBA: Selen, različica 3.9.0 in novejša, ne ponuja Apache Commons IO JAR. Lahko jih preprosto prenesete tukaj in jih pokličete v svojem projektu

Kaj je Ashot API?

Ashot je Yandexov pripomoček tretje osebe, ki ga podpira Selenium WebDriver za zajem posnetkov zaslona. Zajema posnetek zaslona posameznega WebElementa in celozaslonski posnetek strani, ki je pomembnejši od velikosti zaslona.

Kako prenesti in konfigurirati Ashot API?

Ashot API lahko konfigurirate na dva načina

  • 1. Uporaba Mavena
  • 2. Ročno brez uporabe orodja

Če želite konfigurirati prek Mavena:

  • Pojdite na https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  • Zaenkrat kliknite najnovejšo različico. Je 1.5.4
  • Kopirajte kodo odvisnosti in jo dodajte v datoteko pom.xml

  • Shranite datoteko in Maven bo jar dodal vaši poti gradnje
  • In zdaj ste pripravljeni !!!

Ročno konfiguriranje brez kakršnega koli orodja za odvisnost

  1. Pojdite na https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Zaenkrat kliknite najnovejšo različico. Je 1.5.4
  3. Kliknite kozarec, ga prenesite in shranite v svojo napravo

  1. Dodajte datoteko jar v svojo pot gradnje:
  2. V Eclipse z desno miškino tipko kliknite projekt -> pojdite na lastnosti -> Zgradite pot -> Knjižnice -> Dodaj zunanje kozarce
  3. Izberite datoteko jar
  4. Uporabi in zapri

Posnemite celoten zaslon strani z AShot API

Korak 1) Ustvarite objekt Ashot in pokličite metodo takeScreenshot (), če želite samo posnetek zaslona za stran velikosti zaslona.

Posnetek zaslona = nov Ashot (). TakeScreenshot (gonilnik);

Če pa želite posnetek zaslona strani večji od velikosti zaslona, ​​pokličite metodo shootingStrategy (), preden pokličete metodo takeScreenshot (), da nastavite pravilnik. Nato pokličite metodo takeScreenshot (), ki posreduje spletni pogon, na primer

Posnetek zaslona = nov AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (gonilnik);

Tu se čas 1000 pomakne v milisekundah, tako da se bo za posnetek zaslona zaslon pomaknil za vsakih 1000 ms.

2. korak: Zdaj vzemite sliko s posnetka zaslona in jo zapišite v datoteko. Tip datoteke lahko navedete kot jpg.webp, png itd.

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

Posnetek zaslona celotne strani strani, ki je večja od velikosti zaslona.

Primer: Tu je primer zajema celozaslonskega posnetka zaslona http://demo.guru99.com/test/guru99home/ in ga shranite v datoteko »screenshot.jpg.webp«.

Zaradi uporabe razreda ShootingStrategy Ashot API-ja bomo lahko posneli celotno sliko strani, večje od velikosti zaslona. Tu je program:

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;javni razred TestScreenshotUsingAshot {public static void main (String [] args) vrže IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Gonilnik WebDriver = nov ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();Posnetek zaslona = nov AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (voznik);ImageIO.write (screenshot.getImage (), "jpg.webp", nova datoteka ("c: \\ ElementScreenshot.jpg.webp"));}}

Posnetek zaslona določenega elementa strani

Primer: Tu je primer zajema posnetka zaslona elementa logotipa Guru 99 na strani http://demo.guru99.com/test/guru99home/ in ga shranimo v datoteko "ElementScreenshot.jpg.webp". Tu je 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;javni razred TestElementScreenshotUsingAshot {public static void main (String [] args) vrže IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Gonilnik WebDriver = nov ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();// Poiščimo element za posnetek zaslonaElement WebElement = driver.findElement (By.xpath ("// * [@ id = \" ime-mesta \ "] / a [1] / img"));// Skupaj z elementom pass driver tudi v metodi takeScreenshot ().Posnetek zaslona = nov AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (gonilnik, element);ImageIO.write (screenshot.getImage (), "jpg.webp", nova datoteka ("c: \\ ElementScreenshot.jpg.webp"));}}

Primerjava slik z uporabo AShot

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;import ru.yandex.qatools.ashot.comparison.ImageDiff;import ru.yandex.qatools.ashot.comparison.ImageDiffer;javni razred TestImageComaprison {public static void main (String [] args) vrže IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");Gonilnik WebDriver = nov ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Poiščimo element in naredimo posnetek zaslonaWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" ime-mesta \ "] / a [1] / img"));Posnetek zaslona logoElementScreenshot = nov AShot (). TakeScreenshot (gonilnik, logoElemnent);// preberemo sliko za primerjavoBufferedImage waitingImage = ImageIO.read (nova datoteka ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// Ustvari objekt ImageDiffer in pokliči metodo makeDiff ()ImageDiffer imgDiff = nov ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (dejanska slika, pričakovana slika);if (diff.hasDiff () == true) {System.out.println ("Slike so enake");} še {System.out.println ("Slike so različne");}driver.quit ();}}

Povzetek

  • Ashot API je brezplačna Yandexova programska oprema.
  • To je pripomoček za posnetek zaslona v programu Selenium.
  • Pomaga vam narediti posnetek zaslona posameznega WebElementa na različnih platformah, kot so namizni brskalniki, iOS Simulator Mobile Safari, brskalnik Android Emulator.
  • Lahko posname posnetek zaslona strani, večje od velikosti zaslona.
  • Ta funkcija je bila odstranjena v različici selena 3, zato je Ashot API dobra izbira.
  • Lahko okrasi posnetke zaslona.
  • Ponuja primerjavo posnetka zaslona.

Omogočeno zaradi prispevkov Shradhdhe Dave