Cara Mengambil Tangkapan Skrin di Selenium WebDriver

Isi kandungan:

Anonim

Tangkapan skrin di Selenium Webdriver

A Petikan di Selenium Webdriver digunakan untuk analisis bug. Pemandu web Selenium secara automatik dapat mengambil tangkapan skrin semasa pelaksanaan. Tetapi jika pengguna perlu menangkap tangkapan layar sendiri, mereka harus menggunakan kaedah TakeScreenshot yang memberitahu WebDrive untuk mengambil tangkapan layar dan menyimpannya di Selenium.

Dalam tutorial ini, anda akan belajar,

  • Tangkap Tangkapan Skrin menggunakan Selenium WebDriver
  • Apa itu API Ashot?
  • Bagaimana memuat turun dan mengkonfigurasi API Ashot?
  • Tangkap Tangkapan Skrin Halaman Penuh dengan AShot API
  • Mengambil tangkapan skrin elemen tertentu dari halaman
  • Perbandingan Imej menggunakan AShot

Tangkap Tangkapan Skrin menggunakan Selenium WebDriver

Mengambil Tangkapan Skrin di Selenium adalah proses 3 Langkah

Langkah 1) Tukar objek pemacu web ke TakeScreenshot

TakesScreenshot scrShot = ((TakesScreenshot) pemacu web);

Langkah 2) Panggil kaedah getScreenshotAs untuk membuat fail gambar

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

Langkah 3) Salin fail ke Lokasi yang Diinginkan

Contoh: Dalam contoh ini kita akan mengambil tangkapan skrin http://demo.guru99.com/V4/ & menyimpannya sebagai C: /Test.png.webp

