Est-il possible de faire une capture d'écran à l'aide de Selenium WebDriver ?
(Note : Pas Télécommande Selenium )
Est-il possible de faire une capture d'écran à l'aide de Selenium WebDriver ?
(Note : Pas Télécommande Selenium )
Oui, c'est possible. L'exemple suivant est en Java :
WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
// Now you can do whatever you need to do with it, for example copy somewhere
FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));
Copier le fichier, plutôt que de le renommer, est une bonne idée s'il y a une chance que la source et la destination ne soient pas sur le même système de fichiers. Vous ne pouvez pas renommer un fichier au-delà des limites du système de fichiers (sous Unix, du moins). Notez qu'il est courant pour /tmp
pour être sur son propre système de fichiers, et FirefoxDriver écrit les captures d'écran à /tmp
.
Vous pouvez faire une copie éparse et obtenir de meilleures performances lorsqu'ils sont sur le même système de fichiers.
Chaque WebDriver possède un .save_screenshot(filename)
méthode. Ainsi, pour Firefox, elle peut être utilisée comme suit :
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://www.google.com/')
browser.save_screenshot('screenie.png')
De façon déroutante, un .get_screenshot_as_file(filename)
Il existe également une méthode qui fait la même chose.
Il existe également des méthodes pour : .get_screenshot_as_base64()
(pour l'intégration dans le HTML) et .get_screenshot_as_png()
(pour récupérer des données binaires).
Et note que les WebElements ont un .screenshot()
qui fonctionne de manière similaire, mais qui ne capture que l'élément sélectionné.
Pour les autres navigateurs, échangez l'instance webdriver. Si vous voulez simplement des captures d'écran de votre site web, y compris l'état, jetez un coup d'oeil à Usersnap .
@DavidRöthlisberger c'est très bien, mais votre commentaire n'a rien à voir avec ma réponse.
Pour faire un scrennshot d'une page entière, pas seulement de la zone visible, utilisez mon code python de ma réponse ici à stich : stackoverflow.com/questions/37906704/
Fonctionne parfaitement. Attention : il s'agit d'une capture d'écran et non d'une capture de page.
Vous voulez dire qu'il devient bureau et tout ? Ou bien qu'il n'obtient que la fenêtre d'affichage ?
Il n'obtiendra que ce qui se trouve dans la portée du pilote, ceci afin de permettre la réalisation de plusieurs tests parallèles. Notez qu'il ne fera pas de zoom arrière si la fenêtre principale de votre pilote a une barre de défilement ou si elle dépasse une seule page.
Similaire à la façon dont Browserstack le décrit : browserstack.com/automate/node#enhancements-screenshots
@JohnDemetriou, data est le nom de l'objet ou de la variable qui sera créée lorsque vous l'appellerez. Vous pouvez l'appeler var1
si vous le souhaitez. Vous devriez regarder takeScreenshot()
fonction pour savoir ce que c'est exactement. Peut-être une image binaire rendue à partir de javascript en utilisant canvas. Ça peut être le dom, avant qu'il ne soit rendu. Regarde dans.
Cela a bien fonctionné pour moi en utilisant Selenium Grid 2. script et hub fonctionnant sur OS X Snow Leopard ; nœud fonctionnant sur RedHat EL 4 avec Firefox 3.6.18 sous Xvfb.
Existe-t-il un moyen de faire une capture d'écran de la page entière, et pas seulement de la zone visible ?
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Il n'y a probablement qu'un seul moyen de le faire avec le protocole Wire de WebDriver, mais personne n'utilise ce protocole directement. Au lieu de cela, les gens utilisent différentes liaisons de langage/bibliothèques qui enveloppent le protocole de bas niveau. Il existe de nombreuses liaisons de langage, il faut donc préciser celle que l'on souhaite utiliser. Sinon, il y a trop de réponses.
0 votes
Quel langage de programmation utilisez-vous ?
0 votes
Voulez-vous faire une capture d'écran de la page entière ou d'un élément spécifique ?
0 votes
Oui, il est possible de faire une capture d'écran de la page entière ou d'un élément spécifique avec Selenium WebDriver.