Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

To get reliable Cypress visual snapshots of lazy-loaded content, trigger the load—usually by scrolling the section into view—then wait for the request or a meaningful UI signal, assert the expected content is present, and only then take the snapshot. A DOM query alone does not scroll an element into view, and cy.visit() waiting for the page load event does not guarantee that later asynchronous content has finished rendering.

Why lazy-loaded content goes missing from Cypress screenshots

A screenshot records the page’s pixels at one moment. If content is still loading, layout is changing, or an animation is in progress, the capture may show an intermediate state and create a false visual failure. Cypress’s guidance is to confirm the page has stopped changing before taking a snapshot.

cy.visit() waits for the browser’s load event; it does not automatically wait for every later XHR or Ajax request. Content that loads only after scrolling may not even start its request until the relevant area approaches the viewport. Querying an element with cy.get() does not, by itself, scroll it into view.

Cypress states the core practice plainly: “Best Practice: Take a snapshot only after you confirm the page is done changing.” See Cypress’s visual testing guide.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall

A reliable sequence for lazy-loaded visual snapshots

  1. Control the data. Stub changing API responses with a fixture where practical, so the same content is used on baseline and comparison runs.
  2. Visit the page and identify the trigger. Determine whether content loads on scroll, intersection, a button click, or another application event.
  3. Trigger the load deliberately. Scroll the relevant section or target into view, or perform the action the application requires.
  4. Wait for the specific request or readiness signal. Alias the request with cy.intercept() and wait for it, or assert an app-level signal such as a loading indicator disappearing or a stable state attribute.
  5. Assert the visual state. Check that the expected content is present and, when relevant, that the loading state has ended.
  6. Capture immediately after the assertion. Put the snapshot command after the retryable assertion that establishes the state you intend to compare.

Adapt this example’s route, fixture, selectors, item count, and snapshot command to the application and visual-testing plugin in use:

cy.intercept('GET', '/api/products*', { fixture: 'products.json' }).as('products')
cy.visit('/catalog')
cy.get('[data-testid="deferred-section"]').scrollIntoView()
cy.wait('@products')
cy.get('[data-testid="product-card"]').should('have.length', 3)
cy.get('[data-testid="deferred-section"]').then(($section) => {
  // Invoke the project's visual snapshot command here.
})

This is a pattern, not a universal drop-in recipe: the request URL and the way the page signals readiness depend on the application. If the section has a loading indicator or a stable readiness attribute, assert that condition too. Cypress recommends explicit route waits and retryable assertions rather than fixed-duration waits.

What a request wait does—and does not—prove

cy.wait('@products') confirms the aliased request completed; it does not prove that every image has decoded, fonts have rendered, layout has settled, or animations have ended. If the captured layout depends on image loading, establish an application-level readiness signal or assert the relevant image or UI condition before taking the snapshot. Cypress’s reviewed guidance does not prescribe one universal lazy-image readiness API.

Rank #2
Network LAN Cable Tester, VDV Tester, LAN Explorer with Remote
  • Cable tester with single button testing of RJ11, RJ12 and RJ45 terminated voice and data cables
  • Tests CAT3, CAT5e and CAT6/6A cables
  • Fast LED responses indicate cable status (Pass, Miswire, Open-Fault, Short-Fault, and Shield)
  • Test remote stores securely in tester body
  • Compact tester easily fits in your pocket

Likewise, Cypress’s waitForAnimations and animationDistanceThreshold options apply to action commands such as clicks. They do not freeze an unrelated animation elsewhere on the page for a screenshot.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Make visual comparisons repeatable

  • Use the same viewport and consistent browser, operating system, and font environment for baseline and comparison runs.
  • Stub variable API data and wait for the request that supplies the state under test.
  • Reduce or complete animations in the test environment where practical; action-command animation settings do not freeze the whole page.
  • Mask a small, genuinely uncontrollable region rather than weakening the comparison threshold across the whole page.
  • Prefer component or element snapshots for focused regressions. Reserve full-page captures for checks where page-level layout is the behavior being tested; full-page images can include unrelated changes that are harder to review.
  • Check the visual plugin’s compatibility with the project’s Cypress version. The Cypress plugin directory lists version and compatibility information for listed packages.

Choose a visual-testing workflow that fits the test

Cypress describes two broad approaches: open-source plugins that capture and compare screenshots locally or in CI, often against baselines stored with code, and hosted visual-testing services that may render in cloud infrastructure and provide review workflows. The products below are examples from Cypress documentation, not an independent performance or feature comparison.