pakej Guru99TakeScreenshot;import java.io.File;import org.apache.commons.io.FileUtils;import org.openqa.selenium.OutputType;import org.openqa.selenium.TakesScreenshot;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;kelas awam Guru99TakeScreenshot {@ Ujianujian kekosongan awamGuru99TakeScreenShot () membuang Pengecualian {Pemacu WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");driver = FirefoxDriver baru ();// goto urldriver.get ("http://demo.guru99.com/V4/");// Panggilan ambil fungsi tangkapan skrinthis.takeSnapShot (pemacu, "c: //test.png.webp");}/ *** Fungsi ini akan mengambil tangkapan skrin* pemacu laman web @param* @param fileWithPath* Pengecualian @throws* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) membuang Pengecualian {// Tukarkan objek pemacu web ke TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) pemacu web);// Panggil kaedah getScreenshotAs untuk membuat fail gambarFail SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Pindahkan fail gambar ke destinasi baruFail DestFile = Fail baru (fileWithPath);// Salin fail di destinasiFileUtils.copyFile (SrcFile, DestFile);}}

CATATAN: Selenium versi 3.9.0 ke atas tidak menyediakan Jar Apache Commons IO. Anda boleh memuat turunnya di sini dan memanggilnya dalam projek anda

Apa itu API Ashot?

Ashot adalah utiliti pihak ketiga oleh Yandex yang disokong oleh Selenium WebDriver untuk menangkap Tangkapan Skrin. Ia memerlukan tangkapan skrin WebElement individu serta tangkapan skrin halaman penuh, yang lebih penting daripada ukuran skrin.

Bagaimana memuat turun dan mengkonfigurasi API Ashot?

Terdapat dua kaedah untuk mengkonfigurasi API Ashot

  • 1. Menggunakan Maven
  • 2. Secara manual tanpa menggunakan sebarang alat

Untuk mengkonfigurasi melalui Maven:

  • Pergi ke https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  • Klik pada versi terkini, buat masa ini. Ia adalah 1.5.4
  • Salin kod Dependency dan tambahkan ke fail pom.xml anda

  • Simpan fail, dan Maven akan menambahkan balang ke jalan binaan anda
  • Dan sekarang anda sudah bersedia !!!

Untuk mengkonfigurasi secara manual tanpa alat pergantungan

  1. Pergi ke https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Klik pada versi terkini, buat masa ini. Ia adalah 1.5.4
  3. Klik pada balang, muat turun dan simpan di mesin anda

  1. Tambahkan fail balang di jalan binaan anda:
  2. Di Eclipse, klik kanan pada projek -> pergi ke hartanah -> Laluan Binaan -> Perpustakaan -> Tambahkan balang luaran
  3. Pilih fail balang
  4. Sapukan dan Tutup

Tangkap Tangkapan Skrin Halaman Penuh dengan AShot API

Langkah 1) Buat objek Ashot dan panggil kaedah takeScreenshot () jika anda hanya mahukan tangkapan skrin untuk halaman ukuran skrin.

Tangkapan skrin tangkapan skrin = Ashot baru (). TakeScreenshot (pemacu);

Tetapi jika anda mahukan tangkapan layar halaman lebih besar daripada ukuran layar, panggil metode shootingStrategy () sebelum memanggil kaedah takeScreenshot () untuk mengatur kebijakan. Kemudian panggil kaedah takeScreenshot () melewati pemacu web, sebagai contoh,

Tangkapan skrin tangkapan skrin = AShot baru (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (pemacu);

Di sini 1000 digulung keluar dalam milisaat, jadi untuk mengambil tangkapan skrin, program akan menatal untuk setiap 1000 msec.

Langkah 2): Sekarang, dapatkan gambar dari tangkapan skrin dan tulis ke fail. Anda boleh memberikan jenis fail seperti jpg.webp, png, dll.

ImageIO.write (screenshot.getImage (), "jpg.webp", Fail baru (". \\ tangkapan layar \\ fullimage.jpg.webp"));

Mengambil tangkapan skrin halaman penuh yang lebih besar daripada saiz skrin.

Contoh: Berikut adalah contoh menangkap tangkapan skrin halaman penuh http://demo.guru99.com/test/guru99home/ dan simpan ke fail "screenshot.jpg.webp."

Oleh kerana menggunakan kelas ShootingStrategy Ashot API, kami dapat menangkap gambar penuh halaman yang lebih besar daripada ukuran layar. Inilah programnya:

pakej 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.Screenshot;import ru.yandex.qatools.ashot.shooting.ShootingStrategies;kelas awam TestScreenshotUsingAshot {utama kekosongan statik awam (String [] args) melemparkan IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Pemacu WebDriver = ChromeDriver baru ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maksimalkan ();Screenshot = AShot baru (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (pemandu);ImageIO.write (tangkapan layar.getImage (), "jpg.webp", Fail baru ("c: \\ ElementScreenshot.jpg.webp"));}}

Mengambil tangkapan skrin elemen tertentu dari halaman

Contoh: Berikut adalah contoh tangkapan tangkapan elemen logo Guru 99 di laman http://demo.guru99.com/test/guru99home/ dan simpan ke fail "ElementScreenshot.jpg.webp". Inilah kodnya:

pakej 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.Screenshot;import ru.yandex.qatools.ashot.shooting.ShootingStrategies;kelas awam TestElementScreenshotUsingAshot {utama kekosongan statik awam (String [] args) melemparkan IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Pemacu WebDriver = ChromeDriver baru ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maksimalkan ();// Cari elemen untuk mengambil tangkapan skrinElemen WebElement = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));// Seiring dengan elemen pas pemandu juga dalam kaedah takeScreenshot ().Tangkapan Skrin = AShot baru (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (pemacu, elemen);ImageIO.write (tangkapan layar.getImage (), "jpg.webp", Fail baru ("c: \\ ElementScreenshot.jpg.webp"));}}

Perbandingan Imej menggunakan AShot

pakej 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.Screenshot;import ru.yandex.qatools.ashot.comparison.ImageDiff;import ru.yandex.qatools.ashot.comparison.ImageDiffer;kelas awam TestImageComaprison {utama kekosongan statik awam (String [] args) melemparkan IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");Pemacu WebDriver = ChromeDriver baru ();driver.get ("http://demo.guru99.com/test/guru99home/");// Cari elemen dan ambil tangkapan skrinWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));Logo tangkapan skrinElementScreenshot = AShot baru (). TakeScreenshot (pemacu, logoElemnent);// baca gambar untuk dibandingkanBufferedImage expectImage = ImageIO.read (Fail baru ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// Buat objek ImageDiffer dan kaedah panggilan makeDiff ()ImageDiffer imgDiff = ImageDiffer baru ();ImageDiff diff = imgDiff.makeDiff (sebenarnyaImage, expectImage);jika (diff.hasDiff () == benar) {System.out.println ("Gambar sama");} lain {System.out.println ("Imej berbeza");}driver.quit ();}}

Ringkasan

  • Ashot API adalah perisian percuma dari Yandex.
  • Ini adalah utiliti untuk mengambil tangkapan skrin di Selenium.
  • Ini membantu anda mengambil tangkapan skrin WebElement individu pada platform yang berbeza seperti penyemak imbas desktop, Safari Mudah Alih iOS Simulator, Penyemak Imbas Android Emulator.
  • Ia dapat mengambil tangkapan skrin halaman yang lebih besar daripada ukuran layar.
  • Fungsi ini telah dikeluarkan dalam selenium versi 3, jadi Ashot API adalah pilihan yang baik.
  • Ia dapat menghiasi tangkapan skrin.
  • Ia memberikan perbandingan tangkapan skrin.

Dimungkinkan kerana sumbangan Shradhdha Dave