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

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

Cypress reports “element is covered by another element” when the target’s center point is occupied in the rendered page at the moment an action runs. After an Angular upgrade, fix the failing state—not the selector—by identifying the covering node, waiting for an application signal such as an overlay closing or a request completing, and then interacting. Treat { force: true } as an explicit test decision, not a general repair.

What Cypress’s covered-element error actually means

Action commands such as click() perform actionability checks before dispatching the event. Cypress scrolls the subject into view, checks that it is not hidden, disabled, detached, read-only, animating, or covered, and may continue scrolling when a fixed-position obstruction is detected. Its coverage check is based on the target’s center coordinates, so a small backdrop or header over that point is enough to fail the command. See the official Cypress interaction documentation.

The message describes the page state at action time. It does not, by itself, prove that an Angular upgrade introduced a Cypress regression or that your selector is wrong. Common causes include:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • An Angular CDK or Material backdrop, dialog, menu, tooltip, or select panel that is still open.
  • A loading mask or progress indicator that has not been removed.
  • A sticky navigation bar covering the element after Cypress scrolls it into view.
  • A layout shift caused by fonts, images, hydration, animations, or newly rendered components.
  • A request or state transition that the test has not synchronized with.

A historical Cypress issue about an Angular CDK overlay (opened in 2018 for Cypress 3.1.0 and Chrome 68) is useful context for overlay timing, but it is not evidence that current Angular upgrades universally cause this failure.

#1 Best Overall
Sale
Philips 24 Inch Computer Monitor FHD 100Hz VA VESA Flicker-Free, 241V8LB
  • CRISP CLARITY: This 23.8″ Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
  • INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
  • THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors
  • WORK SEAMLESSLY: This sleek monitor is virtually bezel-free on three sides, so the screen looks even bigger for the viewer. This minimalistic design also allows for seamless multi-monitor setups that enhance your workflow and boost productivity
  • A BETTER READING EXPERIENCE: For busy office workers, EasyRead mode provides a more paper-like experience for when viewing lengthy documents

Diagnose the obstruction at the failing moment

Read the complete Cypress error

Run the test again in the interactive runner or in headed mode. Cypress normally identifies the element it believes is covering the subject. Record that element’s tag, classes, and position rather than immediately changing the command. The Cypress error-message reference explains the actionability failures and the checks involved.

Inspect the application DOM and geometry

  1. Pause at the failed command and inspect the target and the reported covering node in DevTools.
  2. Look for a backdrop, dialog container, spinner, toast, fixed header, or transparent element whose box intersects the target’s center.
  3. Check computed position, z-index, pointer-events, and dimensions. A visually transparent element can still receive pointer events.
  4. Compare the page before and after the Angular upgrade. Check changed component templates, overlay providers, CSS stacking contexts, animation durations, and when classes or attributes are applied.
  5. Determine whether the obstruction is supposed to disappear, whether the target should move, or whether the user really would be unable to click at that point.

Do not infer the cause from the framework version alone. The rendered DOM and timing in the failing test are the evidence you need.

Synchronize with a meaningful Angular state

Cypress recommends waiting on a signal exposed by the application instead of inserting an arbitrary delay or removing an assertion that proves the UI is ready. Once the signal is true, query the target again and perform the action.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

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

Wait for the request that drives the screen

Register the intercept before navigation or the user action that starts the request. Waiting on the alias ties the test to the operation that changes the UI.

describe('checkout', () => {
  it('opens the payment form after account data loads', () => {
    cy.intercept('GET', '**/api/account').as('account');

    cy.visit('/checkout');
    cy.wait('@account').its('response.statusCode').should('be.oneOf', [200, 304]);

    cy.get('[data-cy="loading-mask"]').should('not.be.visible');
    cy.get('[data-cy="pay-now"]').click();
  });
});

The URL pattern and status assertion must match your application’s request. If several requests affect the control, wait for each relevant alias or use the application’s final ready marker as the stronger signal.

Rank #2
Philips 22 Inch Computer Monitor FHD 100Hz VA VESA Flicker-Free, 221V8LB
  • CRISP CLARITY: This 22 inch class (21.5″ viewable) Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
  • 100HZ FAST REFRESH RATE: 100Hz brings your favorite movies and video games to life. Stream, binge, and play effortlessly
  • SMOOTH ACTION WITH ADAPTIVE-SYNC: Adaptive-Sync technology ensures fluid action sequences and rapid response time. Every frame will be rendered smoothly with crystal clarity and without stutter
  • INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
  • THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors

Assert that a loading mask or overlay is gone

Use a stable selector owned by the application. A visibility assertion is useful when the element remains in the DOM but is hidden; use an existence assertion when the application removes it entirely.

cy.get('[data-cy="page-loading"]')
  .should('not.be.visible');

cy.get('[data-cy="save-button"]')
  .should('be.enabled')
  .click();

