Как сделать скриншот с помощью Selenium WebDriver - PullRequest
462 голосов
/ 06 августа 2010

Кто-нибудь знает, можно ли сделать скриншот с помощью Selenium WebDriver? (Примечание: не Selenium RC)

Ответы [ 42 ]

474 голосов
/ 06 августа 2010

Java

Да, это возможно. Следующий пример на 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"));
242 голосов
/ 08 июня 2011

Python

Каждый WebDriver имеет метод .save_screenshot(filename). Так что для Firefox его можно использовать так:

from selenium import webdriver

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

Смущает, что существует метод .get_screenshot_as_file(filename), который делает то же самое.

Существуют также методы для: .get_screenshot_as_base64() (для встраивания в html) и .get_screenshot_as_png() (для получения двоичных данных).

и обратите внимание, что в WebElements есть метод .screenshot(), который работает аналогично, но захватывает только выбранный элемент.

99 голосов
/ 06 сентября 2013

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;
    }
}
65 голосов
/ 02 июня 2013

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);
   });
});
62 голосов
/ 19 августа 2011

Ruby

require 'rubygems'
require 'selenium-webdriver'

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

доступно больше типов файлов и опций, и вы можете увидеть их в take_screenshot.rb

34 голосов
/ 03 сентября 2011

Java

Я решил эту проблему. Вы можете увеличить RemoteWebDriver, чтобы дать ему все интерфейсы, которые реализует его прокси-драйвер:

WebDriver augmentedDriver = new Augmenter().augment(driver); 
((TakesScreenshot)augmentedDriver).getScreenshotAs(...); //works this way
33 голосов
/ 22 июня 2012

PHP (PHPUnit)

Используется расширение версии PHPUnit_Selenium 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');
    }
    ...
}
23 голосов
/ 12 января 2013

C #

public Bitmap TakeScreenshot(By by) {
    // 1. Make screenshot of all screen
    var screenshotDriver = _selenium as ITakesScreenshot;
    Screenshot screenshot = screenshotDriver.GetScreenshot();
    var bmpScreen = new Bitmap(new MemoryStream(screenshot.AsByteArray));

    // 2. Get screenshot of specific element
    IWebElement element = FindElement(by);
    var cropArea = new Rectangle(element.Location, element.Size);
    return bmpScreen.Clone(cropArea, bmpScreen.PixelFormat);
}
18 голосов
/ 09 мая 2012

Java

public String captureScreen() {
    String path;
    try {
        WebDriver augmentedDriver = new Augmenter().augment(driver);
        File source = ((TakesScreenshot)augmentedDriver).getScreenshotAs(OutputType.FILE);
        path = "./target/screenshots/" + source.getName();
        FileUtils.copyFile(source, new File(path)); 
    }
    catch(IOException e) {
        path = "Failed to capture screenshot: " + e.getMessage();
    }
    return path;
}
12 голосов
/ 07 мая 2012

Jython

import org.openqa.selenium.OutputType as OutputType
import org.apache.commons.io.FileUtils as FileUtils
import java.io.File as File
import org.openqa.selenium.firefox.FirefoxDriver as FirefoxDriver

self.driver = FirefoxDriver()
tempfile = self.driver.getScreenshotAs(OutputType.FILE)
FileUtils.copyFile(tempfile, File("C:\\screenshot.png"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...