Captură de ecran în Selenium Webdriver
O captură de ecran în Selenium Webdriver este utilizată pentru analiza erorilor. Selenium webdriver poate realiza automat capturi de ecran în timpul execuției. Dar dacă utilizatorii trebuie să captureze o captură de ecran de unul singur, trebuie să folosească metoda TakeScreenshot care notifică WebDrive să facă captura de ecran și să o stocheze în Selenium.
În acest tutorial, veți învăța,
- Capturați captura de ecran utilizând Selenium WebDriver
- Ce este Ashot API?
- Cum se descarcă și se configurează Ashot API?
- Capturați captura de ecran a întregii pagini cu AShot API
- Realizarea unei capturi de ecran a unui anumit element al paginii
- Compararea imaginilor folosind AShot
Capturați captura de ecran utilizând Selenium WebDriver
Preluarea capturii de ecran în seleniu este un proces în 3 pași
Pasul 1) Convertiți obiectul driverului web în TakeScreenshot
TakesScreenshot scrShot = ((TakesScreenshot) webdriver);
Pasul 2) Apelați metoda getScreenshotAs pentru a crea fișier imagine
Fișier SrcFile = scrShot.getScreenshotAs (OutputType.FILE);
Pasul 3) Copiați fișierul în locația dorită
Exemplu: În acest exemplu vom face captura de ecran a http://demo.guru99.com/V4/ și o vom salva ca C: /Test.png.webp
pachet 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;public class Guru99TakeScreenshot {@Testpublic void testGuru99TakeScreenShot () aruncă excepție {Driver WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");driver = nou FirefoxDriver ();// merge la adresa URLdriver.get ("http://demo.guru99.com/V4/");// Funcția de captare a capturilor de apelthis.takeSnapShot (driver, "c: //test.png.webp");}/ *** Această funcție va face captura de ecran* @param webdriver* @param fileWithPath* Excepție @throws* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) aruncă Excepție {// Convertiți obiectul driverului web în TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Apelați getScreenshot Ca metodă de creare a fișierului imagineFișier SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Mutați fișierul imagine în destinația nouăFile DestFile = fișier nou (fileWithPath);// Copiați fișierul la destinațieFileUtils.copyFile (SrcFile, DestFile);}}
NOTĂ: Selenium versiunea 3.9.0 și mai sus nu oferă Apache Commons IO JAR. Puteți pur și simplu să le descărcați aici și să le apelați în proiectul dvs.
Ce este Ashot API?
Ashot este un utilitar terț de către Yandex acceptat de Selenium WebDriver pentru a captura capturile de ecran. Este nevoie de o captură de ecran a unui WebElement individual, precum și o captură de ecran cu o pagină întreagă, care este mai semnificativă decât dimensiunea ecranului.
Cum se descarcă și se configurează Ashot API?
Există două metode pentru a configura API Ashot
- 1. Folosind Maven
- 2. Manual fără a utiliza niciun instrument
Pentru a configura prin Maven:
- Accesați https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Faceți clic pe ultima versiune, deocamdată. Este 1.5.4
- Copiați codul de dependență și adăugați-l în fișierul pom.xml
- Salvați fișierul, iar Maven va adăuga borcanul la calea de construire
- Și acum ești gata !!!
Pentru a configura manual fără niciun instrument de dependență
- Accesați https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Faceți clic pe ultima versiune, deocamdată. Este 1.5.4
- Faceți clic pe borcan, descărcați-l și salvați-l pe aparatul dvs.
- Adăugați fișierul jar în calea de construire:
- În Eclipse, faceți clic dreapta pe proiect -> accesați proprietăți -> Construiți calea -> Biblioteci -> Adăugați borcane externe
- Selectați fișierul jar
- Aplicați și închideți
Capturați captura de ecran a întregii pagini cu AShot API
Pasul 1) Creați un obiect Ashot și apelați la metoda takeScreenshot () dacă doriți doar captura de ecran pentru pagina cu dimensiunea ecranului.
Captură de ecran screenshot = new Ashot (). TakeScreenshot (driver);
Dar dacă doriți o captură de ecran a paginii mai mare decât dimensiunea ecranului, apelați metoda shootingStrategy () înainte de a apela metoda takeScreenshot () pentru a configura politica. Apoi apelați o metodă takeScreenshot () trecând webdriver-ul, de exemplu,
Screenshot screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver);
Aici 1000 este derulat în milisecunde, deci pentru a face o captură de ecran, programul va derula pentru fiecare 1000 msec.
Pasul 2): Acum, obțineți imaginea din captura de ecran și scrieți-o în fișier. Puteți furniza tipul de fișier ca jpg.webp, png etc.
ImageIO.write (screenshot.getImage (), "jpg.webp", fișier nou (". \\ screenshot \\ fullimage.jpg.webp"));
Realizarea unei capturi de ecran întreagă a unei pagini care este mai mare decât dimensiunea ecranului.
Exemplu: Iată exemplul capturării unei capturi de ecran pe pagina completă a http://demo.guru99.com/test/guru99home/ și salvarea în fișierul „screenshot.jpg.webp”.
Datorită utilizării clasei ShootingStrategy a API-ului Ashot, vom putea capta o imagine completă a unei pagini mai mari decât dimensiunea ecranului. Iată programul:
pachet 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;public class TestScreenshotUsingAshot {public static main principal (String [] args) aruncă IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Driver WebDriver = nou ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();Screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver);ImageIO.write (screenshot.getImage (), "jpg.webp", fișier nou ("c: \\ ElementScreenshot.jpg.webp"));}}
Realizarea unei capturi de ecran a unui anumit element al paginii
Exemplu: Iată exemplul capturării capturilor de ecran cu elementul logo-ului Guru 99 pe pagina http://demo.guru99.com/test/guru99home/ și salvați în fișierul „ElementScreenshot.jpg.webp”. Iată codul:
pachet 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;public class TestElementScreenshotUsingAshot {public static main principal (String [] args) aruncă IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Driver WebDriver = nou ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();// Găsiți elementul pentru a face o captură de ecranElement WebElement = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));// Împreună cu elementul de trecere a driverului, de asemenea, în metoda takeScreenshot ().Screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver, element);ImageIO.write (screenshot.getImage (), "jpg.webp", fișier nou ("c: \\ ElementScreenshot.jpg.webp"));}}
Compararea imaginilor folosind AShot
pachet 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;public class TestImageComaprison {public static main principal (String [] args) aruncă IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");Driver WebDriver = nou ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Găsiți elementul și faceți o captură de ecranWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));Captură de ecran logoElementScreenshot = new AShot (). TakeScreenshot (driver, logoElemnent);// citiți imaginea pentru a comparaBufferedImage expectedImage = ImageIO.read (nou fișier ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// Creați obiectul ImageDiffer și metoda de apel makeDiff ()ImageDiffer imgDiff = new ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (Imagine actuală, Imagine așteptată);if (diff.hasDiff () == true) {System.out.println („Imaginile sunt aceleași”);} altceva {System.out.println („Imaginile sunt diferite”);}driver.quit ();}}
rezumat
- Ashot API este un software gratuit de la Yandex.
- Este un utilitar pentru a face o captură de ecran în Selenium.
- Vă ajută să faceți o captură de ecran a unui WebElement individual pe diferite platforme, cum ar fi browsere desktop, iOS Simulator Mobile Safari, Android Emulator Browser.
- Poate face o captură de ecran a unei pagini mai mari decât dimensiunea ecranului.
- Această caracteristică a fost eliminată în versiunea 3 de seleniu, deci Ashot API este o opțiune bună.
- Poate decora capturile de ecran.
- Oferă o comparație a capturilor de ecran.
Posibil datorită contribuțiilor lui Shradhdha Dave