Best way to take screenshots of tests in Selenium 2?

C#SeleniumScreenshotFunctional TestingWebdriver

C# Problem Overview


I need a way to take screenshots of my functional tests. Right now I'm using Selenium 2 with C# bindings. I pretty much want to take a screenshot at the end of the test to make sure the desired page is displayed. Are there any particular tools you guys know of that I can incorporate into my C# code that will trigger a screenshot? I couldn't find a built-in Selenium 2 solution (without looking it over).

C# Solutions


Solution 1 - C#

To do screenshots in Selenium 2 you need to do the following

driver = new FireFoxDriver(); // Should work in other Browser Drivers
driver.Navigate().GoToUrl("http://www.theautomatedtester.co.uk");
Screenshot ss = ((ITakesScreenshot) driver).GetScreenshot();

//Use it as you want now
string screenshot = ss.AsBase64EncodedString;
byte[] screenshotAsByteArray = ss.AsByteArray;
ss.SaveAsFile("filename", ImageFormat.Png); //use any of the built in image formating
ss.ToString();//same as string screenshot = ss.AsBase64EncodedString;

That code should work, as I quickly tested it in IronPython Repl. See the IronPython code below

import clr
clr.AddReference("WebDriver.Common.dll")
clr.AddReference("WebDriver.Firefox.dll")
from OpenQA.Selenium import *
from OpenQA.Selenium.Firefox import *
driver = FirefoxDriver()
driver.Navigate().GoToUrl("http://www.theautomatedtester.co.uk")
s = driver.GetScreenshot()
s.AsBaseEncodedString
# HUGE string appears in the REPL

Solution 2 - C#

var driver = new InternetExplorerDriver();
driver.Navigate().GoToUrl("http://www.google.com");
var ss = driver.GetScreenshot();   
ss.SaveAsFile("ss.png", System.Drawing.Imaging.ImageFormat.Png);

Solution 3 - C#

I don't know if it matters, but I ended up having to cast the driver when i was writing in c#.

something like:

Screenshot ss = ((ITakesScreenshot)driver).GetScreenshot();

Solution 4 - C#

Just use the extension method TakeScreenshot() in one line of code.

IWebDriver driver = new InternetExplorerDriver();
driver.Navigate().GoToUrl("Your_Homepage_Url");

driver.TakeScreenshot().SaveAsFile("file_name_string", ImageFormat.Jpeg);

Solution 5 - C#

  1. Add a reference of System.Drawing in your solution/project.

  2. Use System.Drawing.Imaging namespace in your test.

Here I am capturing the screen shot of Facebook Home page.

using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using NUnit.Framework;
using System.IO;
using System.Collections;
using System.Drawing.Imaging;

namespace FacebookRegistrationUsingC_Sharp
{
    [TestFixture]
    public class ScreenShot
    {
        IWebDriver driver = null;
        IWebElement element = null;

        [SetUp]
        public void SetUp()
        {
            driver = new ChromeDriver("G:\\Selenium_Csharp\\Jar\\chromedriver_win32");           
            driver.Navigate().GoToUrl("https://www.Facebook.com");
            driver.Manage().Window.Maximize();

        }
        [Test]
        public void TestScreenShot()
        {           
                
            Screenshot ss = ((ITakesScreenshot)driver).GetScreenshot();
            ss.SaveAsFile("e:\\pande", System.Drawing.Imaging.ImageFormat.Jpeg);
        }

        [TearDown]
        public void TearDown()
        {
            driver = null;
            element = null;
        }
    }
}

Solution 6 - C#

public void TakeScreenshot(string saveLocation) {
        var location = GetPath() + _name + "\\" + saveLocation + ".png";
        var ssdriver = _driver as ITakesScreenshot;
        var screenshot = ssdriver.GetScreenshot();
        screenshot.SaveAsFile(location, ImageFormat.Png);
    }

This code will help you to take screen shot

Solution 7 - C#

JAVA

protected void fullPageScreenshot(String testname) {
            String timeStamp = new SimpleDateFormat("dd_MM_yyyy_HH_mm_ss").format(Calendar.getInstance().getTime());
            String imageName = testname + "-" + timeStamp + ".png";
            Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(2000))
                    .takeScreenshot(DriverManager.getDriver());
            try {
                ImageIO.write(screenshot.getImage(), "PNG", new File("./FullPage_Screenshots/" + imageName));
            } catch (Exception e) {
                System.out.println("Capturing FullPage Screenshot failed");
            }
        }