For an Angular CDK overlay, wait for the backdrop or dialog state that your application controls, for example:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
cy.get('.cdk-overlay-backdrop').should('not.exist');
cy.get('[data-cy="results-row"]').click();

Prefer a dedicated data-cy marker or a documented class/attribute over a fragile chain of generated Angular classes.

Wait for a stable class or attribute

If the application sets a ready state, assert it directly. This avoids guessing how long rendering will take on a slower runner.

cy.get('[data-cy="editor"]')
  .should('have.attr', 'data-state', 'ready');

cy.get('[data-cy="publish"]')
  .click();

The marker should be set only after the overlay, data load, or layout transition relevant to the action has completed. If it is set too early, fix the application signal rather than adding a longer wait.

Rank #3
Sale
Dell 24 Monitor - SE2426H - 23.8-inch FHD (1920x1080) 144Hz 1ms Display, in-Plane Switching (IPS) Technology, AMD FreeSync™, TÜV 3-Star 2X HDMI, Tilt
  • Clear visuals. Fluid motion: A 144Hz refresh rate and 1ms MPRT deliver smooth, tear‑free motion across work, gaming, and streaming for clearer, more fluid viewing.
  • Eye comfort: TÜV Rheinland 3‑star* certification reduces harmful blue light while preserving stunning color quality without compromise. *TÜV Rheinland 3-star eye comfort certification.
  • Wide viewing angle: Get consistent views across a wide 178° /178° viewing angle.
  • In-Plane Switching (IPS): See excellent color accuracy and consistency across wide viewing angles with In-plane Switching (IPS) technology.
  • Ultra-thin bezels: Maximize your viewing experience with thin bezels.

When scrolling or a fixed header is the real problem

Cypress normally scrolls a subject into view and can nudge the scroll position when it detects fixed-position coverage. A sticky header can nevertheless remain over the center of a control, especially when the application has nested scroll containers or custom CSS.

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

Confirm the layout before changing Cypress settings

  • Scroll to the target manually and verify that a real user can see and click its center.
  • Inspect the header’s height and stacking order at the viewport used by the test.
  • Check whether a parent with overflow creates a separate scrolling context.
  • Correct the application’s scroll offset or spacing if the control is genuinely hidden behind the header.

Use per-command scroll behavior only when it matches the UI

Cypress supports a per-command scrollBehavior option. Try a different supported alignment when the element is reachable but the default position places it beneath a fixed bar:

cy.get('[data-cy="confirm"]')
  .click({ scrollBehavior: 'center' });

This changes where Cypress scrolls; it does not close an overlay or repair an incorrect layout. If the target remains covered, return to the DOM diagnosis and application-state synchronization.

Why { force: true } is usually not the fix

force: true bypasses Cypress’s visibility and coverage checks and fires the event at the element. It can be appropriate when the test intentionally models a programmatic interaction that a user cannot perform—for example, a component contract tested below a separate end-to-end flow.

cy.get('[data-cy="hidden-test-hook"]')
  .click({ force: true });

Do not use it merely to silence a covered-element failure. A forced click can pass while a user is still blocked by a backdrop, spinner, or fixed header. That hides a defect in the UI or an incomplete test synchronization.

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

Check your Cypress version before changing visibility settings

In Cypress 16, default visibility assertions use the browser’s modern Element.checkVisibility()-based strategy. Action commands continue to check coverage under either strategy. Therefore, changing a visibility strategy will not make a genuinely covered click safe.

Rank #4
Samsung 27" Essential S3 (S36GD) Series FHD 1800R Curved Computer Monitor
  • CURVED FOR ENHANCED ENGAGEMENT: An immersive viewing experience with a curved monitor that wraps more closely around your field of vision; It creates a wider view, enhancing depth perception and minimizing peripheral distraction
  • SMOOTH PERFORMANCE FOR SEAMLESS CONTENT: Stay in the action when playing games, watching videos, or working on creative projects; The 100Hz refresh rate reduces lag and motion blur so you don't miss a thing in fast-paced moments¹
  • MORE GAMING POWER: Gain the edge with optimizable game settings; Color and image contrast can be adjusted to see scenes more vividly and spot enemies hiding in the dark; Game Mode adjusts any game to fill the screen so you can view every detail²
  • KEEP IT EASY ON THE EYES: Care for your eyes and stay comfortable, even during long sessions; Advanced eye comfort technology certified by TÜV reduces eye strain by minimizing blue light and reducing irritating screen flicker²
  • INCREASED VERSATILITY: Connect to more; Plug devices straight into your monitor for increased flexibility, making your computing environment even more convenient

The legacy visibility strategy is documented as a temporary migration path and is deprecated. Check the installed Cypress version and the current configuration before applying advice written for an older release. Treat a legacy setting as a short-term compatibility measure while updating tests or application markup, not as a durable solution for click coverage.

