Come acquisire screenshot in Selenium WebDriver

Sommario:

Anonim

Screenshot in Selenium Webdriver

Uno screenshot in Selenium Webdriver viene utilizzato per l'analisi dei bug. Il webdriver Selenium può acquisire automaticamente screenshot durante l'esecuzione. Ma se gli utenti devono acquisire uno screenshot da soli, devono utilizzare il metodo TakeScreenshot che notifica al WebDrive di acquisire lo screenshot e memorizzarlo in Selenium.

In questo tutorial imparerai,

  • Cattura screenshot utilizzando Selenium WebDriver
  • Cos'è l'API Ashot?
  • Come scaricare e configurare l'API Ashot?
  • Cattura screenshot a pagina intera con AShot API
  • Fare uno screenshot di un particolare elemento della pagina
  • Confronto di immagini utilizzando AShot

Cattura screenshot utilizzando Selenium WebDriver

Fare screenshot in selenio è un processo in 3 fasi

Passaggio 1) Converti l'oggetto driver Web in TakeScreenshot

TakesScreenshot scrShot = ((TakesScreenshot) webdriver);

Passaggio 2) Chiama il metodo getScreenshotAs per creare il file immagine

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

Passaggio 3) Copia il file nella posizione desiderata

Esempio: in questo esempio prenderemo la cattura dello schermo di http://demo.guru99.com/V4/ e lo salveremo come C: /Test.png.webp

pacchetto 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 () genera un'eccezione {Driver WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");driver = nuovo FirefoxDriver ();// goto urldriver.get ("http://demo.guru99.com/V4/");// Chiama la funzione cattura screenshotthis.takeSnapShot (driver, "c: //test.png.webp");}/ *** Questa funzione acquisirà uno screenshot* @param webdriver* @param fileWithPath* @throws Eccezione* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) genera un'eccezione {// Converte l'oggetto del driver web in TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Chiama il metodo getScreenshotAs per creare il file immagineFile SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Sposta il file immagine nella nuova destinazioneFile DestFile = nuovo file (fileWithPath);// Copia il file nella destinazioneFileUtils.copyFile (SrcFile, DestFile);}}

NOTA: Selenium versione 3.9.0 e successive non fornisce Apache Commons IO JAR. Puoi semplicemente scaricarli qui e chiamarli nel tuo progetto

Cos'è l'API Ashot?

Ashot è un'utilità di terze parti di Yandex supportata da Selenium WebDriver per catturare gli screenshot. Acquisisce uno screenshot di un singolo WebElement e uno screenshot a pagina intera di una pagina, che è più significativo delle dimensioni dello schermo.

Come scaricare e configurare l'API Ashot?

Esistono due metodi per configurare l'API Ashot

  • 1.Utilizzare Maven
  • 2.Manualmente senza utilizzare alcuno strumento

Per configurare tramite Maven:

  • Vai su https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  • Fare clic sull'ultima versione, per ora. È 1.5.4
  • Copia il codice di dipendenza e aggiungilo al tuo file pom.xml

  • Salva il file e Maven aggiungerà il jar al tuo percorso di build
  • E ora sei pronto !!!

Per configurare manualmente senza alcuno strumento di dipendenza

  1. Vai su https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Fare clic sull'ultima versione, per ora. È 1.5.4
  3. Fare clic sul barattolo, scaricarlo e salvarlo sulla macchina

  1. Aggiungi il file jar nel tuo percorso di build:
  2. In Eclipse, fai clic con il pulsante destro del mouse sul progetto -> vai a proprietà -> Crea percorso -> Librerie -> Aggiungi vasi esterni
  3. Seleziona il file jar
  4. Applica e chiudi

Cattura screenshot a pagina intera con AShot API

Passaggio 1) Crea un oggetto Ashot e chiama il metodo takeScreenshot () se vuoi solo lo screenshot per la pagina delle dimensioni dello schermo.

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

Ma se vuoi uno screenshot della pagina più grande delle dimensioni dello schermo, chiama il metodo shootingStrategy () prima di chiamare il metodo takeScreenshot () per impostare la politica. Quindi chiama un metodo takeScreenshot () passando il webdriver, ad esempio,

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

Qui viene fatto scorrere 1000 tempo in millisecondi, quindi per fare uno screenshot, il programma scorrerà per ogni 1000 msec.

Passaggio 2): Ora, prendi l'immagine dallo screenshot e scrivila sul file. Puoi fornire il tipo di file come jpg.webp, png, ecc.

ImageIO.write (screenshot.getImage (), "jpg.webp", nuovo file (". \\ screenshot \\ fullimage.jpg.webp"));

Acquisizione di uno screenshot a pagina intera di una pagina più grande delle dimensioni dello schermo.

Esempio: ecco l'esempio di acquisizione di uno screenshot a pagina intera di http://demo.guru99.com/test/guru99home/ e salvataggio nel file "screenshot.jpg.webp".

Grazie all'utilizzo della classe ShootingStrategy dell'API Ashot, saremo in grado di acquisire un'immagine completa di una pagina più grande delle dimensioni dello schermo. Ecco il programma:

pacchetto 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 void main (String [] args) genera IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Driver WebDriver = nuovo ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maxim ();Screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver);ImageIO.write (screenshot.getImage (), "jpg.webp", nuovo file ("c: \\ ElementScreenshot.jpg.webp"));}}

Fare uno screenshot di un particolare elemento della pagina

Esempio: ecco l'esempio di cattura dello screenshot di un elemento del logo Guru 99 sulla pagina http://demo.guru99.com/test/guru99home/ e salvarlo nel file "ElementScreenshot.jpg.webp". Ecco il codice:

pacchetto 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 void main (String [] args) genera IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Driver WebDriver = nuovo ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maxim ();// Trova l'elemento per acquisire uno screenshotElemento WebElement = driver.findElement (By.xpath ("// * [@ id = \" nome-sito \ "] / a [1] / img"));// Insieme all'elemento driver pass anche nel metodo takeScreenshot ().Screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver, element);ImageIO.write (screenshot.getImage (), "jpg.webp", nuovo file ("c: \\ ElementScreenshot.jpg.webp"));}}

Confronto di immagini utilizzando AShot

pacchetto 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 void main (String [] args) genera IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");Driver WebDriver = nuovo ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Trova l'elemento e fai uno screenshotWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));Screenshot logoElementScreenshot = new AShot (). TakeScreenshot (driver, logoElemnent);// leggi l'immagine da confrontareBufferedImage expectedImage = ImageIO.read (nuovo file ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// Crea un oggetto ImageDiffer e chiama il metodo makeDiff ()ImageDiffer imgDiff = nuovo ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (actualImage, expectedImage);if (diff.hasDiff () == true) {System.out.println ("Le immagini sono le stesse");} altro {System.out.println ("Le immagini sono diverse");}driver.quit ();}}

Sommario

  • Ashot API è un freeware di Yandex.
  • È un'utilità per acquisire uno screenshot in Selenium.
  • Ti aiuta a fare uno screenshot di un singolo WebElement su diverse piattaforme come browser desktop, iOS Simulator Mobile Safari, Android Emulator Browser.
  • Può acquisire uno screenshot di una pagina più grande delle dimensioni dello schermo.
  • Questa funzione è stata rimossa nella versione 3 del selenio, quindi Ashot API è una buona opzione.
  • Può decorare gli screenshot.
  • Fornisce un confronto degli screenshot.

Reso possibile grazie ai contributi di Shradhdha Dave