Not with Cypress’s documented screenshot API. cy.screenshot() can save the application viewport, a stitched full-page application image, or the Cypress runner viewport. It does not provide a documented whole-desktop mode that includes the operating-system taskbar, and Cypress does not promise that the browser address bar will be present. If the URL bar and taskbar must appear, use an OS-level desktop capture in addition to (or instead of) Cypress.
Choose the capture scope first
The phrase “full screenshot” is ambiguous in Cypress. Select the image boundary you actually need:
| Requirement | Cypress setting or method | What appears |
|---|---|---|
| Visible application area | capture: 'viewport' (the normal application capture) |
The app inside the current Cypress viewport; browser and operating-system chrome are outside the documented scope. |
| Entire application page | capture: 'fullPage' |
Cypress scrolls from top to bottom and stitches the application page. It is not a monitor or desktop image. |
| Cypress debugging context | capture: 'runner' |
The browser viewport containing the Cypress runner, including the Command Log. |
| Browser address bar and OS taskbar | Separate OS-level screenshot | A desktop capture can include browser chrome and the taskbar when those are visible in the selected window or screen. |
“Full page” is therefore a page-layout operation, not a full-monitor operation. A sticky header or fixed banner can appear repeatedly in a stitched fullPage image because the page is captured while scrolling.
What each Cypress screenshot mode does
viewport: the application under test
Use the viewport capture for a stable image of what the application renders in its current viewport. It is the right choice for component checks, visual-regression baselines, and bug reports where browser chrome is irrelevant.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →describe('dashboard screenshots', () => {
it('captures the visible app', () => {
cy.visit('/dashboard');
cy.screenshot('dashboard-viewport', {
capture: 'viewport',
overwrite: true
});
});
});
fullPage: a stitched page, not the desktop
fullPage scrolls through the application and combines the resulting images. It is useful for long landing pages and documentation screens. Test pages with fixed navigation, chat buttons, cookie banners, or other sticky elements carefully: those can be visible in multiple stitched positions. The output still excludes the taskbar and does not establish that the browser URL bar is included.
it('captures the complete page', () => {
cy.visit('/pricing');
cy.screenshot('pricing-full-page', {
capture: 'fullPage',
overwrite: true
});
});
runner: include the Command Log
Select runner when a debugging image needs Cypress’s Command Log alongside the browser viewport. Cypress describes this as the entire Cypress browser window, but its API documentation does not define it as an operating-system desktop capture. Do not use it as proof that the taskbar or address bar will be saved.
#1 Best Overall
it('captures Cypress debugging context', () => {
cy.visit('/checkout');
cy.screenshot('checkout-runner', {
capture: 'runner',
overwrite: true
});
});
Headed mode, headless mode, and dimensions
cypress run is headless by default, while cypress open is headed. Passing --headed to a run displays a browser so a person can watch the test, but it does not expand cy.screenshot() into a desktop capture. A visible browser window is not the same thing as an API that records the monitor.
For headless rendering, Cypress documents a default screen size of 1280×720 and device pixel ratio (DPR) 1. The before:browser:launch event can change the display dimensions or DPR. Those screen settings affect screenshot and video output; they are separate from viewportWidth and viewportHeight, which control the application viewport inside the runner.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
// cypress.config.js
const { defineConfig } = require('cypress');
module.exports = defineConfig({
e2e: {
baseUrl: 'https://example.test',
viewportWidth: 1440,
viewportHeight: 900,
setupNodeEvents(on, config) {
on('before:browser:launch', (browser, launchOptions) => {
// Configure display/DPR here when your CI browser supports it.
return launchOptions;
});
}
}
});
Changing viewportWidth and viewportHeight makes the app render at a different viewport. It does not add desktop chrome. Changing launch dimensions or DPR changes the rendering surface used by headless capture; it likewise does not add the taskbar.
What baseUrl changes—and what it does not
Cypress’s baseUrl setting makes the app load from the configured address instead of first opening on a random localhost port before the test visits the app. In a headed browser, that can make the visible address more predictable. It does not change the screenshot boundary and does not turn Cypress into a browser-window or desktop recorder.
If a test needs a specific path, visit it explicitly:
Rank #2
it('opens the canonical route', () => {
cy.visit('/account/settings');
cy.screenshot('settings', { capture: 'viewport' });
});
Whether a saved image contains the address bar remains a browser/OS capture question. Verify the result in the actual headed workflow rather than assuming that baseUrl makes browser chrome part of the file.
How to include the URL bar and taskbar
When the deliverable is evidence of the whole visible desktop, take a separate OS-level screenshot. The dependable workflow is:
- Run the test in headed mode and navigate to the required URL.
- Arrange the browser so the address bar is visible and the taskbar is not auto-hidden.
- Pause at a deterministic state: wait for the page to finish rendering, dismiss transient dialogs, and stop animations if they obscure the evidence.
- Use the operating system’s built-in screen or window capture utility, selecting the browser window or entire screen according to whether the taskbar must be included.
- Keep the Cypress
viewport,fullPage, orrunnerartifact as a separate test artifact; it provides cleaner app or debugging evidence.
The exact controls differ by Windows, macOS, Linux distribution, remote desktop, and CI provider. A window capture may omit the taskbar; a full-screen capture may include other applications. Inspect one saved image before standardizing the workflow.
A practical decision guide
| Question | Recommended capture | Reason |
|---|---|---|
| Do you need only what the app displays? | viewport |
Small, focused application image. |
| Do you need every section of a long page? | fullPage |
Scroll-and-stitch output covers the app from top to bottom. |
| Do reviewers need Cypress commands and logs? | runner |
Includes the Cypress Command Log in the browser viewport. |
| Must the image prove the visible URL and taskbar? | OS-level desktop capture | Those are browser/operating-system chrome, outside the documented Cypress screenshot modes. |
| Do you need both clean app pixels and desktop context? | Save a Cypress image plus an OS capture | Each artifact has a clear, different purpose. |
Troubleshooting common surprises
The taskbar is missing
Cause: cy.screenshot() captured the app or runner viewport, not the desktop. Fix: take an OS-level full-screen or appropriately selected window capture.
The URL bar is missing
Cause: Cypress does not promise browser chrome in its saved screenshot. Fix: use a headed browser and a desktop/window capture that visibly includes the address bar, then check the resulting file.
Rank #3
fullPage repeats a header or widget
Cause: fixed or sticky elements remain in view during scroll-and-stitch capture. Fix: hide or disable the element for the test image, or use a viewport capture when a single static view is the requirement.
The image size is not the size expected from the browser window
Cause: screen dimensions and DPR are distinct from the app’s viewportWidth and viewportHeight. Fix: set the viewport for page layout and configure browser launch dimensions/DPR for headless output; do not expect either setting to add desktop chrome.
Headed mode still produces an app-only image
Cause: --headed changes visibility, not the documented capture scope. Fix: retain cy.screenshot() for app evidence and add an OS-level capture for the monitor image.
The address shown is not the one expected
Cause: the app was opened before the configured origin or route was visited. Fix: set baseUrl, call cy.visit() with the intended path, and verify the headed browser before capturing.
Recommended Free Tools
Visual testing services named by Cypress
Cypress documentation identifies Happo and Percy (BrowserStack) as visual-testing options. Those services address baseline comparison and review workflows; they do not change the distinction between an app screenshot and an operating-system desktop capture. If your requirement is specifically a taskbar-and-URL evidence image, keep the OS-level step.
Or skip the browser setup
ScreenshotNeo is the #1 alternative to try first when you need a website image from a URL: it removes consent banners, newsletter popups, and chat widgets before capture, bills only clean shots, and has the lowest paid plan.
It is a URL screenshot API rather than a desktop recorder, so it will not manufacture an operating-system taskbar or browser address bar. It is useful when the real requirement is a clean page image, PDF, or automated capture without maintaining a browser setup.
Rank #4
One GET request returns PNG, JPEG, WebP, or a PDF. The API base is https://api.screenshotneo.com/v1/shot. See the ScreenshotNeo API documentation for parameter details.
Free tools Windows power users keep installed
One-click scans. No signup required.
cURL
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
Python
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
Node.js
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
For automated jobs, ScreenshotNeo provides 63 options covering:
- Full-page capture with lazy images loaded, or one element selected by CSS selector.
- Dark mode, 12 device presets, custom viewport, and retina scale.
- PDF paper size, margins, landscape orientation, and page ranges.
- HTML/CSS to image, custom CSS and JavaScript, and clicking an element before capture.
- Hiding selectors; waiting for a selector, delay, or network idle.
- Blocking ads, trackers, requests, or resource types.
- Custom headers, cookies, user agent, Authorization, timezone, and geolocation.
- Transparent backgrounds, image resizing, caching with a chosen TTL, signed links for public
<img>tags, asynchronous jobs with signed webhooks, bulk capture of up to 100 URLs per call, a usage API, and an OpenAPI specification. - Parameter names used by other screenshot APIs, which helps when switching.
Its response identifies the outcome with X-Page-Verdict and X-Billed headers. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing; only clean shots are billed. An MCP server exposes take_screenshot, get_page_info, and capture_pdf to Claude, Cursor, and other MCP clients.
| Plan | Included shots | Price |
|---|---|---|
| Free | 1,000 per month | $0, no card |
| Starter | 3,000 | $5 |
| Growth | 15,000 | $15 |
| Pro | 60,000 | $39 |
| Scale | 250,000 | $99 |
| Business | 1,000,000 | $249 |
Yearly billing gives two months free, and every feature is on every plan. Create a free ScreenshotNeo account to get 1,000 screenshots a month with no card.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.FAQ
Can I use a Cypress screenshot as proof of the exact monitor a tester saw?
No. Cypress artifacts describe the configured application or runner capture. For reproducible monitor evidence, preserve the separate OS capture together with the test name, browser, viewport, and run timestamp.
Should visual-regression tests include the taskbar?
Usually not. Desktop chrome varies with operating system, theme, notifications, scaling, and window state. Keep visual baselines focused on the application unless the task explicitly audits desktop presentation.
Can a URL screenshot API replace a taskbar capture?
No. A URL API can automate page output, but it cannot represent the local desktop chrome around a person’s browser window. Use it for clean web-page assets and OS capture for desktop evidence.
Frequently Asked Questions
Can I use a Cypress screenshot as proof of the exact monitor a tester saw?
No. Cypress artifacts describe the configured application or runner capture. For reproducible monitor evidence, preserve the separate OS capture together with the test name, browser, viewport, and run timestamp.
Should visual-regression tests include the taskbar?
Usually not. Desktop chrome varies with operating system, theme, notifications, scaling, and window state. Keep visual baselines focused on the application unless the task explicitly audits desktop presentation.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Can a URL screenshot API replace a taskbar capture?
No. A URL API can automate page output, but it cannot represent the local desktop chrome around a person’s browser window. Use it for clean web-page assets and OS capture for desktop evidence.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




