[selenium] Selenium WebDriver로 스크린 샷을 찍는 방법

Selenium WebDriver를 사용하여 스크린 샷을 찍을 수 있는지 아는 사람이 있습니까? (참고 : 셀레늄 RC가 아님)



답변

자바

네 가능합니다. 다음 예제는 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"));


답변

파이썬

각 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()(이진 데이터 검색 ) 메소드도 있습니다 .

WebElement에는 .screenshot()유사하게 작동하지만 선택한 요소 만 캡처 하는 메소드가 있습니다.


답변

씨#

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


답변

자바 스크립트 (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);
   });
});


답변

루비

require 'rubygems'
require 'selenium-webdriver'

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

더 많은 파일 유형과 옵션을 사용할 수 있으며 takes_screenshot.rb에서 볼 수 있습니다


답변

자바

이 문제가 해결되었습니다. RemoteWebDriver프록시 드라이버가 구현하는 모든 인터페이스를 제공 하도록를 보강 할 수 있습니다 .

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


답변

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