Capture d'écran sur Selenium Webdriver
Une capture d'écran dans Selenium Webdriver est utilisée pour l'analyse des bogues. Selenium webdriver peut prendre automatiquement des captures d'écran pendant l'exécution. Mais si les utilisateurs doivent capturer eux-mêmes une capture d'écran, ils doivent utiliser la méthode TakeScreenshot qui notifie au WebDrive de prendre la capture d'écran et de la stocker dans Selenium.
Dans ce tutoriel, vous apprendrez,
- Capturer une capture d'écran à l'aide de Selenium WebDriver
- Qu'est-ce que l'API Ashot?
- Comment télécharger et configurer l'API Ashot?
- Capturez une capture d'écran pleine page avec l'API AShot
- Prendre une capture d'écran d'un élément particulier de la page
- Comparaison d'images avec AShot
Capturer une capture d'écran à l'aide de Selenium WebDriver
Prendre une capture d'écran dans Selenium est un processus en 3 étapes
Étape 1) Convertissez l'objet de pilote Web en TakeScreenshot
TakesScreenshot scrShot = ((TakesScreenshot) Webdriver);
Étape 2) Appelez la méthode getScreenshotAs pour créer un fichier image
Fichier SrcFile = scrShot.getScreenshotAs (OutputType.FILE);
Étape 3) Copiez le fichier à l'emplacement souhaité
Exemple: Dans cet exemple, nous prendrons une capture d'écran de http://demo.guru99.com/V4/ et l'enregistrerons sous C: /Test.png.webp
package 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 () lève l'exception {Pilote WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");pilote = nouveau FirefoxDriver ();// goto urldriver.get ("http://demo.guru99.com/V4/");// Appelez la fonction de capture d'écranthis.takeSnapShot (pilote, "c: //test.png.webp");}/ *** Cette fonction prendra une capture d'écran* @param webdriver* @param fileWithPath* @throws Exception* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) lève l'exception {// Convertit l'objet pilote Web en TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) Webdriver);// Appelez la méthode getScreenshotAs pour créer un fichier imageFichier SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Déplacer le fichier image vers une nouvelle destinationFichier DestFile = nouveau fichier (fileWithPath);// Copier le fichier à destinationFileUtils.copyFile (SrcFile, DestFile);}}
REMARQUE: Selenium version 3.9.0 et supérieure ne fournit pas Apache Commons IO JAR. Vous pouvez simplement les télécharger ici et les appeler dans votre projet
Qu'est-ce que l'API Ashot?
Ashot est un utilitaire tiers de Yandex pris en charge par Selenium WebDriver pour capturer les captures d'écran. Il prend une capture d'écran d'un WebElement individuel ainsi qu'une capture d'écran pleine page d'une page, ce qui est plus important que la taille de l'écran.
Comment télécharger et configurer l'API Ashot?
Il existe deux méthodes pour configurer l'API Ashot
- 1.Utiliser Maven
- 2. manuellement sans utiliser aucun outil
Pour configurer via Maven:
- Accédez à https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Cliquez sur la dernière version, pour l'instant. C'est 1.5.4
- Copiez le code de dépendance et ajoutez-le à votre fichier pom.xml
- Enregistrez le fichier et Maven ajoutera le fichier jar à votre chemin de construction
- Et maintenant vous êtes prêt !!!
Pour configurer manuellement sans aucun outil de dépendance
- Accédez à https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Cliquez sur la dernière version, pour l'instant. C'est 1.5.4
- Cliquez sur le pot, téléchargez-le et enregistrez-le sur votre machine
- Ajoutez le fichier jar dans votre chemin de construction:
- Dans Eclipse, faites un clic droit sur le projet -> allez dans les propriétés -> Chemin de construction -> Bibliothèques -> Ajouter des jars externes
- Sélectionnez le fichier jar
- Appliquer et fermer
Capturez une capture d'écran pleine page avec l'API AShot
Étape 1) Créez un objet Ashot et appelez la méthode takeScreenshot () si vous voulez juste la capture d'écran pour la page de taille d'écran.
Capture d'écran capture d'écran = new Ashot (). TakeScreenshot (pilote);
Mais si vous voulez une capture d'écran de la page plus grande que la taille de l'écran, appelez la méthode shootingStrategy () avant d'appeler la méthode takeScreenshot () pour configurer la stratégie. Appelez ensuite une méthode takeScreenshot () en passant le webdriver, par exemple,
Capture d'écran Capture d'écran = nouveau AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (pilote);
Ici, 1000 est le temps de défilement en millisecondes, donc pour prendre une capture d'écran, le programme défilera toutes les 1000 msec.
Étape 2): Maintenant, récupérez l'image de la capture d'écran et écrivez-la dans le fichier. Vous pouvez fournir le type de fichier au format jpg.webp, png, etc.
ImageIO.write (screenshot.getImage (), "jpg.webp", nouveau fichier (". \\ screenshot \\ fullimage.jpg.webp"));
Prendre une capture d'écran pleine page d'une page plus grande que la taille de l'écran.
Exemple: Voici l'exemple de capture d'une capture d'écran pleine page de http://demo.guru99.com/test/guru99home/ et de la sauvegarde dans le fichier "screenshot.jpg.webp".
Grâce à l'utilisation de la classe ShootingStrategy de l'API Ashot, nous pourrons capturer une image complète d'une page plus grande que la taille de l'écran. Voici le programme:
package 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) lève IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Pilote WebDriver = nouveau ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximiser ();Capture d'écran = nouveau AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (pilote);ImageIO.write (screenshot.getImage (), "jpg.webp", nouveau fichier ("c: \\ ElementScreenshot.jpg.webp"));}}
Prendre une capture d'écran d'un élément particulier de la page
Exemple: Voici l'exemple de capture d'écran d'élément du logo Guru 99 sur la page http://demo.guru99.com/test/guru99home/ et de sauvegarde dans le fichier "ElementScreenshot.jpg.webp". Voici le code:
package 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) lève IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Pilote WebDriver = nouveau ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximiser ();// Trouvez l'élément pour prendre une capture d'écranÉlément WebElement = driver.findElement (By.xpath ("// * [@ id = \" nom-site \ "] / a [1] / img"));// Avec l'élément de passe du pilote également dans la méthode takeScreenshot ().Capture d'écran = nouveau AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (pilote, élément);ImageIO.write (screenshot.getImage (), "jpg.webp", nouveau fichier ("c: \\ ElementScreenshot.jpg.webp"));}}
Comparaison d'images avec AShot
package 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) lève IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");Pilote WebDriver = nouveau ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Trouvez l'élément et prenez une capture d'écranWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" nom-site \ "] / a [1] / img"));Capture d'écran logoElementScreenshot = new AShot (). TakeScreenshot (pilote, logoElemnent);// lit l'image pour comparerBufferedImage expectedImage = ImageIO.read (nouveau fichier ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// Créer un objet ImageDiffer et appeler la méthode makeDiff ()ImageDiffer imgDiff = nouveau ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (actualImage, expectedImage);if (diff.hasDiff () == true) {System.out.println ("Les images sont identiques");} autre {System.out.println ("Les images sont différentes");}driver.quit ();}}
Résumé
- L'API Ashot est un logiciel gratuit de Yandex.
- C'est un utilitaire pour prendre une capture d'écran dans Selenium.
- Il vous aide à prendre une capture d'écran d'un WebElement individuel sur différentes plates-formes telles que les navigateurs de bureau, iOS Simulator Mobile Safari, Android Emulator Browser.
- Il peut prendre une capture d'écran d'une page plus grande que la taille de l'écran.
- Cette fonctionnalité a été supprimée dans la version 3 du sélénium, l'API Ashot est donc une bonne option.
- Il peut décorer les captures d'écran.
- Il fournit une comparaison de capture d'écran.
Rendu possible grâce aux contributions de Shradhdha Dave