Cara Mengambil Screenshot di Selenium WebDriver

Daftar Isi:

Anonim

Screenshot di Selenium Webdriver

Sebuah Screenshot di Selenium Webdriver digunakan untuk analisis bug. Selenium webdriver dapat secara otomatis mengambil screenshot selama eksekusi. Tetapi jika pengguna perlu mengambil tangkapan layar sendiri, mereka perlu menggunakan metode TakeScreenshot yang memberi tahu WebDrive untuk mengambil tangkapan layar dan menyimpannya di Selenium.

Dalam tutorial ini, Anda akan belajar,

  • Tangkap Screenshot menggunakan Selenium WebDriver
  • Apa itu Ashot API?
  • Bagaimana cara mengunduh dan mengkonfigurasi Ashot API?
  • Tangkap Screenshot Halaman Penuh dengan AShot API
  • Mengambil screenshot dari elemen halaman tertentu
  • Perbandingan Gambar menggunakan AShot

Tangkap Screenshot menggunakan Selenium WebDriver

Mengambil Screenshot di Selenium adalah proses 3 Langkah

Langkah 1) Ubah objek web driver menjadi TakeScreenshot

TakesScreenshot scrShot = ((TakesScreenshot) webdriver);

Langkah 2) Panggil metode getScreenshotAs untuk membuat file gambar

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

Langkah 3) Salin file ke Lokasi yang Diinginkan

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

paket Guru99TakeScreenshot;impor java.io.File;impor org.apache.commons.io.FileUtils;import org.openqa.selenium.OutputType;import org.openqa.selenium.TakesScreenshot;import org.openqa.selenium.WebDriver;impor org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;kelas publik Guru99TakeScreenshot {@Ujipublic void testGuru99TakeScreenShot () melempar Exception {Driver WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");driver = baru FirefoxDriver ();// buka urldriver.get ("http://demo.guru99.com/V4/");// Panggil mengambil fungsi screenshotthis.takeSnapShot (driver, "c: //test.png.webp");}/ *** Fungsi ini akan mengambil tangkapan layar* @ driver webparam* @param fileWithPath* @throws Exception* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) melempar Exception {// Ubah objek web driver menjadi TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Panggil metode getScreenshotAs untuk membuat file gambarFile SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Pindahkan file gambar ke tujuan baruFile DestFile = File baru (fileWithPath);// Salin file di tujuanFileUtils.copyFile (SrcFile, DestFile);}}

CATATAN: Selenium versi 3.9.0 dan yang lebih baru tidak menyediakan Apache Commons IO JAR. Anda cukup mengunduhnya di sini dan memanggilnya dalam proyek Anda

Apa itu Ashot API?

Ashot adalah utilitas pihak ketiga oleh Yandex yang didukung oleh Selenium WebDriver untuk menangkap Screenshot. Ini mengambil tangkapan layar dari WebElement individu serta tangkapan layar halaman penuh dari sebuah halaman, yang lebih signifikan daripada ukuran layar.

Bagaimana cara mengunduh dan mengkonfigurasi Ashot API?

Ada dua metode untuk mengkonfigurasi Ashot API

  • 1.Menggunakan Maven
  • 2. Secara manual tanpa menggunakan alat apa pun

Untuk mengkonfigurasi melalui Maven:

  • Buka https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  • Klik pada versi terbaru, untuk saat ini. Ini adalah 1.5.4
  • Salin kode Ketergantungan dan tambahkan ke file pom.xml Anda

  • Simpan file, dan Maven akan menambahkan jar ke jalur build Anda
  • Dan sekarang Anda siap !!!

Untuk mengonfigurasi secara manual tanpa alat ketergantungan apa pun

  1. Buka https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Klik pada versi terbaru, untuk saat ini. Ini adalah 1.5.4
  3. Klik pada toples, unduh dan simpan di mesin Anda

  1. Tambahkan file jar di jalur build Anda:
  2. Di Eclipse, klik kanan pada proyek -> buka properti -> Build Path -> Libraries -> Add External jars
  3. Pilih file jar
  4. Terapkan dan Tutup

Tangkap Screenshot Halaman Penuh dengan AShot API

Langkah 1) Buat objek Ashot dan panggil metode takeScreenshot () jika Anda hanya ingin tangkapan layar untuk halaman ukuran layar.

Screenshot screenshot = new Ashot (). TakeScreenshot (driver);

Namun jika Anda ingin screenshot halaman lebih besar dari ukuran layar, panggil metode shootingStrategy () sebelum memanggil metode takeScreenshot () untuk menyiapkan kebijakan. Kemudian panggil metode takeScreenshot () dengan meneruskan webdriver, misalnya,

Screenshot screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver);

Di sini 1000 digulir keluar waktu dalam milidetik, jadi untuk mengambil tangkapan layar, program akan menggulir untuk setiap 1000 msec.

