Cypress
Combine Argos with Cypress to stabilize screenshots, wait for fonts and images, and surface test failures.
Boost your visual testing capabilities by combining Argos with your Cypress tests.
While Cypress inherently provides screenshot functionality, the Argos Cypress integration enhances this by:
Ensuring all images are fully loaded.
Ensuring all fonts are rendered.
Confirming the absence of any
aria-busy(loading) elements on the page.Concealing scrollbars.
Obscuring text cursors or carets.
Providing CSS utilities to simplify content hiding.
Gives you visibility on test failures.
Get started
Please refer to our Quickstart guide to get started with Argos and Cypress.
Set a Preview URL
Argos displays the URL of the page when a screenshot is taken, helping you understand the screenshot’s context in the Argos UI. If you run tests locally and deploy your pull requests (PRs) to a preview URL, you can link the two by setting the ARGOS_PREVIEW_BASE_URL environment variable or configuring the previewUrl option in the Cypress configuration.
Example Configuration
const { defineConfig } = require("cypress");
const { registerArgosTask } = require("@argos-ci/cypress/task");
module.exports = defineConfig({
e2e: {
async setupNodeEvents(on, config) {
registerArgosTask(on, config, {
uploadToArgos: !!process.env.CI,
previewUrl: {
baseUrl: "https://my-site.com", // Use a dynamic value here for different environments if needed.
},
});
},
},
});Setup individual Cypress events
Cypress only supports one handler per event. If you need to set up other handlers for the same event, you can call the individual functions provided by the SDK.
API Overview
cy.argosScreenshot([name][, options])
name: Unique name for the screenshot.options: Explore cy.screenshot command options for details.options.element: Use an ElementHandle or string selector to capture a specific element's screenshot.options.viewports: Define specific viewports for capturing screenshots. More on viewports configuration.options.argosCSS: Specific CSS applied during the screenshot process. More on injecting CSSoptions.threshold: Sensitivity threshold between 0 and 1. The higher the threshold, the less sensitive the diff will be. Defaults to0.5.options.baseName: Name, or list of names, to compare this screenshot against instead of its own name. Useful to compare a variant against an existing screenshot. More on fallback baselines.options.stabilize: Wait for the UI to stabilize before taking the screenshot. Set tofalseto disable stabilization. Pass an object to customize the stabilization. Defaults totrue.options.stabilize.disableSpellCheck: Disable spell check before taking the screenshot. Defaults totrue.options.stabilize.fontAntialiasing: Force font antialiasing. Defaults totrue.options.stabilize.hideCarets: Hide text carets before taking the screenshot. Defaults totrue.options.stabilize.hideScrollbars: Hide scrollbars before taking the screenshot. Defaults totrue.options.stabilize.loadImageSrcset: Force the loading of images withsrcsetattributes when the viewport changes. Defaults totrue.options.stabilize.pauseGifs: Pause animated GIFs on their first frame so they don't capture a random frame on each run. Defaults totrue. Flag GIFs served from extension-less URLs withdata-image-type="gif"so they're detected too.options.stabilize.roundImageSize: Round image sizes to the nearest integer. Defaults totrue.options.stabilize.stabilizeSticky: Stabilize sticky and fixed elements by switching toposition: absolute. Defaults totrue.options.stabilize.waitForAriaBusy: Wait for thearia-busyattribute to be removed from the document. Defaults totrue.options.stabilize.waitForFonts: Wait for fonts to be loaded. Defaults totrue.options.stabilize.waitForImages: Wait for images to be loaded. Defaults totrue.options.stabilize.waitForBackgroundImages: Wait for CSS background images (including::before/::after) to load before taking the screenshot. Enabled by default, scoped to elements flagged with thedata-visual-test-wait-bg-imgattribute (and their descendants). Passtrueto scan the whole document,{ selector: string }to target a custom selector, orfalseto disable it. A failed image (e.g. a 404) is treated as loaded so it never blocks stabilization.options.tag: Tag or array of tags to attach to the screenshot for filtering in Argos.
Helper Attributes for Visual Testing
For tailored visual testing, the data-visual-test attributes provide control over how elements appear in Argos screenshots. This can be especially useful for obscuring or modifying elements with dynamic content, like dates.
[data-visual-test="transparent"]: Renders the element transparent (visibility: hidden).[data-visual-test="removed"]: Removes the element from view (display: none).[data-visual-test="blackout"]: Masks the element with a blackout effect.[data-visual-test-no-radius]: Strips the border radius from the element.
Example: Using a helper attribute to hide a div from the captured screenshot:
registerArgosTask(on, config[, options])
on: Cypress plugin events.config: Cypress config.options: All upload parameters.options.uploadToArgos: Upload results and create a build on Argos,trueby default.
argosAfterScreenshot(config, details[, options])
Cypress "after:screenshot" event handler.
config: Cypress config.details: Screenshot details provided by Cypress.options: All upload parameters.options.uploadToArgos: Upload results and create a build on Argos,trueby default.
argosAfterRun(config, results[, options])
Cypress "after:run" event handler.
config: Cypress config.results: Run results provided by Cypress.options: All upload parameters.options.uploadToArgos: Upload results and create a build on Argos,trueby default.
Troubleshooting
Error while importing @argos-ci/cypress/task in cypress.config.ts
To address the ts(1479) error when importing @argos-ci/cypress/task in your cypress.config.ts, you have two main strategies:
The first option is a more comprehensive solution, dealing with the TypeScript bug through adopting the new moduleResolution: "Bundler" setting, which is designed for such cases. The second option is simpler and quicker but bypasses the issue rather than solving it at its core.
Viewports option not working
When running Cypress in headless mode, the Cypress.viewport command (used internally by @argos-ci/cypress) may not behave as expected. This is because headless browsers don’t render a visible viewport, which can result in incorrect or inconsistent screenshots.
To ensure a consistent viewport size, configure it via setupNodeEvents in your cypress.config.js. This approach sets the viewport before the browser launches, avoiding visual regressions.
Additional Resources
Last updated
Was this helpful?