* New translations docker.md (German) * New translations docker.md (Italian) * New translations docker.md (Japanese) * New translations docker.md (Polish) * New translations docker.md (Portuguese) * New translations docker.md (Russian) * New translations docker.md (Ukrainian) * New translations docker.md (Chinese Simplified) * New translations docker.md (Persian) * New translations docker.md (Tamil) * New translations docker.md (Hindi) * New translations boilerplateprojects.md (Belarusian) * New translations boilerplateprojects.md (Portuguese) * New translations customreporter.md (Belarusian) * New translations customreporter.md (Portuguese) * New translations proxy.md (French) * New translations configuration.md (Spanish) * New translations proxy.md (Spanish) * New translations proxy.md (Arabic) * New translations cloudservices.md (Belarusian) * New translations configuration.md (Belarusian) * New translations proxy.md (Belarusian) * New translations proxy.md (Bulgarian) * New translations configuration.md (German) * New translations proxy.md (German) * New translations proxy.md (Italian) * New translations proxy.md (Japanese) * New translations proxy.md (Polish) * New translations cloudservices.md (Portuguese) * New translations configuration.md (Portuguese) * New translations proxy.md (Portuguese) * New translations proxy.md (Russian) * New translations proxy.md (Ukrainian) * New translations proxy.md (Chinese Simplified) * New translations proxy.md (Persian) * New translations proxy.md (Tamil) * New translations configuration.md (Hindi) * New translations proxy.md (Hindi) * New translations setuptypes.md (French) * New translations setuptypes.md (Spanish) * New translations setuptypes.md (Arabic) * New translations setuptypes.md (Belarusian) * New translations setuptypes.md (Bulgarian) * New translations setuptypes.md (German) * New translations setuptypes.md (Italian) * New translations setuptypes.md (Japanese) * New translations setuptypes.md (Polish) * New translations setuptypes.md (Portuguese) * New translations setuptypes.md (Russian) * New translations setuptypes.md (Ukrainian) * New translations setuptypes.md (Chinese Simplified) * New translations setuptypes.md (Persian) * New translations setuptypes.md (Tamil) * New translations setuptypes.md (Hindi) * New translations appium.md (French) * New translations appium.md (Belarusian) * New translations appium.md (German) * New translations appium.md (Japanese) * New translations appium.md (Portuguese) * New translations appium.md (Ukrainian) * New translations appium.md (Tamil) * New translations browser.md (French) * New translations browser.md (Spanish) * New translations browser.md (Arabic) * New translations browser.md (Belarusian) * New translations browser.md (Bulgarian) * New translations browser.md (German) * New translations browser.md (Italian) * New translations browser.md (Japanese) * New translations browser.md (Polish) * New translations browser.md (Portuguese) * New translations browser.md (Russian) * New translations browser.md (Ukrainian) * New translations browser.md (Chinese Simplified) * New translations browser.md (Persian) * New translations browser.md (Tamil) * New translations browser.md (Hindi) * New translations protocols.md (French) * New translations vue.md (French) * New translations protocols.md (Spanish) * New translations vue.md (Spanish) * New translations protocols.md (Arabic) * New translations vue.md (Arabic) * New translations frameworks.md (Belarusian) * New translations protocols.md (Belarusian) * New translations vue.md (Belarusian) * New translations protocols.md (Bulgarian) * New translations vue.md (Bulgarian) * New translations protocols.md (German) * New translations vue.md (German) * New translations protocols.md (Italian) * New translations vue.md (Italian) * New translations protocols.md (Japanese) * New translations vue.md (Japanese) * New translations protocols.md (Polish) * New translations vue.md (Polish) * New translations frameworks.md (Portuguese) * New translations protocols.md (Portuguese) * New translations vue.md (Portuguese) * New translations protocols.md (Russian) * New translations vue.md (Russian) * New translations protocols.md (Ukrainian) * New translations vue.md (Ukrainian) * New translations protocols.md (Chinese Simplified) * New translations vue.md (Chinese Simplified) * New translations protocols.md (Persian) * New translations vue.md (Persian) * New translations protocols.md (Tamil) * New translations vue.md (Tamil) * New translations protocols.md (Hindi) * New translations vue.md (Hindi) * New translations customreporter.md (Belarusian) * New translations customreporter.md (Portuguese) * New translations configuration.md (Belarusian) * New translations configuration.md (Portuguese) * New translations sharding.md (French) * New translations sharding.md (Spanish) * New translations sharding.md (Arabic) * New translations vscodeextension.md (Belarusian) * New translations sharding.md (Belarusian) * New translations sharding.md (Bulgarian) * New translations sharding.md (German) * New translations sharding.md (Italian) * New translations sharding.md (Japanese) * New translations sharding.md (Polish) * New translations vscodeextension.md (Portuguese) * New translations sharding.md (Portuguese) * New translations sharding.md (Russian) * New translations sharding.md (Ukrainian) * New translations sharding.md (Chinese Simplified) * New translations sharding.md (Persian) * New translations sharding.md (Tamil) * New translations sharding.md (Hindi) * New translations code.json (Portuguese, Brazilian) * New translations options.json (Portuguese, Brazilian) * New translations current.json (Portuguese, Brazilian) * New translations current.json (Portuguese, Brazilian) * New translations footer.json (Portuguese, Brazilian) * New translations navbar.json (Portuguese, Brazilian) * New translations api.md (Portuguese, Brazilian) * New translations axecore.md (Portuguese, Brazilian) * New translations autowait.md (Portuguese, Brazilian) * New translations autocompletion.md (Portuguese, Brazilian) * New translations automationprotocols.md (Portuguese, Brazilian) * New translations watchfiles.md (Portuguese, Brazilian) * New translations whywebdriverio.md (Portuguese, Brazilian) * New translations browser.md (Portuguese, Brazilian) * New translations createlocalworkerprocess.md (Portuguese, Brazilian) * New translations donate.md (Portuguese, Brazilian) * New translations materials.md (Portuguese, Brazilian) * New translations openofficehours.md (Portuguese, Brazilian) * New translations support.md (Portuguese, Brazilian) * New translations team.md (Portuguese, Brazilian) * New translations appium.md (Portuguese, Brazilian) * New translations emulation.md (Portuguese, Brazilian) * New translations visualtesting.md (Portuguese, Brazilian) * New translations method-options.md (Portuguese, Brazilian) * New translations methods.md (Portuguese, Brazilian) * New translations writing-tests.md (Portuguese, Brazilian) * New translations snapshot.md (Portuguese, Brazilian) * New translations filedownloads.md (Portuguese, Brazilian) * New translations events.md (Portuguese, Brazilian) * New translations percy-overview.md (Portuguese, Brazilian) * New translations integrate-with-app-percy.md (Portuguese, Brazilian) * New translations integrate-with-percy.md (Portuguese, Brazilian) * New translations browserstack.md (Portuguese, Brazilian) * New translations clock.md (Portuguese, Brazilian) * New translations argos.md (Portuguese, Brazilian) * New translations seleniumgrid.md (Portuguese, Brazilian) * New translations browserlogs.md (Portuguese, Brazilian) * New translations axecore.md (Portuguese, Brazilian) * New translations donate.md (Portuguese, Brazilian) * New translations materials.md (Portuguese, Brazilian) * New translations openofficehours.md (Portuguese, Brazilian) * New translations support.md (Portuguese, Brazilian) * New translations team.md (Portuguese, Brazilian) * New translations events.md (Portuguese, Brazilian) * New translations browserstack.md (Portuguese, Brazilian) * New translations browser.md (Portuguese, Brazilian) * New translations element.md (Portuguese, Brazilian) * New translations environment.md (Portuguese, Brazilian) * New translations events.md (Portuguese, Brazilian) * New translations clock.md (Portuguese, Brazilian) * New translations dialog.md (Portuguese, Brazilian) * New translations globals.md (Portuguese, Brazilian) * New translations axecore.md (Portuguese, Brazilian) * New translations browser.md (Portuguese, Brazilian) * New translations element.md (Portuguese, Brazilian) * New translations globals.md (Portuguese, Brazilian) * New translations mock.md (Portuguese, Brazilian) * New translations modules.md (Portuguese, Brazilian) * New translations protocols.md (Portuguese, Brazilian) * New translations lit.md (Portuguese, Brazilian) * New translations preact.md (Portuguese, Brazilian) * New translations react.md (Portuguese, Brazilian) * New translations solid.md (Portuguese, Brazilian) * New translations svelte.md (Portuguese, Brazilian) * New translations vue.md (Portuguese, Brazilian) * New translations coverage.md (Portuguese, Brazilian) * New translations mocking.md (Portuguese, Brazilian) * New translations donate.md (Portuguese, Brazilian) * New translations materials.md (Portuguese, Brazilian) * New translations openofficehours.md (Portuguese, Brazilian) * New translations support.md (Portuguese, Brazilian) * New translations team.md (Portuguese, Brazilian) * New translations stencil.md (Portuguese, Brazilian) * New translations filedownloads.md (Portuguese, Brazilian) * New translations events.md (Portuguese, Brazilian) * New translations browserstack.md (Portuguese, Brazilian) * New translations clock.md (Portuguese, Brazilian) * New translations dialog.md (Portuguese, Brazilian) * New translations mobile.md (Portuguese, Brazilian) * New translations browserlogs.md (Portuguese, Brazilian) * New translations createlocalworkerprocess.md (Portuguese, Brazilian) * New translations highleveloverview.md (Portuguese, Brazilian) * New translations testexecution.md (Portuguese, Brazilian) * New translations wdiocommands.md (Portuguese, Brazilian) * New translations webextension.md (Portuguese, Brazilian) * New translations vscodeextension.md (Portuguese, Brazilian) * New translations electron.md (Portuguese, Brazilian) * New translations macos.md (Portuguese, Brazilian) * New translations windows.md (Portuguese, Brazilian) * New translations cli-wizard.md (Portuguese, Brazilian) * New translations getting-started.md (Portuguese, Brazilian) * New translations more-test-optimization.md (Portuguese, Brazilian) * New translations ocr-click-on-text.md (Portuguese, Brazilian) * New translations ocr-click-on-text.md (Portuguese, Brazilian) * New translations ocr-faq.md (Portuguese, Brazilian) * New translations ocr-get-element-position-by-text.md (Portuguese, Brazilian) * New translations ocr-get-text.md (Portuguese, Brazilian) * New translations ocr-set-value.md (Portuguese, Brazilian) * New translations materials.md (Portuguese, Brazilian) * New translations considerations.md (Portuguese, Brazilian) * New translations compare-options.md (Portuguese, Brazilian) * New translations faq.md (Portuguese, Brazilian) * New translations integrate-with-app-percy.md (Portuguese, Brazilian) * New translations ocr-wait-for-text-displayed.md (Portuguese, Brazilian) * New translations what-is-wdio-ocr-service.md (Portuguese, Brazilian) * New translations argos.md (Portuguese, Brazilian) * New translations integrate-with-percy.md (Portuguese, Brazilian) * New translations method-options.md (Portuguese, Brazilian) * New translations whywebdriverio.md (Portuguese, Brazilian) * New translations api.md (Portuguese, Brazilian) * New translations frameworks.md (Portuguese, Brazilian) * New translations gettingstarted.md (Portuguese, Brazilian) * New translations selectors.md (Portuguese, Brazilian) * New translations sponsor.md (Portuguese, Brazilian) * update: translate doc to pt-br (#14388) * New translations configuration.md (Portuguese, Brazilian) * more german translations --------- Co-authored-by: Lucas Barbosa <29305833+lucasbarbosaz@users.noreply.github.com>
4.2 KiB
| id | title |
|---|---|
| snapshot | Snapshot |
Snapshot tests can be very useful for asserting a wide range of aspects of your component or logic at the same time. In WebdriverIO you can take snapshots of any arbitrary object as well as a WebElement DOM structure or WebdriverIO command results.
Similar to other test frameworks WebdriverIO will take a snapshot of the given value, then compare it to a reference snapshot file stored alongside the test. The test will fail if the two snapshots do not match: either the change is unexpected, or the reference snapshot needs to be updated to the new version of the result.
:::info Cross Platform Support
These snapshot capabilities are available for running end-to-end tests within the Node.js environment as well as for running unit and component tests in the browser or on mobile devices.
:::
Use Snapshots
To snapshot a value, you can use the toMatchSnapshot() from expect() API:
import { browser, expect } from '@wdio/globals'
it('can take a DOM snapshot', () => {
await browser.url('https://guinea-pig.webdriver.io/')
await expect($('.findme')).toMatchSnapshot()
})
The first time this test is run, WebdriverIO creates a snapshot file that looks like this:
// Snapshot v1
exports[`main suite 1 > can take a DOM snapshot 1`] = `"<h1 class="findme">Test CSS Attributes</h1>"`;
The snapshot artifact should be committed alongside code changes, and reviewed as part of your code review process. On subsequent test runs, WebdriverIO will compare the rendered output with the previous snapshot. If they match, the test will pass. If they don't match, either the test runner found a bug in your code that should be fixed, or the implementation has changed and the snapshot needs to be updated.
To update the snapshot, pass in the -s flag (or --updateSnapshot) to the wdio command, e.g.:
npx wdio run wdio.conf.js -s
Note: if you run tests with multiple browsers in parallel only one snapshot is being created and compared against. If you like to have a separate snapshot per capability, please raise an issue and let us know about your use case.
Inline Snapshots
Similarly, you can use the toMatchInlineSnapshot() to store the snapshot inline within the test file.
import { expect, $ } from '@wdio/globals'
it('can take inline DOM snapshots', () => {
const elem = $('.container')
await expect(elem.getCSSProperty()).toMatchInlineSnapshot()
})
Instead of creating a snapshot file, Vitest will modify the test file directly to update the snapshot as a string:
import { expect, $ } from '@wdio/globals'
it('can take inline DOM snapshots', () => {
const elem = $('.container')
await expect(elem.getCSSProperty()).toMatchInlineSnapshot(`
{
"parsed": {
"alpha": 0,
"hex": "#000000",
"rgba": "rgba(0,0,0,0)",
"type": "color",
},
"property": "background-color",
"value": "rgba(0,0,0,0)",
}
`)
})
This allows you to see the expected output directly without jumping across different files.
Visual Snapshots
Taking a DOM snapshot of an element might not be the best idea, especially if the DOM structure is too big and contains dynamic element properties. In these cases, it is recommended to rely on visual snapshots for elements.
To enable visual snapshots, add the @wdio/visual-service to your setup. You can follow the set-up instructions in the documentation for Visual Testing.
You can then take a visual snapshot via toMatchElementSnapshot(), e.g.:
import { expect, $ } from '@wdio/globals'
it('can take inline DOM snapshots', () => {
const elem = $('.container')
await expect(elem.getCSSProperty()).toMatchInlineSnapshot()
})
An image is then stored in the baseline directory. Check out the Visual Testing for more information.