Στιγμιότυπο οθόνης στο Selenium Webdriver
Ένα στιγμιότυπο οθόνης στο Selenium Webdriver χρησιμοποιείται για ανάλυση σφαλμάτων. Το πρόγραμμα οδήγησης web Selenium μπορεί να τραβήξει αυτόματα στιγμιότυπα οθόνης κατά την εκτέλεση. Αλλά εάν οι χρήστες πρέπει να τραβήξουν ένα στιγμιότυπο οθόνης μόνοι τους, πρέπει να χρησιμοποιήσουν τη μέθοδο TakeScreenshot που ειδοποιεί το WebDrive να τραβήξει το στιγμιότυπο οθόνης και να το αποθηκεύσει στο Selenium.
Σε αυτό το σεμινάριο, θα μάθετε,
- Λήψη στιγμιότυπου οθόνης χρησιμοποιώντας το Selenium WebDriver
- Τι είναι το Ashot API;
- Πώς να κατεβάσετε και να ρυθμίσετε το Ashot API;
- Λήψη στιγμιότυπου οθόνης πλήρους σελίδας με AShot API
- Λήψη στιγμιότυπου οθόνης ενός συγκεκριμένου στοιχείου της σελίδας
- Σύγκριση εικόνων χρησιμοποιώντας AShot
Λήψη στιγμιότυπου οθόνης χρησιμοποιώντας το Selenium WebDriver
Η λήψη στιγμιότυπου οθόνης στο Σελήνιο είναι μια διαδικασία 3 βημάτων
Βήμα 1) Μετατροπή αντικειμένου προγράμματος οδήγησης ιστού σε TakeScreenshot
TakesScreenshot scrShot = ((TakesScreenshot) πρόγραμμα οδήγησης ιστού);
Βήμα 2) Καλέστε τη μέθοδο getScreenshotAs για να δημιουργήσετε ένα αρχείο εικόνας
Αρχείο SrcFile = scrShot.getScreenshotAs (OutputType.FILE);
Βήμα 3) Αντιγραφή αρχείου στην επιθυμητή τοποθεσία
Παράδειγμα: Σε αυτό το παράδειγμα, θα τραβήξουμε την οθόνη http://demo.guru99.com/V4/ και θα την αποθηκεύσουμε ως C: /Test.png.webp
πακέτο Guru99TakeScreenshot;εισαγωγή java.io.File;εισαγωγή org.apache.commons.io.FileUtils;εισαγωγή org.openqa.selenium.OutputType;εισαγωγή org.openqa.selenium.TakesScreenshot;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.firefox.FirefoxDriver;εισαγωγή org.testng.annotations.Test;δημόσια τάξη Guru99TakeScreenshot {@Δοκιμήpublic void testGuru99TakeScreenShot () ρίχνει την εξαίρεση {Πρόγραμμα οδήγησης WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");πρόγραμμα οδήγησης = νέο FirefoxDriver ();// goto urldriver.get ("http://demo.guru99.com/V4/");// Λειτουργία λήψης στιγμιότυπου κλήσηςthis.takeSnapShot (πρόγραμμα οδήγησης, "c: //test.png.webp");}/ *** Αυτή η λειτουργία θα λάβει στιγμιότυπο οθόνης* @param webdriver* @param fileWithPath* @throws Εξαίρεση* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) ρίχνει την εξαίρεση {// Μετατροπή αντικειμένου προγράμματος οδήγησης ιστού σε TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) πρόγραμμα οδήγησης ιστού);// Καλέστε τη μέθοδο getScreenshotAs για τη δημιουργία αρχείου εικόναςΑρχείο SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Μετακίνηση αρχείου εικόνας σε νέο προορισμόFile DestFile = νέο αρχείο (fileWithPath);// Αντιγραφή αρχείου στον προορισμόFileUtils.copyFile (SrcFile, DestFile);}}
ΣΗΜΕΙΩΣΗ: Το σελήνιο έκδοση 3.9.0 και άνω δεν παρέχει Apache Commons IO JAR. Μπορείτε απλά να τα κατεβάσετε εδώ και να τα καλέσετε στο έργο σας
Τι είναι το Ashot API;
Το Ashot είναι ένα βοηθητικό πρόγραμμα τρίτων από το Yandex που υποστηρίζεται από το Selenium WebDriver για τη λήψη των Screenshots Παίρνει ένα στιγμιότυπο οθόνης ενός μεμονωμένου WebElement καθώς και ένα στιγμιότυπο οθόνης μιας σελίδας, το οποίο είναι πιο σημαντικό από το μέγεθος της οθόνης.
Πώς να κατεβάσετε και να ρυθμίσετε το Ashot API;
Υπάρχουν δύο μέθοδοι για τη διαμόρφωση του Ashot API
- 1. Χρήση του Maven
- 2. Χειροκίνητα χωρίς χρήση εργαλείου
Για να διαμορφώσετε μέσω Maven:
- Μεταβείτε στη διεύθυνση https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Κάντε κλικ στην τελευταία έκδοση, προς το παρόν. Είναι 1.5.4
- Αντιγράψτε τον κωδικό Εξάρτησης και προσθέστε το αρχείο pom.xml
- Αποθηκεύστε το αρχείο και ο Maven θα προσθέσει το βάζο στη διαδρομή κατασκευής σας
- Και τώρα είστε έτοιμοι !!!
Για μη αυτόματη ρύθμιση παραμέτρων χωρίς κανένα εργαλείο εξάρτησης
- Μεταβείτε στη διεύθυνση https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Κάντε κλικ στην τελευταία έκδοση, προς το παρόν. Είναι 1.5.4
- Κάντε κλικ στο δοχείο, κάντε λήψη και αποθηκεύστε το στο μηχάνημά σας
- Προσθέστε το αρχείο jar στη διαδρομή κατασκευής:
- Στο Eclipse, κάντε δεξί κλικ στο έργο -> μεταβείτε στις ιδιότητες -> Build Path -> Βιβλιοθήκες -> Προσθήκη εξωτερικών βάζων
- Επιλέξτε το αρχείο βάζου
- Εφαρμόστε και κλείστε
Λήψη στιγμιότυπου οθόνης πλήρους σελίδας με AShot API
Βήμα 1) Δημιουργήστε ένα αντικείμενο Ashot και καλέστε τη μέθοδο takeScreenshot () εάν θέλετε απλώς το στιγμιότυπο οθόνης για τη σελίδα μεγέθους οθόνης.
Στιγμιότυπο οθόνης στιγμιότυπου = νέο Ashot (). TakeScreenshot (πρόγραμμα οδήγησης);
Αλλά αν θέλετε ένα στιγμιότυπο οθόνης της σελίδας μεγαλύτερο από το μέγεθος της οθόνης, καλέστε τη μέθοδο shootingStrategy () πριν καλέσετε τη μέθοδο takeScreenshot () για να ρυθμίσετε την πολιτική. Στη συνέχεια, καλέστε μια μέθοδο takeScreenshot () περνώντας το πρόγραμμα οδήγησης ιστού, για παράδειγμα,
Στιγμιότυπο οθόνης στιγμιότυπου = νέο AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (πρόγραμμα οδήγησης);
Εδώ το 1000 μετακινείται σε χιλιοστά του δευτερολέπτου, οπότε για λήψη στιγμιότυπου οθόνης, το πρόγραμμα θα μετακινηθεί για κάθε 1000 msec.
Βήμα 2): Τώρα, πάρτε την εικόνα από το στιγμιότυπο οθόνης και γράψτε την στο αρχείο. Μπορείτε να παρέχετε τον τύπο αρχείου ως jpg.webp, png, κ.λπ.
ImageIO.write (screenshot.getImage (), "jpg.webp", νέο αρχείο (". \\ screenshot \\ fullimage.jpg.webp"));
Λήψη στιγμιότυπου οθόνης πλήρους σελίδας μιας σελίδας μεγαλύτερη από το μέγεθος της οθόνης.
Παράδειγμα: Ακολουθεί το παράδειγμα λήψης στιγμιότυπου οθόνης πλήρους σελίδας του http://demo.guru99.com/test/guru99home/ και αποθήκευση στο αρχείο "screenshot.jpg.webp."
Λόγω της χρήσης της κατηγορίας ShootingStrategy του Ashot API, θα είμαστε σε θέση να τραβήξουμε μια πλήρη εικόνα μιας σελίδας μεγαλύτερη από το μέγεθος της οθόνης. Εδώ είναι το πρόγραμμα:
πακέτο Guru99;εισαγωγή java.io.File;εισαγωγή java.io.IOException;εισαγωγή javax.imageio.ImageIO;εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebElement;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.chrome.ChromeDriver;εισαγωγή ru.yandex.qatools.ashot.AShot;εισαγωγή ru.yandex.qatools.ashot.Screenshot;εισαγωγή ru.yandex.qatools.ashot.shooting.ShootingStrategies;δημόσια τάξη TestScreenshotUsingAshot {public static void main (String [] args) ρίχνει το IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Πρόγραμμα οδήγησης WebDriver = νέο ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). μεγιστοποίηση ();Στιγμιότυπο οθόνης = νέο AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (πρόγραμμα οδήγησης);ImageIO.write (screenshot.getImage (), "jpg.webp", νέο αρχείο ("c: \\ ElementScreenshot.jpg.webp"));}}
Λήψη στιγμιότυπου οθόνης ενός συγκεκριμένου στοιχείου της σελίδας
Παράδειγμα: Ακολουθεί το παράδειγμα της καταγραφής στιγμιότυπου οθόνης του λογότυπου Guru 99 στη σελίδα http://demo.guru99.com/test/guru99home/ και αποθήκευση στο αρχείο "ElementScreenshot.jpg.webp". Εδώ είναι ο κωδικός:
πακέτο Guru99;εισαγωγή java.io.File;εισαγωγή java.io.IOException;εισαγωγή javax.imageio.ImageIO;εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebElement;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.chrome.ChromeDriver;εισαγωγή ru.yandex.qatools.ashot.AShot;εισαγωγή ru.yandex.qatools.ashot.Screenshot;εισαγωγή ru.yandex.qatools.ashot.shooting.ShootingStrategies;δημόσια τάξη TestElementScreenshotUsingAshot {public static void main (String [] args) ρίχνει το IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Πρόγραμμα οδήγησης WebDriver = νέο ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). μεγιστοποίηση ();// Βρείτε το στοιχείο για λήψη στιγμιότυπου οθόνηςWebElement element = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));// Μαζί με το στοιχείο κάρτας προγράμματος οδήγησης επίσης με τη μέθοδο takeScreenshot ().Στιγμιότυπο οθόνης = νέο AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (πρόγραμμα οδήγησης, στοιχείο);ImageIO.write (screenshot.getImage (), "jpg.webp", νέο αρχείο ("c: \\ ElementScreenshot.jpg.webp"));}}
Σύγκριση εικόνων χρησιμοποιώντας AShot
πακέτο Guru99;εισαγωγή java.awt.image.BufferedImage;εισαγωγή java.io.File;εισαγωγή java.io.IOException;εισαγωγή javax.imageio.ImageIO;εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.WebElement;εισαγωγή org.openqa.selenium.chrome.ChromeDriver;εισαγωγή ru.yandex.qatools.ashot.AShot;εισαγωγή ru.yandex.qatools.ashot.Screenshot;εισαγωγή ru.yandex.qatools.ashot.comparison.ImageDiff;εισαγωγή ru.yandex.qatools.ashot.comparison.ImageDiffer;δημόσια τάξη TestImageComaprison {public static void main (String [] args) ρίχνει το IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");Πρόγραμμα οδήγησης WebDriver = νέο ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Βρείτε το στοιχείο και τραβήξτε ένα στιγμιότυπο οθόνηςWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));Screenshot logoElementScreenshot = νέο AShot (). TakeScreenshot (πρόγραμμα οδήγησης, logoElemnent);// διαβάστε την εικόνα για σύγκρισηBufferedImage expectImage = ImageIO.read (νέο αρχείο ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// Δημιουργία αντικειμένου ImageDiffer και μέθοδος κλήσης makeDiff ()ImageDiffer imgDiff = νέο ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (πραγματική εικόνα, αναμενόμενη εικόνα);εάν (diff.hasDiff () == true) {System.out.println ("Οι εικόνες είναι ίδιες");} αλλιώς {System.out.println ("Οι εικόνες είναι διαφορετικές");}driver.quit ();}}
Περίληψη
- Το Ashot API είναι ένα δωρεάν λογισμικό από το Yandex.
- Είναι ένα βοηθητικό πρόγραμμα για λήψη στιγμιότυπου οθόνης στο Selenium.
- Σας βοηθά να τραβήξετε ένα στιγμιότυπο οθόνης ενός μεμονωμένου WebElement σε διαφορετικές πλατφόρμες, όπως προγράμματα περιήγησης για επιτραπέζιους υπολογιστές, iOS Simulator Mobile Safari, Android Emulator Browser.
- Μπορεί να πάρει ένα στιγμιότυπο οθόνης σελίδας μεγαλύτερης από το μέγεθος της οθόνης.
- Αυτή η δυνατότητα έχει καταργηθεί στην έκδοση 3 του σεληνίου, επομένως το Ashot API είναι μια καλή επιλογή.
- Μπορεί να διακοσμήσει τα στιγμιότυπα οθόνης.
- Παρέχει μια σύγκριση οθόνης.
Πραγματοποιήθηκε λόγω των συνεισφορών του Shradhdha Dave