The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Use cy.get() with a dedicated data-* attribute for a stable test hook, cy.contains() when the wording itself matters, and .within() or .find() to limit a query to the right part of the page. Cypress retries queries while elements and chained assertions are being satisfied, so pair selectors with assertions that describe the expected state.
Choose a selector that matches what the test is checking
Ask whether a change to the element’s visible text should make the test fail. If the wording is part of the behavior under test, select by text. If not, use a dedicated testing attribute so the test is independent of styling and ordinary copy changes. Cypress recommends: “Use data-* attributes to provide context to your selectors and isolate them from CSS or JS changes.” (Cypress best practices.)
| Selector approach | Use it when | Main trade-off |
|---|---|---|
Dedicated attribute, such as data-cy |
You need a stable test hook and changing the label should not break the test. | Your application team must add and maintain the attribute. |
Text with cy.contains() |
The user-visible wording is meaningful and should be tested. | A copy change can fail the test; string matching can also match a substring. |
| Role and accessible name with Cypress Testing Library | The test should locate a control through its user-facing accessibility semantics. | The query depends on the element having the expected role and accessible name. |
| CSS classes, IDs, or tag names | A suitable dedicated hook or semantic query is unavailable and the selector is sufficiently specific. | Classes can change during styling work; broad tags can match unintended elements. |
Pick one project convention—such as data-cy, data-test, data-testid, or data-qa—and use it consistently. They are ordinary attributes in the application markup, selected with a CSS attribute selector.
Use an attribute when text is not the assertion
// Application markup
<button data-cy="submit">Submit</button>
// Locate the control without tying the test to its label or styling
cy.get('[data-cy="submit"]').click()
Use text when the wording is the behavior
// Check and activate the button identified by its user-visible label
cy.contains('button', 'Submit').click()
Find elements with cy.get()
cy.get(selector) accepts a CSS selector and yields matching element or elements. In ordinary use it searches from the Cypress root, usually the application document. For example, assert a collection’s size or query multiple kinds of form control:
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchPC 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 & 11#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.
cy.get('[data-cy="todo-item"]').should('have.length', 5)
cy.get('input, textarea, select').should('have.length', 3)
These counts are examples of assertions, not expected values for every application. Choose the expected count that matches the page state your test sets up. See the cy.get() API.
Retrieve a saved query with an alias
cy.get() also retrieves aliases, for example cy.get('@submitButton'). A DOM alias normally reruns the queries that produced it when retrieved, unless it was created as a static alias. This can matter when the DOM changes after the alias is set; consult the API documentation for the current alias behavior.
Scope queries to a container
A chained cy.get() generally starts from the Cypress root rather than searching inside the previous subject. Use .find() to search descendants of the current subject, or .within() when multiple cy.get() calls should stay inside a known container.
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.
Use .within() for several queries in one region
cy.get('[data-cy="confirm-dialog"]').within(() => {
cy.contains('button', 'Yes, Delete!').click()
})
Use .find() for a descendant lookup
cy.get('[data-cy="profile"]')
.find('input')
.should('have.length', 2)
Scoping is especially useful when the page repeats labels or controls. It makes the intended region explicit instead of relying on whichever matching element Cypress encounters elsewhere.
Match visible text with cy.contains()
cy.contains() accepts a string, number, or regular expression. With a string, it matches a substring: cy.contains('Save') may match “Save draft.” Cypress yields at most one element. It may yield a preferred interactive ancestor, such as a button or link, rather than the deepest element containing the text. Pass an element selector when the element type matters.
Restrict the element type or require an exact string
cy.contains('button', 'Save').click()
cy.contains('button', /^Save$/).click()
The anchored regular expression /^Save$/ expresses a whole-text match rather than a substring match. Account for whitespace if the markup divides or spaces the text in a way that affects matching.
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.
Disambiguate repeated text by scope
cy.contains('tr', 'Jane')
.contains('button', 'Edit')
.click()
Here the first query identifies the row and the next looks for its Edit button. When a similarly worded control appears elsewhere, scope to a stable container with .within() before calling cy.contains(). For syntax and options, see the cy.contains() API.
Use accessible role queries when semantics are the point
If the test should locate a control by the role and accessible name users receive, Cypress’s accessibility guidance demonstrates Cypress Testing Library queries:
Free tools Windows power users keep installed
One-click scans. No signup required.
cy.findByRole('button', { name: 'Submit' }).click()
This tests a different intention from a data attribute. A role/name query targets accessible semantics; a testing attribute targets the application’s chosen test hook without making visible wording the assertion. Both approaches can coexist in a suite. See Cypress accessibility testing guidance.
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
Understand retries and assertions
Cypress treats selector queries as retryable: it retries while a matching element is absent and retries chained assertions until they pass or the applicable timeout expires. Express the desired state with a query and assertion rather than adding an arbitrary delay when the condition itself can be checked.
cy.get('[data-cy="saved-message"]').should('be.visible')
cy.contains() also supports a timeout option and can be chained with assertions. If checking that a transient message disappears, first assert that the action produced the message when that matters; an immediate not.exist check could pass before the message ever appears. Retry behavior and query boundaries are documented in the cy.get() and cy.contains() references.
Know the boundaries: iframes and shadow DOM
- Iframes:
cy.get()searches the application document; it does not automatically enter an iframe document. A selector that looks correct can therefore return no match when the target is inside an iframe. Use Cypress’s separate iframe guidance rather than assuming a normal document query crosses that boundary. - Shadow DOM:
cy.contains()has anincludeShadowDomoption. Its default follows Cypress configuration, so check the project’s setting and the current API behavior when querying shadow-DOM content. - Visibility:
cy.contains()can find hidden elements. If the user-facing requirement is that the element be visible, assert.should('be.visible').
Generated selectors and selector priority
Cypress’s Cypress.ElementSelector API configures the attribute priority used by tools such as Cypress Studio and cy.prompt() when generating selectors. Its documented default priority starts with data-cy, data-test, data-testid, and data-qa, then includes attributes such as name, id, class, and tag. The page marks selectorPriority as under active development; check the current API before relying on its exact behavior or stability in project configuration.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problemsBest 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.
Common selector problems and fixes
| Symptom | Likely cause | What to do |
|---|---|---|
| A selector matches the wrong button or several unintended controls. | The selector is broad, such as a generic tag or repeated text. | Use a dedicated attribute, specify an element type with cy.contains(), or scope the query with .within() or .find(). |
| A text query matches “Save draft” when the test expects “Save.” | A string passed to cy.contains() matches a substring. |
Use an anchored regular expression such as /^Save$/ for whole-text matching. |
| The test fails after a style or copy change. | The selector depends on a styling class or on text that is not intended to be tested. | Use a stable project test attribute for implementation-independent targeting; retain text matching only when wording matters. |
| The element is in the page but the query finds nothing. | It may be inside an iframe, outside the current scope, or inside shadow DOM not included by the relevant configuration. | Check the query scope and document boundary; handle iframe guidance separately and verify includeShadowDom behavior for shadow content. |
| A negative assertion passes before a transient message appears. | The test checks absence before establishing that the action produced the message. | First assert the message appears if that is part of the behavior, then assert its disappearance. |
| A visibility expectation passes for the wrong reason or fails unexpectedly. | cy.contains() may yield a hidden match. |
Pair the query with .should('be.visible') when visibility is the requirement. |
For positional selection, prefer Cypress chain methods such as .first() or .eq() when they make the intent clear rather than putting :first or :eq() into the selector string.
Or skip the browser setup
If you need an image or PDF of a page rather than a Cypress DOM query, ScreenshotNeo is a website screenshot API and MCP server for developers. One GET request returns a PNG, JPEG, WebP, or PDF. The following cURL example saves a WebP screenshot; see the ScreenshotNeo documentation for request options.
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 and 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 and CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing, with response headers indicating the page verdict and billing status. Its MCP server includes take_screenshot, get_page_info, and capture_pdf for AI agents and MCP clients. The Free plan includes 1,000 screenshots a month without a card; paid plans start at $5 for 3,000 shots.
Sign up for ScreenshotNeo and get 1,000 free screenshots a month, with no card required.
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 →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →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.

