Question Prenez une capture d'écran avec Selenium WebDriver


Est-ce que quelqu'un sait s'il est possible de faire une capture d'écran en utilisant Selenium WebDriver? (Note: Pas Selenium RC)


424
2017-08-06 08:52


origine


Réponses:


Java

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"));

432
2017-08-06 11:33



Python

Chaque WebDriver a un .save_screenshot(filename) méthode. Donc, pour Firefox, il peut être utilisé comme ceci:

from selenium import webdriver

browser = webdriver.Firefox()
browser.get('http://www.google.com/')
browser.save_screenshot('screenie.png')
browser.quit()

Confusément, un .get_screenshot_as_file(filename) il existe aussi une méthode qui fait la même chose.

Il existe également des méthodes pour: .get_screenshot_as_base64() (pour incorporation en HTML) et .get_screenshot_as_png()(pour récupérer des données binaires).

et Notez que WebElements ont un .screenshot() méthode qui fonctionne de manière similaire, mais capture uniquement l'élément sélectionné.


216
2018-06-08 16:37



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;
    }
}

87
2017-09-06 15:02



Rubis

require 'rubygems'
require 'selenium-webdriver'

driver = Selenium::WebDriver.for :ie 
driver.get "https://www.google.com"   
driver.save_screenshot("./screen.png")

plus de types de fichiers et d'options sont disponibles et vous pouvez les voir dans takes_screenshot.rb


57
2017-08-18 20:03



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);
   });
});

56
2018-06-02 11:13



PHP (PHPUnit)

Utilise l'extension PHPUnit_Selenium version 1.2.7:

class MyTestClass extends PHPUnit_Extensions_Selenium2TestCase {
    ...
    public function screenshot($filepath) {
        $filedata = $this->currentScreenshot();
        file_put_contents($filepath, $filedata);
    }

    public function testSomething() {          
        $this->screenshot('/path/to/screenshot.png');
    }
    ...
}

31
2018-06-22 17:38



Java

J'ai résolu ce problème. Vous pouvez augmenter le RemoteWebDriver pour lui donner toutes les interfaces implémentées par son pilote mandaté:

WebDriver augmentedDriver = new Augmenter().augment(driver); 
((TakesScreenshot)augmentedDriver).getScreenshotAs(...); //works this way

30
2017-09-03 18:08