Ako vytvoriť snímku obrazovky v selenovom webovom ovládači

Obsah:

Anonim

Screenshot v selenovom webdriveri

Na analýzu chýb sa používa snímka obrazovky v selenovom webovom ovládači . Selénový webový ovládač môže počas vykonávania automaticky robiť snímky obrazovky. Ak však používatelia potrebujú nasnímať snímku obrazovky sami, musia použiť metódu TakeSc Screenshot, ktorá WebDrive upozorní, aby snímku obrazovky urobil a uložil ju do selénu.

V tomto návode sa dozviete,

  • Zachyťte snímku obrazovky pomocou nástroja Selenium WebDriver
  • Čo je Ashot API?
  • Ako sťahovať a konfigurovať Ashot API?
  • Zachyťte snímku celej stránky pomocou rozhrania AShot API
  • Vytvorenie snímky obrazovky konkrétneho prvku stránky
  • Porovnanie obrázkov pomocou programu AShot

Zachyťte snímku obrazovky pomocou nástroja Selenium WebDriver

Vytvorenie snímky obrazovky v seléne je 3 krokový proces

Krok 1) Konvertujte objekt webového ovládača na TakeSc Screenshot

TakesSc Screenshot scrShot = ((TakesSc Screenshot) webdriver);

Krok 2) Zavolajte metódu getSc ScreenshotAs na vytvorenie obrazového súboru

Súbor SrcFile = scrShot.getSc ScreenshotAs (OutputType.FILE);

Krok 3) Skopírujte súbor na požadované miesto

Príklad: V tomto príklade zachytíme obrazovku http://demo.guru99.com/V4/ a uložíme ju ako C: /Test.png.webp

balíček Guru99TakeSc Screenshot;import java.io.File;importovať org.apache.commons.io.FileUtils;import org.openqa.selenium.OutputType;import org.openqa.selenium.TakesSc Screenshot;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;verejná trieda Guru99TakeSc Screenshot {@Testpublic void testGuru99TakeScreenShot () vyvolá výnimku {Ovládač WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");ovládač = nový FirefoxDriver ();// prejsť na adresu URLdriver.get ("http://demo.guru99.com/V4/");// Zavolajte funkciu snímania obrazovkythis.takeSnapShot (ovládač, "c: //test.png.webp");}/ *** Táto funkcia vytvorí snímku obrazovky* @param webdriver* @param fileWithPath* @hodí výnimku* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) vyvolá výnimku {// Preveďte objekt webového ovládača na TakeSc ScreenshotTakesSc Screenshot scrShot = ((TakesSc Screenshot) webdriver);// Zavolajte metódu getSc ScreenshotAs na vytvorenie obrazového súboruSúbor SrcFile = scrShot.getSc ScreenshotAs (OutputType.FILE);// Presuňte obrazový súbor na nové miestoFile DestFile = nový súbor (fileWithPath);// Skopírujte súbor na miesto určeniaFileUtils.copyFile (SrcFile, DestFile);}}

POZNÁMKA: Selén verzie 3.9.0 a vyššej neposkytuje Apache Commons IO JAR. Môžete si ich jednoducho stiahnuť tu a zavolať im vo svojom projekte

Čo je Ashot API?

Ashot je nástroj tretej strany spoločnosti Yandex podporovaný programom Selenium WebDriver na snímanie snímok obrazovky. Robí screenshot jednotlivého WebElementu, ako aj celostránkový screenshot stránky, ktorý je významnejší ako veľkosť obrazovky.

Ako sťahovať a konfigurovať Ashot API?

Existujú dva spôsoby konfigurácie rozhrania Ashot API

  • 1. Používanie Maven
  • 2. Manuálne bez použitia akéhokoľvek nástroja

Konfigurácia cez Maven:

  • Prejdite na https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  • Zatiaľ kliknite na najnovšiu verziu. Je to 1.5.4
  • Skopírujte kód závislosti a pridajte do svojho súboru pom.xml

  • Uložte súbor a Maven pridá nádobu na cestu zostavenia
  • A teraz si pripravený !!!

Konfigurácia manuálne bez nástroja na závislosť

  1. Prejdite na https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Zatiaľ kliknite na najnovšiu verziu. Je to 1.5.4
  3. Kliknite na nádobu, stiahnite si ju a uložte ju na svoje zariadenie

  1. Pridajte súbor jar do svojej cesty zostavenia:
  2. V Eclipse kliknite pravým tlačidlom myši na projekt -> prejsť na vlastnosti -> Vytvoriť cestu -> Knižnice -> Pridať externé nádoby
  3. Vyberte súbor jar
  4. Použiť a zavrieť

Zachyťte snímku celej stránky pomocou rozhrania AShot API

Krok 1) Vytvorte objekt Ashot a zavolajte metódu takeSc Screenshot (), ak chcete iba snímku obrazovky pre stránku s veľkosťou obrazovky.

Screenshot obrazovky = nový Ashot (). TakeSc Screenshot (ovládač);

Ak však chcete snímku obrazovky stránky väčšiu ako je veľkosť obrazovky, zavolajte metódu shootStrategy () pred volaním metódy takeSc Screenshot (), aby ste nastavili túto politiku. Potom zavolajte metódu takeSc Screenshot () prechádzajúcu webovým ovládačom, napríklad

Screenshot obrazovky = nový AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeSc Screenshot (ovládač);

Tu sa posúva čas 1 000 v milisekundách, takže pri snímaní snímky obrazovky bude program rolovať každých 1 000 ms.

Krok 2): Teraz získajte obrázok zo snímky obrazovky a zapíšte ho do súboru. Môžete poskytnúť typ súboru ako jpg.webp, png atď.

