Screenshot in Selenium Webdriver
Een screenshot in Selenium Webdriver wordt gebruikt voor buganalyse . Selenium webdriver kan automatisch screenshots maken tijdens de uitvoering. Maar als gebruikers zelf een screenshot moeten maken, moeten ze de TakeScreenshot-methode gebruiken die de WebDrive op de hoogte stelt om de screenshot te maken en op te slaan in Selenium.
In deze tutorial leer je,
- Maak een screenshot met Selenium WebDriver
- Wat is Ashot API?
- Hoe Ashot API downloaden en configureren?
- Maak een schermafbeelding van een volledige pagina met AShot API
- Een screenshot maken van een bepaald element van de pagina
- Afbeelding vergelijken met AShot
Maak een screenshot met Selenium WebDriver
Screenshot maken in Selenium is een proces in 3 stappen
Stap 1) Converteer het webstuurprogramma-object naar TakeScreenshot
TakesScreenshot scrShot = ((TakesScreenshot) webdriver);
Stap 2) Roep de methode getScreenshotAs aan om een afbeeldingsbestand te maken
Bestand SrcFile = scrShot.getScreenshotAs (OutputType.FILE);
Stap 3) Kopieer het bestand naar de gewenste locatie
Voorbeeld: in dit voorbeeld nemen we een schermopname van http://demo.guru99.com/V4/ en slaan we het op als C: /Test.png.webp
pakket Guru99TakeScreenshot;importeer java.io.File;importeer org.apache.commons.io.FileUtils;importeer org.openqa.selenium.OutputType;importeer org.openqa.selenium.TakesScreenshot;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.firefox.FirefoxDriver;importeer org.testng.annotations.Test;openbare klas Guru99TakeScreenshot {@Testpublic void testGuru99TakeScreenShot () gooit uitzondering {WebDriver-stuurprogramma;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");driver = nieuwe FirefoxDriver ();// ga naar urldriver.get ("http://demo.guru99.com/V4/");// Bellen om screenshot-functie te nementhis.takeSnapShot (stuurprogramma, "c: //test.png.webp");* Deze functie maakt een screenshot* @param webdriver* @param fileWithPath* @throws Uitzonderingpublic static void takeSnapShot (WebDriver webdriver, String fileWithPath) genereert Uitzondering {// Converteer webstuurprogramma-object naar TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Roep de methode getScreenshotAs aan om een afbeeldingsbestand te makenBestand SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Verplaats afbeeldingsbestand naar een nieuwe bestemmingFile DestFile = nieuw bestand (fileWithPath);// Kopieer bestand op bestemmingFileUtils.copyFile (SrcFile, DestFile);
OPMERKING: Selenium versie 3.9.0 en hoger biedt geen Apache Commons IO JAR. U kunt ze hier eenvoudig downloaden en in uw project bellen
Wat is Ashot API?
Ashot is een hulpprogramma van een derde partij door Yandex ondersteund door Selenium WebDriver om de schermafbeeldingen te maken. Er wordt een schermafbeelding van een afzonderlijk WebElement gemaakt, evenals een schermvullende schermafbeelding van een pagina, die belangrijker is dan de schermgrootte.
Hoe Ashot API downloaden en configureren?
Er zijn twee methoden om de Ashot-API te configureren
- 1. Maven gebruiken
- 2. handmatig zonder enig gereedschap te gebruiken
Configureren via Maven:
- Ga naar https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Klik voorlopig op de laatste versie. Het is 1.5.4
- Kopieer de afhankelijkheidscode en voeg deze toe aan uw pom.xml-bestand
- Sla het bestand op en Maven zal de jar aan je build-pad toevoegen
- En nu ben je klaar !!!
Om handmatig te configureren zonder afhankelijkheidstool
- Ga naar https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Klik voorlopig op de laatste versie. Het is 1.5.4
- Klik op het potje, download het en sla het op uw computer op
- Voeg het jar-bestand toe aan uw build-pad:
- Klik in Eclipse met de rechtermuisknop op het project -> ga naar eigenschappen -> Bouwpad -> Bibliotheken -> Externe jars toevoegen
- Selecteer het jar-bestand
- Toepassen en sluiten
Maak een schermafbeelding van een volledige pagina met AShot API
Stap 1) Maak een Ashot-object en roep de methode takeScreenshot () aan als u alleen de schermafbeelding voor de pagina met schermgrootte wilt.
Screenshot screenshot = nieuwe Ashot (). TakeScreenshot (stuurprogramma);
Maar als u een schermafbeelding van de pagina wilt die groter is dan de schermgrootte, roept u de methode shootingStrategy () aan voordat u de methode takeScreenshot () aanroept om het beleid in te stellen. Roep vervolgens een methode takeScreenshot () aan door de webdriver door te geven, bijvoorbeeld
Screenshot screenshot = nieuw AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (stuurprogramma);
Hier wordt 1000 in milliseconden uit de tijd gescrolld, dus voor het maken van een screenshot zal het programma elke 1000 msec scrollen.
Stap 2): Haal nu de afbeelding uit de schermafbeelding en schrijf deze naar het bestand. U kunt het bestandstype opgeven als jpg.webp, png, enz.
ImageIO.write (screenshot.getImage (), "jpg.webp", nieuw bestand (". \\ screenshot \\ fullimage.jpg.webp"));
Een schermvullende schermafbeelding maken van een pagina die groter is dan de schermgrootte.
Voorbeeld: Hier is het voorbeeld van het vastleggen van een paginagrote schermafdruk van http://demo.guru99.com/test/guru99home/ en opslaan in het bestand "screenshot.jpg.webp".
Door de ShootingStrategy-klasse van Ashot API te gebruiken, kunnen we een volledige afbeelding vastleggen van een pagina die groter is dan de schermgrootte. Hier is het programma:
pakket Guru99;importeer java.io.File;importeer java.io.IOException;importeer javax.imageio.ImageIO;import org.openqa.selenium.By;importeer org.openqa.selenium.WebElement;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.chrome.ChromeDriver;importeer ru.yandex.qatools.ashot.AShot;import ru.yandex.qatools.ashot.Screenshot;ru.yandex.qatools.ashot.shooting.ShootingStrategies importeren;openbare klasse TestScreenshotUsingAshot {public static void main (String [] args) gooit IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");WebDriver-stuurprogramma = nieuwe ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximaliseren ();Screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (stuurprogramma);ImageIO.write (screenshot.getImage (), "jpg.webp", nieuw bestand ("c: \\ ElementScreenshot.jpg.webp"));
Een screenshot maken van een bepaald element van de pagina
Voorbeeld: Hier is het voorbeeld van het vastleggen van een screenshot van een element van het Guru 99-logo op de http://demo.guru99.com/test/guru99home/ pagina en opslaan in het bestand "ElementScreenshot.jpg.webp". Hier is de code:
pakket Guru99;importeer java.io.File;importeer java.io.IOException;importeer javax.imageio.ImageIO;import org.openqa.selenium.By;importeer org.openqa.selenium.WebElement;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.chrome.ChromeDriver;importeer ru.yandex.qatools.ashot.AShot;import ru.yandex.qatools.ashot.Screenshot;ru.yandex.qatools.ashot.shooting.ShootingStrategies importeren;openbare klasse TestElementScreenshotUsingAshot {public static void main (String [] args) gooit IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");WebDriver-stuurprogramma = nieuwe ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximaliseren ();// Zoek het element om een screenshot te makenWebElement-element = driver.findElement (By.xpath ("// * [@ id = \" sitenaam \ "] / a [1] / img"));// Samen met het driver-pass-element ook in de methode takeScreenshot ().Screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (bestuurder, element);ImageIO.write (screenshot.getImage (), "jpg.webp", nieuw bestand ("c: \\ ElementScreenshot.jpg.webp"));
Afbeelding vergelijken met AShot
pakket Guru99;importeer java.awt.image.BufferedImage;importeer java.io.File;importeer java.io.IOException;importeer javax.imageio.ImageIO;import org.openqa.selenium.By;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.WebElement;importeer org.openqa.selenium.chrome.ChromeDriver;importeer 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;openbare klasse TestImageComaprison {public static void main (String [] args) gooit IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");WebDriver-stuurprogramma = nieuwe ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Zoek het element en maak een screenshotWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" sitenaam \ "] / a [1] / img"));Screenshot logoElementScreenshot = new AShot (). TakeScreenshot (stuurprogramma, logoElemnent);// lees de afbeelding om te vergelijkenBufferedImage verwachteImage = ImageIO.read (nieuw bestand ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// Maak een ImageDiffer-object en roep de methode makeDiff () aanImageDiffer imgDiff = nieuwe ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (actualImage, verwachte afbeelding);if (diff.hasDiff () == true) {System.out.println ("Afbeeldingen zijn hetzelfde");} anders {System.out.println ("Afbeeldingen zijn verschillend");driver.quit ();
Overzicht
- Ashot API is een freeware van Yandex.
- Het is een hulpprogramma om een screenshot te maken in Selenium.
- Het helpt u om een screenshot te maken van een individueel WebElement op verschillende platforms zoals desktopbrowsers, iOS Simulator Mobile Safari, Android Emulator Browser.
- Het kan een schermafbeelding maken van een pagina die groter is dan de schermgrootte.
- Deze functie is verwijderd in selenium versie 3, dus Ashot API is een goede optie.
- Het kan de screenshots versieren.
- Het biedt een screenshot-vergelijking.
Mede mogelijk gemaakt door bijdragen van Shradhdha Dave