use Ashot library to take fullpage screenshots - even where pages needs to be scrolled https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot/1.5.4

Solution 8 - C#

Use System.Drawing.Imaging reference. Following code can be used for taking screenshot.

IWebDriver driver = new FirefoxDriver();
ITakesScreenshot screenshotDriver = driver as ITakesScreenshot;
Screenshot screenshot = screenshotDriver.GetScreenshot();
String fp = "D:\\" + "snapshot" + "_"+ DateTime.Now.ToString("dd_MMMM_hh_mm_ss_tt") + ".png";
screenshot.SaveAsFile(fp, ImageFormat.Png);

Notes: Timestamp has two advantages:

  1. You'll get to know the perfect DateTime when screenshot is taken.
  2. SaveAsFile function overwrites the existing file. So, DateTime can help for different file creation.

Solution 9 - C#

        ScreenCaptureJob scj;
        scj = new ScreenCaptureJob();
        // Specify the path & file name in which you want to save         
        scj.OutputScreenCaptureFileName = @"C:\Users\jpavankumar\Desktop\Screencaptuere\ScreenRecording4.wmv";
        // Start the Screen Capture Job
        scj.Start(); scj.Stop();

Try this code out here ... hope it will be useful to you .... !

Solution 10 - C#

driver.Url = "https://www.amazon.in/";
//Store image in bin folder
((ITakesScreenshot)driver).GetScreenshot().SaveAsFile("CurrentPage.png"); 
//Store image in D drive        
((ITakesScreenshot)driver).GetScreenshot().SaveAsFile(@"D:\CurrentPage.png");

Solution 11 - C#

Define this in global code :

var counter = DateTime.Now.Ticks.ToString();

((ITakesScreenshot)driver).GetScreenshot().SaveAsFile((snap +counter + ".jpg").ToString(), OpenQA.Selenium.ScreenshotImageFormat.Jpeg);
test.Log(LogStatus.Fail, "Snapshot below: " + test.AddScreenCapture(snap + counter + ".jpg"));

Solution 12 - C#

Best way to take screenshot and store in the file location in a generic way in python :

def screenShots(self):
        fileName= NewFile + "." + str(round(time.time() * 1000)) + ".png"
        screenshotDirectory = "../screenshot/"  #Move to that directory where you want ot store the screenshot
        relativeFileName = screenshotDirectory + fileName
        currentDirectory = os.path.dirname(__file__)
        destinationFile = os.path.join(currentDirectory,relativeFileName)
        destinationDirectory = os.path.join(currentDirectory,screenshotDirectory)
        
        try:
            if not os.path.exists(destinationDirectory):
                os.makedirs(destinationDirectory)
            self.driver.save_screenshot(destinationFile)
            
            self.log.info("Screenshot saved to directory" + destinationFile)
            
        except:
            self.log.error("Exception Occured")
            print_stack()

Solution 13 - C#

Using selenium there were two calls I was familiar with: captureEntirePageScreenshot and captureScreenshot. You might want to look into those calls to see if they'll accomplish what you're after.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJamesView Question on Stackoverflow
Solution 1 - C#AutomatedTesterView Answer on Stackoverflow
Solution 2 - C#ToolkitView Answer on Stackoverflow
Solution 3 - C#user800612View Answer on Stackoverflow
Solution 4 - C#DeebView Answer on Stackoverflow
Solution 5 - C#Avinash PandeView Answer on Stackoverflow
Solution 6 - C#ShekharView Answer on Stackoverflow
Solution 7 - C#Rahul RanaView Answer on Stackoverflow
Solution 8 - C#Kalpesh BhuptaView Answer on Stackoverflow
Solution 9 - C#J S V G Pavan KumarView Answer on Stackoverflow
Solution 10 - C#Balaji DinakaranView Answer on Stackoverflow
Solution 11 - C#PriyankaView Answer on Stackoverflow
Solution 12 - C#Deepak ChhetriView Answer on Stackoverflow
Solution 13 - C#Bobby BView Answer on Stackoverflow