Choose the repair that proves the right thing

Approach Waits for real application state? Proves a user can act? Addresses the likely cause? Version-dependent?
Wait for an intercepted request Yes, when the request drives readiness Usually Yes, for data-driven transitions No
Assert overlay or loading indicator is gone Yes Yes, if layout is correct Yes, for masks and backdrops No
Assert a ready class or attribute Yes, if the application sets it late enough Usually Yes, for explicit UI state No
Change scrollBehavior No Only if the target is otherwise reachable Sometimes, for fixed headers No
Add a fixed wait() delay No Not necessarily Rarely; timing may vary No
Use { force: true } No No; coverage is bypassed No No
Switch to the legacy visibility strategy No No change to coverage checks No Yes; deprecated migration path

The strongest repair is the smallest application-state signal that occurs immediately before the action and reflects what a user needs: data loaded, overlay closed, animation complete, and target reachable.

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

Troubleshooting branches

The covering element is a backdrop or dialog

Identify the command that opens it and the event that closes it. Wait for the close request, disappearance of the backdrop, or a ready attribute. If the dialog is unexpectedly open, fix the preceding test step or application state instead of clicking through it.

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

The covering element is a spinner that flashes intermittently

Replace a race-prone immediate click with a visibility assertion tied to the spinner’s lifecycle. If the spinner is removed and recreated, use a stable parent state or the request alias rather than relying on one transient node.

The target is behind a sticky header only in CI

Compare viewport size, device scale, fonts, and scroll containers between local and CI runs. Use a centered scroll behavior if the UI supports it, or adjust the application’s layout so the control is not covered at the test viewport.

Best Value
Sale
Sceptre New 22-Inch Gaming Monitor, FHD 1080p, Up to 144Hz, HDMI, DisplayPort, Built-in Speakers, Machine Black (E225W-FW144 Series, 2026)
  • 【INTEGRATED SPEAKERS】Whether you're at work or in the midst of an intense gaming session, our built-in speakers provide rich and seamless audio, all while keeping your desk clutter-free.
  • 【EASY ON THE EYES】 Protect your eyes and enhance your comfort with Blue-Light Shift technology. This feature reduces harmful blue light emissions from your screen, helping to alleviate eye strain during long hours of use and promoting healthier viewing habits.
  • 【WIDEN YOUR PERSPECTIVE】Our sleek minimal bezel design ensures undivided attention. The nearly bezel-free display seamlessly connects in a dual monitor arrangement, delivering an unobstructed view that lets you focus on more at once, completely distraction-free.

The error started after upgrading Cypress as well as Angular

Record both versions and separate visibility assertions from actionability. Cypress 16’s modern visibility default concerns visibility assertions; action commands still perform coverage checks. Reproduce with the current documentation and inspect the actual covering node before changing configuration.

The selector finds multiple elements

Resolve the application state first, then narrow the query with a stable test attribute or an appropriate container. Do not use force to compensate for an ambiguous subject; that can dispatch an event to an unintended element.

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

Keep the test fast and reliable

  • Set up cy.intercept() before the action that starts the request.
  • Prefer one meaningful readiness assertion over several arbitrary delays.
  • Keep selectors stable with dedicated test attributes.
  • Wait only for the state required by the next action, not for every network request on the page.
  • Capture the failure in the interactive runner and inspect geometry before changing retries or timeouts.
  • Fix application overlays and stacking issues when a real user would be blocked; do not encode a hidden defect as a forced event.

These practices reduce both false failures and wasted time: the test proceeds as soon as the relevant state is true, while still checking the same reachability conditions a user encounters.

Or skip the browser setup

If you need a repeatable image of a page state while investigating overlays or layout changes, ScreenshotNeo provides a direct screenshot API and an MCP server for AI agents. Its cleanup steps accept cookie or consent banners and remove more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each step can be disabled. Only clean shots are billed: bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and the response identifies the result with X-Page-Verdict and X-Billed headers.

One GET request is enough:

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

See the ScreenshotNeo API documentation for all parameters. The same request in Python is:

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)

And in 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}`);

ScreenshotNeo also supports full-page and element capture, custom CSS and JavaScript, waits for selectors, delays or network idle, clicks before capture, hidden selectors, device presets, viewport and retina settings, request blocking, cookies and headers, geolocation, time zones, PDFs, caching, signed links, asynchronous webhooks, bulk capture of up to 100 URLs per call, and a usage API. Its MCP tools—take_screenshot, get_page_info, and capture_pdf—work with Claude, Cursor, and other MCP clients.

Free tools Windows power users keep installed

One-click scans. No signup required.

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

The Free plan includes 1,000 screenshots per month with no card. Paid plans start at $5 for 3,000 shots; every feature is included on every plan, and yearly billing gives two months free. Create a free ScreenshotNeo account to start.

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.