¿Cómo tomar una captura de pantalla con Selenium WebDriver?
¿Es posible tomar una captura de pantalla usando Selenium WebDriver?
(Nota: no es el control remoto de Selenium )
Aceptado
Java
Sí, es posible. El siguiente ejemplo 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"));
Pitón
Cada WebDriver tiene un .save_screenshot(filename)
método. Entonces, para Firefox, se puede usar así:
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://www.google.com/')
browser.save_screenshot('screenie.png')
Curiosamente, .get_screenshot_as_file(filename)
también existe un método que hace lo mismo.
También existen métodos para: .get_screenshot_as_base64()
(para incrustar en HTML) y .get_screenshot_as_png()
(para recuperar datos binarios).
Y tenga en cuenta que los WebElements tienen un .screenshot()
método que funciona de manera similar, pero solo captura el elemento seleccionado.
C#
public void TakeScreenshot()
{
try
{
Screenshot ss = ((ITakesScreenshot)driver).GetScreenshot();
ss.SaveAsFile(@"D:\Screenshots\SeleniumTestingScreenshot.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
throw;
}
}
JavaScript (Selenium-Webdriver)
driver.takeScreenshot().then(function(data){
var base64Data = data.replace(/^data:image\/png;base64,/,"")
fs.writeFile("out.png", base64Data, 'base64', function(err) {
if(err) console.log(err);
});
});