Issue
How to take a screenshot of the entire web page (full-page screenshot), not only partial (top-to-bottom) using Selenium WebDriver?
My code: (Java bindings)
System.setProperty("webdriver.chrome.driver","/home/alex/Downloads/chromedriver_linux64/chromedriver");
WebDriver driver = new ChromeDriver();
driver.get("http://google.com");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File(RESULT_FILENAME));
Any ideas on how to tackle this?
Solution
LE: I see quite a lot of people are interested in the full-page screenshot, so I thought I might update the answer with some positives (silver bullets).
There are quite a handful of web testing frameworks that can (with minimal setup & effort) produce a full-page screenshot. I come from a NodeJS testing environment, so I can only vouch the following: WebdriverIO & Google's Puppeteer.
If anyone is interested in an easy way to do it with WebdriverIO, check this answer.
Short answer is NO, YOU CANNOT, if you're only using Selenium (detailed reason bellow). But, what you can do is make the most out of your device's(monitor) viewport.
So, start your browser instance (driver) using ChromeOptions()
, which is the method for setting ChromeDriver-specific capabilities. We can do the following:
- maximize the window (using the
--start-maximized
switch); - go full-screen (
F11
-key on Windows,Control+Cmd+F
on Mac, using the--start-fullscreen
switch). - Note: complete list of Chrome command-line-switches can be found here.
Your code should look like this:
// Setting your Chrome options (Desired capabilities)
ChromeOptions options = new ChromeOptions();
options.add_argument('--start-maximized');
options.add_argument('--start-fullscreen');
// Creating a driver instance with the previous capabilities
WebDriver driver = new ChromeDriver(options);
// Load page & take screenshot of full-screen page
driver.get("http://google.com");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
Now regarding the full page problem, all drivers (chromedriver
, geckodriver
, IEDriver
, EdgeDriver
, etc.) are implementing the WebDriver W3C standard. Thus, they are dependent on the way the WebDriver team wants to expose the functionality of different features, in our case, 'Take Screenshot'.
If you read the definition, it clearly states the following:
The Take Screenshot command takes a screenshot of the top-level browsing context’s VIEWPORT.
Legacy-wise, some drivers were able to produce a full-page screenshot (read more about it here), like the old FirefoxDriver, IEDriver, etc. That is no longer the case as they now all implement (to the letter) the WebDriver W3C standard.
Answered By - iamdanchiv
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.