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:
- 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
- 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
- Pause at the failed command and inspect the target and the reported covering node in DevTools.
- Look for a backdrop, dialog container, spinner, toast, fixed header, or transparent element whose box intersects the target’s center.
- Check computed
position,z-index,pointer-events, and dimensions. A visually transparent element can still receive pointer events. - 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.
- 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.
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
- 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:
Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallCrashes, 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 minutecy.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
- 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.
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
overflowcreates 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.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →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
- 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.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.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →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
- 【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.
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.
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.
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.

