Recommended Free Tools
Run Cypress in your workflow, then upload cypress/screenshots with actions/upload-artifact. Cypress captures an image when a test fails during cypress run unless screenshotOnRunFailure is disabled; add if: failure() to retain screenshots only for failed jobs.
The shortest working workflow
This workflow runs Cypress in Chrome and publishes screenshots from a failed run as a downloadable GitHub Actions artifact:
name: Cypress tests
on: [push, pull_request]
jobs:
cypress-run:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v7
- name: Cypress run
uses: cypress-io/github-action@v7
with:
build: npm run build
start: npm start
browser: chrome
- name: Upload Cypress screenshots
if: failure()
uses: actions/upload-artifact@v7
with:
name: cypress-screenshots
path: cypress/screenshots
if-no-files-found: ignore
The upload step must come after the Cypress step. if: failure() makes it run when an earlier step in the job has failed, instead of being skipped by normal GitHub Actions status behavior. if-no-files-found: ignore keeps a run without screenshots from producing an artifact warning or error. Remove the condition when you want to publish screenshots from successful runs too, for example when tests deliberately call cy.screenshot().
The maintained action and its artifact example are documented in the cypress-io/github-action README. Check the action major versions and runner image when maintaining an existing workflow, because those releases can change.
Free tools Windows power users keep installed
One-click scans. No signup required.
#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
How Cypress creates screenshots
Automatic images for failed tests
During cypress run, Cypress automatically captures a screenshot when a test fails. This behavior is controlled by screenshotOnRunFailure; leave it enabled (the normal default) unless your project intentionally turns it off. Failure files use Cypress’s normal naming scheme with (failed) appended.
Intentional checkpoints with cy.screenshot()
Call cy.screenshot() at a point that is useful for review:
describe('checkout', () => {
it('shows the payment step', () => {
cy.visit('/checkout')
cy.get('[data-cy=payment]').should('be.visible')
cy.screenshot('checkout/payment')
})
})
The name is placed below the screenshots directory, and Cypress creates nested directories when needed. If the same name is used more than once, Cypress adds (1), (2), and so on. Pass { overwrite: true } when replacing an existing file is intentional:
cy.screenshot('login-page', { overwrite: true })
Screenshot capture is asynchronous and takes around 100 ms according to the API guidance, so a screenshot can reflect a small amount of UI change after the command is issued. Assert the state you need before taking it.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problemsDefault location and cleanup
Cypress writes screenshots to cypress/screenshots by default. Before a run, Cypress clears that directory unless trashAssetsBeforeRuns is set to false. Do not expect files from a previous workflow run to still be present; upload the directory generated by the current job.
These generated files should normally be ignored by Git:
Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
cypress/screenshots/
cypress/videos/
Keep them in workflow artifacts or Cypress Cloud instead of committing them to the repository. See Cypress’s guidance on screenshots and videos and organizing tests.
Set up the job reliably
1. Make the application available
The maintained action can build and start your application for the test. Replace the example scripts with the commands in your project. The start command must leave a server running for Cypress to visit; if it exits immediately, Cypress will have no page to capture.
2. Select the browser explicitly
browser: chrome makes the workflow’s browser choice visible and reproducible. Use a browser installed on the selected runner and keep the choice consistent when comparing screenshots.
3. Upload after Cypress finishes
The directory does not exist until Cypress has produced an image. Placing the artifact step before the test step therefore uploads nothing. The failure condition shown above still executes after a failed Cypress command.
4. Preserve evidence without failing an otherwise useful run
Use if-no-files-found: ignore when screenshots are optional. A passing run with no explicit screenshots should not fail merely because there is nothing to archive. If every run is required to produce an image, use the default error behavior instead and treat a missing directory as a workflow defect.
Failure-only retention versus every-run retention
| Goal | Upload condition | Typical use |
|---|---|---|
| Keep only diagnostic images | if: failure() |
Automatic failure screenshots without storing routine runs |
| Keep deliberate checkpoints from all runs | No if condition |
Visual evidence produced by cy.screenshot() on successful tests |
| Require an image on every run | No condition; omit if-no-files-found: ignore |
Repositories where an absent artifact indicates a test or workflow error |
GitHub artifacts are tied to an individual workflow run. Reviewers can download the PNG files from that run, subject to the repository’s artifact-retention and access settings. GitHub documents the upload and download actions in its workflow-artifacts guide.
Rank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
Understand names and paths before scripting around them
Named screenshots give you stable intent-based paths such as cypress/screenshots/checkout/payment.png. Failure screenshots follow Cypress’s generated naming convention. Asset paths mirror the spec structure after Cypress removes the common ancestor; changing which specs are included can therefore change the relative path. If another job consumes the files, archive the whole cypress/screenshots tree rather than depending on one generated filename.
For a predictable machine-readable file, use an explicit name and overwrite: true, and make sure the test does not call that name concurrently from multiple processes.
GitHub artifacts or Cypress Cloud?
| Consideration | GitHub Actions artifact | Cypress Cloud |
|---|---|---|
| Storage model | Files attached to one workflow run | Hosted test history across runs |
| Review experience | Downloadable PNGs (and optionally videos) | Shareable reports, screenshots, videos, Test Replay and contextual failure details |
| Best fit | Lightweight evidence for pull requests or a single run | Centralized history, replay and cross-run debugging for a team |
| Configuration | Add actions/upload-artifact after Cypress |
Follow Cypress’s Cloud integration and recording setup |
Cypress presents Cloud as an optional hosted review layer in its GitHub Actions guide. You can use artifacts alone, Cloud alone, or both when local run files and centralized history serve different audiences. Compare retention requirements, storage cost, and whether reviewers need replay rather than just an image.
Troubleshooting common failures
No artifact appears after a failed test
- Confirm the upload step follows the Cypress action and uses
if: failure(). Without the condition, GitHub may skip the step after a failure. - Inspect the job log for the actual screenshot directory. A custom Cypress configuration may change the location; update the artifact
pathto match. - Check whether
screenshotOnRunFailurewas disabled. If it is off and no test callscy.screenshot(), there is legitimately no file.
The upload step reports no files
A passing run with no explicit screenshot is expected to have an empty directory. Keep if-no-files-found: ignore for optional evidence. If an image was required, add an explicit cy.screenshot(), verify that the test reached the command, and remove the ignore setting so the missing file is visible.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteThe application never starts
Check the build and start commands independently on the same Node.js environment. A start command that exits, binds only to an inaccessible host, or listens on a different port prevents Cypress from reaching the page and can lead to a timeout rather than a useful page screenshot.
The screenshot shows an intermediate state
Wait for the application condition that matters, then capture. For example, assert a selector is visible or contains the expected text immediately before cy.screenshot(). Remember that capture is asynchronous and is not a substitute for an assertion.
Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
Paths changed between runs
This is expected when the set of specs changes because Cypress derives paths after removing their common ancestor. Consume the artifact directory recursively, or assign stable names to screenshots that another process must find.
Old images are mixed with new images
Cypress normally clears screenshot assets before cypress run. If your configuration sets trashAssetsBeforeRuns: false, clean the directory yourself or use a run-specific artifact path so stale files cannot be mistaken for current evidence.
Performance, cost and security considerations
- Each deliberate screenshot adds capture work (the API documentation describes roughly 100 ms), so reserve checkpoints for states that help diagnose or review behavior.
- Failure-only uploads reduce artifact volume when routine runs do not need images. Every-run uploads are useful for visual checkpoints but consume more storage and may increase download time.
- Artifacts can expose page content, test data or tokens rendered in the UI. Restrict repository access appropriately and avoid capturing secrets; artifact permissions follow the repository and workflow’s access controls.
- Do not commit generated screenshots or videos. Artifact retention and deletion are controlled by GitHub repository or organization settings, so choose those settings to meet your team’s debugging and compliance needs.
Or skip the browser setup
If you need a clean screenshot of a URL outside the Cypress test itself, ScreenshotNeo is a website screenshot API and MCP server. It accepts consent banners like a visitor, removes more than 60 known consent platforms plus newsletter popups and chat widgets before capture, and bills only clean shots. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads and cache hits cost nothing; response headers identify the page verdict and whether it was billed.
One GET request returns PNG, JPEG, WebP or PDF. The API supports full-page captures with lazy images loaded, CSS-selector element capture, dark mode, 12 device presets or a custom viewport, retina scale, PDF paper size/margins/orientation/page ranges, HTML/CSS-to-image, custom JavaScript and CSS, pre-capture clicks, hidden selectors, waits for a selector, delay or network idle, blocked ads/trackers/requests/resource types, custom headers/cookies/user agent/Authorization, timezone and geolocation, transparent backgrounds, resizing, configurable-TTL caching, signed image links, asynchronous jobs with signed webhooks, bulk capture of 100 URLs per call, a usage API and an OpenAPI specification. Parameter names used by other screenshot APIs also work to ease migration. Every feature is included on every plan.
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}`);
See the ScreenshotNeo API documentation for response headers, output formats and option names. Its MCP server exposes take_screenshot, get_page_info and capture_pdf to Claude, Cursor and other MCP clients, so an AI agent can request captures without you wiring browser automation into the workflow.
| 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. The free tier includes 1,000 screenshots each month with no card, and paid plans start at $5 for 3,000. Create a free ScreenshotNeo account to try it.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
FAQ
Can I download an artifact from a pull-request run?
Yes. Open the completed workflow run in GitHub and use its artifact section to download the named archive, provided your repository permissions allow access.
Best Value
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
Should I upload videos in the same step?
No. Use a separate actions/upload-artifact step with path: cypress/videos if video review is required; keeping screenshots and videos as separate artifacts makes each download smaller and easier to identify.
Does cy.screenshot() wait for network idle automatically?
No. Cypress captures the browser state when the command runs. Add the application-specific assertions or waits needed to establish the state you want before issuing the command.
Frequently Asked Questions
Can I download an artifact from a pull-request run?
Yes. Open the completed workflow run in GitHub and use its artifact section to download the named archive, provided your repository permissions allow access.
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Repair Windows errors before they cause bigger problemsFix Now →Should I upload videos in the same step?
No. Use a separate actions/upload-artifact step with path: cypress/videos if video review is required; separate artifacts keep downloads easier to identify.
Does cy.screenshot() wait for network idle automatically?
No. Add the assertions or waits needed to establish the desired application state before issuing the command.
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.

