How to take a screenshot in selenium webdriver?

In Following article we are going to see how to take screenshot in selenium webdriver. I am using c# with VS2010.

Screenshot is a very important factor while testing in selenium. When ever any important functions need to be tested, we should take screenshot after testing . We may use this to take  screenshot after fail a test case or, to validate a test from previous reference or, to keep log of test results. lets start.
[Please follow my introductory selenium setup post to know about the basic selenium setup.]


Step 1 : After initializing driver , make a screenshot type variable (myScreen).

private Screenshot myScreen;

Step 2 : In the test method, After a test, assign myScreen by Casting the driver with ITakesScreenshot interface and call GetScreenshot()
myScreen = ((ITakesScreenshot)driver).GetScreenshot();

Step 3: Save the screenshot that we have taken.
myScreen.SaveAsFile(@"F:\ShantonuTest.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

So, For better understanding , I am pasting my full test code here

[Test]
public void TestHome()
{
driver.Navigate().GoToUrl(path);
Assert.AreEqual("Software Development Outsourcing. Offshore Software Development Company - Kaz Software", driver.Title);
myScreen = ((ITakesScreenshot)driver).GetScreenshot();
myScreen.SaveAsFile(@"F:\ShantonuTest.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
}
Note : We can skip step1, 2 and 3 by doing all together inside the test method.
 ((ITakesScreenshot) driver).GetScreenshot().SaveAsFile(@"F:\ShantonuTest.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

After the test method execution, my screenshot was found in f:\


In here we have used the

1. GetScreenshot() - takes no parameter but returns a OpenQA.Selenium.Screenshot object containing the image.

2. SaveAsFile("FullPathWithFileName", [System.Drawing.Imaging.ImageFormat object indicating file format]) -Takes two parameter but gives no output.

A Screenshot type object(myScreen from step 1) have extra following property
-myScreen.AsByteArray
We can use it to get the value of the screenshot image as an array of bytes.

-myScreen.AsBase64EncodedString
We can use it to get current System.Object as String (System.String type)

....Thanks...:)...