Option Cypress documentation describes
Chromatic Capturing an archive during Cypress tests, then rendering and diffing it in its cloud.
Happo Full-page and component snapshots across browsers and sizes.
LambdaTest SmartUI Comparison across browsers and resolutions.
Percy DOM snapshots rendered across browsers and responsive widths.
Sauce Labs Visual Managed baseline creation, region ignoring, and DOM capture.
SmartBear VisualTest Full-page, element, and multi-device captures.
Wopee.io Baseline management and review on its platform.

Compare tools by where rendering and comparison run, whether capture is component-level or full-page, the available browsers and viewport sizes, baseline review and masking workflow, and whether the team wants images and comparison infrastructure in its own code and CI or in a hosted workflow. Verify current plugin compatibility before adopting one.

Or skip the browser setup

For a standalone website screenshot rather than a Cypress baseline workflow, ScreenshotNeo offers a screenshot API and MCP server. Its API can return a screenshot or PDF with one GET request; see the API documentation.

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

ScreenshotNeo accepts cookie or consent banners like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing, and response headers report the page verdict and billing status. Its MCP server gives AI agents tools for screenshots, page information, and PDF capture. The free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Sign up for 1,000 free screenshots a month, with no card required.

Troubleshooting missing or unstable content

The content is absent even though the test queried its selector

A query does not trigger viewport-based loading. Scroll the section into view or perform the application’s actual trigger, then wait for its request or readiness signal before asserting the content.

The screenshot runs before an API response arrives

cy.visit() does not wait for every later request. Define the relevant route with cy.intercept(), alias it, and wait for that alias. Avoid replacing this with cy.wait(number); a fixed pause does not establish that the needed state is ready.

The request completed, but the image or layout is still changing

A network response is not proof that media has decoded or layout has settled. Assert the relevant application state or image condition, and take the snapshot only after that assertion passes.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The screenshot differs between otherwise identical runs

Check whether API data, viewport, browser or operating system, fonts, animation, or third-party content differs between the baseline and comparison run. Stabilize data and rendering conditions where possible; mask only the narrow region that cannot be controlled.

Best Value
Sale
iMBAPrice - RJ45 Network Cable Tester for Lan Phone RJ45/RJ11/RJ12/CAT5/CAT6/CAT7 UTP Wire Test Tool
  • Automatically runs all tests and checks for continuity, open, shorted and crossed wire pairs. Visible LED status display.
  • Cable state testing (2-wire): Line DC detecting, anode and cathode determination,Ringing signal detecting open, short and cross circuit testing
  • Cable Type: RJ11 Telephone cable and RJ45 LAN cable
  • Connectors: Ethernet Cat 5, Ethernet Cat 5e, Ethernet Cat 6, Ethernet Cat 7, RJ11 6P and RJ45 8P
  • Power Source: DC9V Battery Required (not included)

The timeout points to page load rather than the lazy request

Cypress documents a default pageLoadTimeout of 60,000 milliseconds in its configuration documentation, accessed October 3, 2026. Cypress distinguishes this from request and response timeouts; increasing a page-load timeout will not by itself make a later lazy-loaded request complete. Identify which wait is timing out and configure or wait for the relevant event. See Cypress configuration.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Frequently Asked Questions

Does Cypress automatically capture visual snapshots?

Cypress supports visual testing through plugins and hosted services; the snapshot command and baseline workflow depend on the chosen tool.

Should I use a full-page snapshot for every lazy-loaded section?

No. A focused component or element snapshot is often easier to review; use a full-page capture when the page-level layout is what the test needs to protect.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Quick Recap

SaleBestseller No. 1
Bestseller No. 2
Network LAN Cable Tester, VDV Tester, LAN Explorer with Remote
Network LAN Cable Tester, VDV Tester, LAN Explorer with Remote
Tests CAT3, CAT5e and CAT6/6A cables; Test remote stores securely in tester body; Compact tester easily fits in your pocket
$21.00
SaleBestseller No. 5
iMBAPrice - RJ45 Network Cable Tester for Lan Phone RJ45/RJ11/RJ12/CAT5/CAT6/CAT7 UTP Wire Test Tool
iMBAPrice - RJ45 Network Cable Tester for Lan Phone RJ45/RJ11/RJ12/CAT5/CAT6/CAT7 UTP Wire Test Tool
Cable Type: RJ11 Telephone cable and RJ45 LAN cable; Power Source: DC9V Battery Required (not included)
$9.99

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.