Wednesday, June 26, 2013

How to take screenshot using Selenium WebDriver

There are several ways how to take screenshot using Selenium or some Java solutions.The easiest way is to use already defined in WebDriver method getScreenshotAs()


1. Take a screenshot with Selenium WebDriver (localhost machine):


[code language="java" gutter="true"]@Test
public void saveScreenShotTest(){
// Create FireFox driver instance.
// It's possible to create any browser instance you want e.g:
// InternetExplorerDriver InternetExplorerDriver = new InternetExplorerDriver();
FirefoxDriver firefoxDriver = new FirefoxDriver();

// start browser and open "http://www.skillim.com" page
firefoxDriver.navigate().to("http://www.skillim.com");

// FireFox driver and other drivers implement TakesScreenshot interface
// it means all of them they have getScreenshotAs() method
File screenShotFile = firefoxDriver.getScreenshotAs(OutputType.FILE);

// Our screenShotFile will be created somewhere in a system in a temp folder,
// but we need to move it in our project folder and give it a name
screenShotFile.renameTo(new File("screenshot.png").getAbsoluteFile());

// close browser
firefoxDriver.quit();

}[/code]
After script execution you will see new screenshot.png file in your project tree

take screenshot using Selenium


P.S. If You have faced with exception like:

[code language="java"]org.openqa.selenium.WebDriverException:
Cannot find firefox binary in PATH. Make sure firefox is installed. OS appears to be: VISTA
Build info: version: '2.29.0', revision: '58258c3', time: '2013-01-17 22:46:35'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1',
java.version: '1.6.0_20' Driver info: driver.version: FirefoxDriver
at org.openqa.selenium.firefox.internal.Executable.(Executable.java:69)
at org.openqa.selenium.firefox.FirefoxBinary.(FirefoxBinary.java:59)
at org.openqa.selenium.firefox.FirefoxBinary.(FirefoxBinary.java:55)
at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:92)
at test.MakeScreenShotTest.saveScreenShotTest(MakeScreenShotTest.java:22)[/code]
Try to change line:

[code language="java" firstline="7" gutter="true" tabsize="4"]FirefoxDriver firefoxDriver = new FirefoxDriver();[/code]
to line:

[code language="java" firstline="7" gutter="true"]FirefoxDriver firefoxDriver = new FirefoxDriver(new FirefoxBinary
(new File("c:\\Program Files\\Mozilla Firefox18\\firefox.exe")),new FirefoxProfile());[/code]
c:\\Program Files\\Mozilla Firefox18\\firefox.exe - path to firefox.exe file on your machine


2. Take a screenshot using Selenium/WebDriver from remote server:


Unfortunately, first example will not work, if you run tests remotely on a server using 'RemoteWebDriver':

In such case you can make screenshot in this way:


[code language="java" gutter="true" tabsize="4"]@Test
public void saveScreenShotTestFromRemoteMachine(){
WebDriver remoteWebDriver = null;
try{
remoteWebDriver=new RemoteWebDriver(new URL("http://192.168.111.105:4444/wd/hub"), new DesiredCapabilities());
}catch (MalformedURLException e) {
e.printStackTrace();
}
remoteWebDriver.navigate().to("http://www.skillim.com");
File screenShotFile=((TakesScreenshot)(new Augmenter().augment(remoteWebDriver))).getScreenshotAs(OutputType.FILE);

// Our screenShotFile will be created somewhere in a system in a temp folder, but we need to
// move it in our project folder and give it a name
screenShotFile.renameTo(new File("remoteWebDriverScreenShot.png").getAbsoluteFile());

// close browser in the end
remoteWebDriver.close();
}[/code]

We used Augmenter class to get WebDriver object, since RemoteWebDriver doesn't implement TakesScreenshot interface - it means we coulnd't cast RemoteWebDriver to TakesScreenshot and use it's getScreenshotAs() method.
New remoteWebDriverScreenShot.png file will appear in a project tree.

take screenshot using Selenium

No comments:

Post a Comment