Cách chụp ảnh màn hình trong Selenium WebDriver

Mục lục:

Anonim

Ảnh chụp màn hình trong Selenium Webdriver

Một Screenshot trong Selenium Webdriver được sử dụng để phân tích lỗi. Selenium webdriver có thể tự động chụp ảnh màn hình trong quá trình thực thi. Nhưng nếu người dùng cần tự chụp ảnh màn hình, họ cần sử dụng phương pháp TakeScreenshot thông báo cho WebDrive để chụp ảnh màn hình và lưu trữ trong Selenium.

Trong hướng dẫn này, bạn sẽ học,

  • Chụp ảnh màn hình bằng Selenium WebDriver
  • API Ashot là gì?
  • Làm cách nào để tải xuống và cấu hình Ashot API?
  • Chụp ảnh màn hình toàn trang với API AShot
  • Chụp ảnh màn hình của một phần tử cụ thể của trang
  • So sánh hình ảnh bằng AShot

Chụp ảnh màn hình bằng Selenium WebDriver

Chụp ảnh màn hình trong Selenium là một quy trình 3 bước

Bước 1) Chuyển đổi đối tượng trình điều khiển web thành TakeScreenshot

TakesScreenshot scrShot = ((TakesScreenshot) webdriver);

Bước 2) Gọi phương thức getScreenshotAs để tạo tệp hình ảnh

Tệp SrcFile = scrShot.getScreenshotAs (OutputType.FILE);

Bước 3) Sao chép tệp vào Vị trí mong muốn

Ví dụ: Trong ví dụ này, chúng tôi sẽ chụp ảnh màn hình của http://demo.guru99.com/V4/ và lưu nó dưới dạng C: /Test.png.webp

gói Guru99TakeScreenshot;nhập java.io.File;nhập org.apache.commons.io.FileUtils;nhập org.openqa.selenium.OutputType;nhập org.openqa.selenium.TakesScreenshot;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.firefox.FirefoxDriver;nhập org.testng.annotations.Test;lớp công khai Guru99TakeScreenshot {@Kiểm trapublic void testGuru99TakeScreenShot () ném Exception {Trình điều khiển WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");driver = new FirefoxDriver ();// url gotodriver.get ("http://demo.guru99.com/V4/");// Gọi hàm chụp ảnh màn hìnhthis.takeSnapShot (trình điều khiển, "c: //test.png.webp");}/ *** Chức năng này sẽ chụp ảnh màn hình* @param webdriver* @param fileWithPath* Ngoại lệ @throws* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) ném Exception {// Chuyển đổi đối tượng trình điều khiển web thành TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Gọi phương thức getScreenshotAs để tạo tệp hình ảnhTệp SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Di chuyển tệp hình ảnh đến đích mớiFile DestFile = new File (fileWithPath);// Sao chép tệp tại điểm đếnFileUtils.copyFile (SrcFile, DestFile);}}

LƯU Ý: Phiên bản Selenium 3.9.0 trở lên không cung cấp Apache Commons IO JAR. Bạn chỉ cần tải chúng xuống tại đây và gọi chúng trong dự án của bạn

API Ashot là gì?

Ashot là một tiện ích bên thứ ba của Yandex được hỗ trợ bởi Selenium WebDriver để chụp Ảnh màn hình. Nó chụp ảnh màn hình của một WebElement riêng lẻ cũng như ảnh chụp màn hình toàn trang của một trang, điều này quan trọng hơn kích thước màn hình.

Làm cách nào để tải xuống và cấu hình Ashot API?

Có hai phương pháp để định cấu hình API Ashot

  • 1. sử dụng Maven
  • 2. thủ công mà không cần sử dụng bất kỳ công cụ nào

Để định cấu hình thông qua Maven:

  • Truy cập https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  • Nhấp vào phiên bản mới nhất, ngay bây giờ. Nó là 1.5.4
  • Sao chép mã Phụ thuộc và thêm vào tệp pom.xml của bạn

  • Lưu tệp và Maven sẽ thêm jar vào đường dẫn xây dựng của bạn
  • Và bây giờ bạn đã sẵn sàng !!!

Để định cấu hình theo cách thủ công mà không cần bất kỳ công cụ phụ thuộc nào

  1. Truy cập https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Nhấp vào phiên bản mới nhất, ngay bây giờ. Nó là 1.5.4
  3. Nhấp vào bình, tải xuống và lưu trên máy của bạn

  1. Thêm tệp jar vào đường dẫn xây dựng của bạn:
  2. Trong Eclipse, nhấp chuột phải vào dự án -> chuyển đến thuộc tính -> Đường dẫn xây dựng -> Thư viện -> Thêm bình bên ngoài
  3. Chọn tệp jar
  4. Áp dụng và Đóng

Chụp ảnh màn hình toàn trang với API AShot

Bước 1) Tạo một đối tượng Ashot và gọi phương thức takeScreenshot () nếu bạn chỉ muốn ảnh chụp màn hình cho trang kích thước màn hình.

Ảnh chụp màn hình screenshot = new Ashot (). TakeScreenshot (trình điều khiển);

Nhưng nếu bạn muốn ảnh chụp màn hình của trang lớn hơn kích thước màn hình, hãy gọi phương thức shootingStrategy () trước khi gọi phương thức takeScreenshot () để thiết lập chính sách. Sau đó, gọi một phương thức takeScreenshot () truyền qua webdriver, ví dụ:

Ảnh chụp màn hình screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (trình điều khiển);

Ở đây 1000 là thời gian cuộn ra tính bằng mili giây, vì vậy để chụp ảnh màn hình, chương trình sẽ cuộn trong mỗi 1000 mili giây.

Bước 2): Bây giờ, lấy hình ảnh từ ảnh chụp màn hình và ghi nó vào tệp. Bạn có thể cung cấp loại tệp là jpg.webp, png, v.v.