Langkah 2): Sekarang, dapatkan gambar dari tangkapan layar dan tulis ke file. Anda dapat memberikan jenis file sebagai jpg.webp, png, dll.

ImageIO.write (screenshot.getImage (), "jpg.webp", File baru (". \\ screenshot \\ fullimage.jpg.webp"));

Mengambil screenshot satu halaman penuh dari halaman yang lebih besar dari ukuran layar.

Contoh: Berikut adalah contoh mengambil screenshot satu halaman penuh dari http://demo.guru99.com/test/guru99home/ dan menyimpannya ke file "screenshot.jpg.webp."

Karena menggunakan kelas ShootingStrategy dari Ashot API, kita akan dapat menangkap gambar penuh dari halaman yang lebih besar dari ukuran layar. Berikut programnya:

paket Guru99;impor java.io.File;impor java.io.IOException;impor javax.imageio.ImageIO;import org.openqa.selenium.By;import org.openqa.selenium.WebElement;import org.openqa.selenium.WebDriver;impor org.openqa.selenium.chrome.ChromeDriver;impor ru.yandex.qatools.ashot.AShot;impor ru.yandex.qatools.ashot.Screenshot;impor ru.yandex.qatools.ashot.shooting.ShootingStrategies;public class TestScreenshotUsingAshot {public static void main (String [] args) melempar IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Driver WebDriver = new ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maksimalkan ();Screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver);ImageIO.write (screenshot.getImage (), "jpg.webp", File baru ("c: \\ ElementScreenshot.jpg.webp"));}}

Mengambil screenshot dari elemen halaman tertentu

Contoh: Berikut adalah contoh screenshot elemen menangkap logo Guru 99 di halaman http://demo.guru99.com/test/guru99home/ dan simpan ke file "ElementScreenshot.jpg.webp". Ini kodenya:

paket Guru99;impor java.io.File;impor java.io.IOException;impor javax.imageio.ImageIO;import org.openqa.selenium.By;import org.openqa.selenium.WebElement;import org.openqa.selenium.WebDriver;impor org.openqa.selenium.chrome.ChromeDriver;impor ru.yandex.qatools.ashot.AShot;impor ru.yandex.qatools.ashot.Screenshot;impor ru.yandex.qatools.ashot.shooting.ShootingStrategies;public class TestElementScreenshotUsingAshot {public static void main (String [] args) melempar IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Driver WebDriver = new ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maksimalkan ();// Temukan elemen untuk mengambil tangkapan layarElemen WebElement = driver.findElement (By.xpath ("// * [@ id = \" nama-situs \ "] / a [1] / img"));// Bersama dengan elemen driver pass juga dalam metode takeScreenshot ().Screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver, elemen);ImageIO.write (screenshot.getImage (), "jpg.webp", File baru ("c: \\ ElementScreenshot.jpg.webp"));}}

Perbandingan Gambar menggunakan AShot

paket Guru99;import java.awt.image.BufferedImage;impor java.io.File;impor java.io.IOException;impor javax.imageio.ImageIO;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;impor org.openqa.selenium.chrome.ChromeDriver;impor ru.yandex.qatools.ashot.AShot;impor ru.yandex.qatools.ashot.Screenshot;impor ru.yandex.qatools.ashot.comparison.ImageDiff;impor ru.yandex.qatools.ashot.comparison.ImageDiffer;public class TestImageComaprison {public static void main (String [] args) melempar IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");Driver WebDriver = new ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Temukan elemen dan ambil tangkapan layarWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" nama-situs \ "] / a [1] / img"));Screenshot logoElementScreenshot = AShot baru (). TakeScreenshot (driver, logoElemnent);// baca gambar untuk membandingkanBufferedImage expectedImage = ImageIO.read (File baru ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// Buat objek ImageDiffer dan panggil metode makeDiff ()ImageDiffer imgDiff = new ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (actualImage, expectedImage);if (diff.hasDiff () == true) {System.out.println ("Gambar sama");} lain {System.out.println ("Gambar berbeda");}driver.quit ();}}

Ringkasan

  • Ashot API adalah freeware dari Yandex.
  • Ini adalah utilitas untuk mengambil tangkapan layar di Selenium.
  • Ini membantu Anda untuk mengambil tangkapan layar dari WebElement individu pada platform yang berbeda seperti browser desktop, iOS Simulator Mobile Safari, Android Emulator Browser.
  • Ini dapat mengambil screenshot halaman dari halaman yang lebih besar dari ukuran layar.
  • Fitur ini telah dihapus di selenium versi 3, jadi Ashot API adalah pilihan yang bagus.
  • Itu dapat menghiasi tangkapan layar.
  • Ini memberikan perbandingan tangkapan layar.

Dimungkinkan karena kontribusi oleh Shradhdha Dave