ImageIO.write (screenshot.getImage (), "jpg.webp", nový súbor (". \\ screenshot \\ fullimage.jpg.webp"));

Vytvorenie celostránkovej snímky obrazovky stránky, ktorá je väčšia ako veľkosť obrazovky.

Príklad: Tu je príklad zachytenia celostránkovej snímky obrazovky http://demo.guru99.com/test/guru99home/ a uloženia do súboru „screenshot.jpg.webp“.

Vďaka použitiu triedy ShootingStrategy v rozhraní Ashot API budeme schopní zachytiť celý obrázok stránky väčšej ako je veľkosť obrazovky. Tu je program:

balíček Guru99;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import 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.Sc Screenshot;import ru.yandex.qatools.ashot.shooting.ShootingStrategies;verejná trieda TestSc ScreenshotUsingAshot {public static void main (String [] args) vyvolá IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Ovládač WebDriver = nový ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();Screenshot = nový AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeSc Screenshot (ovládač);ImageIO.write (screenshot.getImage (), "jpg.webp", nový súbor ("c: \\ ElementSc Screenshot.jpg.webp"));}}

Vytvorenie snímky obrazovky konkrétneho prvku stránky

Príklad: Tu je príklad zachytenia snímky prvku s logom Guru 99 na stránke http://demo.guru99.com/test/guru99home/ a uloženia do súboru „ElementSc Screenshot.jpg.webp“. Tu je kód:

balíček Guru99;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import 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.Sc Screenshot;import ru.yandex.qatools.ashot.shooting.ShootingStrategies;verejná trieda TestElementSc ScreenshotUsingAshot {public static void main (String [] args) vyvolá IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Ovládač WebDriver = nový ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();// Nájdite prvok na vytvorenie snímky obrazovkyWebElement element = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));// Spolu s prvkom pass driver aj v metóde takeSc Screenshot ().Screenshot = nový AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeSc Screenshot (ovládač, prvok);ImageIO.write (screenshot.getImage (), "jpg.webp", nový súbor ("c: \\ ElementSc Screenshot.jpg.webp"));}}

Porovnanie obrázkov pomocou programu AShot

balíček Guru99;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import 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.Sc Screenshot;import ru.yandex.qatools.ashot.comparison.ImageDiff;import ru.yandex.qatools.ashot.comparison.ImageDiffer;verejná trieda TestImageComaprison {public static void main (String [] args) vyvolá IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");Ovládač WebDriver = nový ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Nájdite prvok a urobte snímku obrazovkyWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));Logo obrazovkyElementScreenshot = nový AShot (). TakeSc Screenshot (ovládač, logoElemnent);// prečítajte obrázok na porovnanieBufferedImage expectImage = ImageIO.read (nový súbor ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementSc Screenshot.getImage ();// Vytvorenie objektu ImageDiffer a spôsob volania makeDiff ()ImageDiffer imgDiff = nový ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (actualImage, expectImage);if (diff.hasDiff () == true) {System.out.println ("Obrázky sú rovnaké");} else {System.out.println ("Obrázky sa líšia");}driver.quit ();}}

Zhrnutie

  • Ashot API je freeware od spoločnosti Yandex.
  • Je to nástroj na vytváranie snímok obrazovky v seléne.
  • Pomôže vám vytvoriť snímku obrazovky jednotlivého prvku WebElement na rôznych platformách, ako sú napríklad desktopové prehliadače, iOS Safari alebo Safari Emulator Browser.
  • Môže to urobiť snímku obrazovky stránky, ktorá je väčšia ako veľkosť obrazovky.
  • Táto funkcia bola odstránená v seléne verzie 3, takže Ashot API je dobrá voľba.
  • Môže zdobiť snímky obrazovky.
  • Poskytuje porovnanie snímok obrazovky.

Umožnené vďaka príspevkom Shradhdha Dave