ImageIO.write (screenshot.getImage (), "jpg.webp", tệp mới (". \\ ảnh chụp màn hình \\ fullimage.jpg.webp"));

Chụp ảnh màn hình toàn trang của một trang lớn hơn kích thước màn hình.

Ví dụ: Đây là ví dụ chụp ảnh màn hình toàn trang của http://demo.guru99.com/test/guru99home/ và lưu vào tệp "screenshot.jpg.webp".

Do sử dụng lớp ShootingStrategy của Ashot API, chúng tôi sẽ có thể chụp toàn bộ hình ảnh của một trang lớn hơn kích thước màn hình. Đây là chương trình:

gói Guru99;nhập java.io.File;nhập java.io.IOException;nhập javax.imageio.ImageIO;nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebElement;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.chrome.ChromeDriver;nhập ru.yandex.qatools.ashot.AShot;nhập ru.yandex.qatools.ashot.Screenshot;nhập ru.yandex.qatools.ashot.shooting.ShootingStrategies;lớp công khai TestScreenshotUsingAshot {public static void main (String [] args) ném IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Trình điều khiển WebDriver = mới ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). Maxim ();Screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (trình điều khiển);ImageIO.write (screenshot.getImage (), "jpg.webp", tệp mới ("c: \\ ElementScreenshot.jpg.webp"));}}

Chụp ảnh màn hình của một phần tử cụ thể của trang

Ví dụ: Đây là ví dụ chụp ảnh màn hình phần tử của logo Guru 99 trên trang http://demo.guru99.com/test/guru99home/ và lưu vào tệp "ElementScreenshot.jpg.webp". Đây là mã:

gói Guru99;nhập java.io.File;nhập java.io.IOException;nhập javax.imageio.ImageIO;nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebElement;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.chrome.ChromeDriver;nhập ru.yandex.qatools.ashot.AShot;nhập ru.yandex.qatools.ashot.Screenshot;nhập ru.yandex.qatools.ashot.shooting.ShootingStrategies;public class TestElementScreenshotUsingAshot {public static void main (String [] args) ném IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Trình điều khiển WebDriver = mới ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). Maxim ();// Tìm phần tử để chụp ảnh màn hìnhPhần tử WebElement = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));// Cùng với phần tử vượt qua trình điều khiển cũng trong phương thức takeScreenshot ().Screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (trình điều khiển, phần tử);ImageIO.write (screenshot.getImage (), "jpg.webp", tệp mới ("c: \\ ElementScreenshot.jpg.webp"));}}

So sánh hình ảnh bằng AShot

gói Guru99;nhập java.awt.image.BufferedImage;nhập java.io.File;nhập java.io.IOException;nhập javax.imageio.ImageIO;nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.WebElement;nhập org.openqa.selenium.chrome.ChromeDriver;nhập ru.yandex.qatools.ashot.AShot;nhập ru.yandex.qatools.ashot.Screenshot;nhập ru.yandex.qatools.ashot.comparison.ImageDiff;nhập ru.yandex.qatools.ashot.comparison.ImageDiffer;lớp công khai TestImageComaprison {public static void main (String [] args) ném IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");Trình điều khiển WebDriver = mới ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Tìm phần tử và chụp ảnh màn hìnhWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));Ảnh chụp màn hình logoElementScreenshot = new AShot (). TakeScreenshot (trình điều khiển, logoElemnent);// đọc hình ảnh để so sánhBufferedImage dự kiếnImage = ImageIO.read (tệp mới ("C: \\ Guru99logo.png.webp"));BufferedImage factImage = logoElementScreenshot.getImage ();// Tạo đối tượng ImageDiffer và gọi phương thức makeDiff ()ImageDiffer imgDiff = new ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (hình ảnh thực tế, hình ảnh dự kiến);if (diff.hasDiff () == true) {System.out.println ("Hình ảnh giống nhau");} khác {System.out.println ("Các hình ảnh khác nhau");}driver.quit ();}}

Tóm lược

  • Ashot API là một phần mềm miễn phí từ Yandex.
  • Nó là một tiện ích để chụp ảnh màn hình trong Selenium.
  • Nó giúp bạn chụp ảnh màn hình của từng WebElement trên các nền tảng khác nhau như trình duyệt máy tính để bàn, iOS Simulator Mobile Safari, Android Emulator Browser.
  • Nó có thể chụp ảnh màn hình trang của một trang lớn hơn kích thước màn hình.
  • Tính năng này đã bị loại bỏ trong phiên bản 3 của selen, vì vậy Ashot API là một lựa chọn tốt.
  • Nó có thể trang trí các ảnh chụp màn hình.
  • Nó cung cấp một so sánh ảnh chụp màn hình.

Được thực hiện nhờ sự đóng góp của Shradhdha Dave