A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://playwright.dev/python/docs/aria-snapshots below:

Snapshot testing | Playwright Python

Snapshot testing Overview

With Playwright's Snapshot testing you can assert the accessibility tree of a page against a predefined snapshot template.

page.goto('https://playwright.dev/')
expect(page.query_selector('banner')).to_match_aria_snapshot("""
- banner:
- heading /Playwright enables reliable end-to-end/ [level=1]
- link "Get started"
- link "Star microsoft/playwright on GitHub"
- link /[\\d]+k\\+ stargazers on GitHub/
""")
await page.goto('https://playwright.dev/')
await expect(page.query_selector('banner')).to_match_aria_snapshot("""
- banner:
- heading /Playwright enables reliable end-to-end/ [level=1]
- link "Get started"
- link "Star microsoft/playwright on GitHub"
- link /[\\d]+k\\+ stargazers on GitHub/
""")
Assertion testing vs Snapshot testing

Snapshot testing and assertion testing serve different purposes in test automation:

Assertion testing

Assertion testing is a targeted approach where you assert specific values or conditions about elements or components. For instance, with Playwright, expect(locator).to_have_text() verifies that an element contains the expected text, and expect(locator).to_have_value() confirms that an input field has the expected value. Assertion tests are specific and generally check the current state of an element or property against an expected, predefined state. They work well for predictable, single-value checks but are limited in scope when testing the broader structure or variations.

Advantages

Disadvantages

Snapshot testing

Snapshot testing captures a “snapshot” or representation of the entire state of an element, component, or data at a given moment, which is then saved for future comparisons. When re-running tests, the current state is compared to the snapshot, and if there are differences, the test fails. This approach is especially useful for complex or dynamic structures, where manually asserting each detail would be too time-consuming. Snapshot testing is broader and more holistic than assertion testing, allowing you to track more complex changes over time.

Advantages

Disadvantages

When to use

By combining snapshot testing for broad, structural checks and assertion testing for specific functionality, you can achieve a well-rounded testing strategy.

Aria snapshots

In Playwright, aria snapshots provide a YAML representation of the accessibility tree of a page. These snapshots can be stored and compared later to verify if the page structure remains consistent or meets defined expectations.

The YAML format describes the hierarchical structure of accessible elements on the page, detailing roles, attributes, values, and text content. The structure follows a tree-like syntax, where each node represents an accessible element, and indentation indicates nested elements.

Each accessible element in the tree is represented as a YAML node:

- role "name" [attribute=value]

These values are derived from ARIA attributes or calculated based on HTML semantics. To inspect the accessibility tree structure of a page, use the Chrome DevTools Accessibility Tab.

Snapshot matching

The expect(locator).to_match_aria_snapshot() assertion method in Playwright compares the accessible structure of the locator scope with a predefined aria snapshot template, helping validate the page's state against testing requirements.

For the following DOM:

You can match it using the following snapshot template:

expect(page.locator("body")).to_match_aria_snapshot("""
- heading "title"
""")
await expect(page.locator("body")).to_match_aria_snapshot("""
- heading "title"
""")

When matching, the snapshot template is compared to the current accessibility tree of the page:

Partial matching

You can perform partial matches on nodes by omitting attributes or accessible names, enabling verification of specific parts of the accessibility tree without requiring exact matches. This flexibility is helpful for dynamic or irrelevant attributes.

aria snapshot

In this example, the button role is matched, but the accessible name ("Submit") is not specified, allowing the test to pass regardless of the button's label.

For elements with ARIA attributes like checked or disabled, omitting these attributes allows partial matching, focusing solely on role and hierarchy.

<input type="checkbox" checked>

aria snapshot for partial match

In this partial match, the checked attribute is ignored, so the test will pass regardless of the checkbox state.

Similarly, you can partially match children in lists or groups by omitting specific list items or nested elements.

<ul>
<li>Feature A</li>
<li>Feature B</li>
<li>Feature C</li>
</ul>

aria snapshot for partial match

- list
- listitem: Feature B

Partial matches let you create flexible snapshot tests that verify essential page structure without enforcing specific content or attributes.

Strict matching

By default, a template containing the subset of children will be matched:

<ul>
<li>Feature A</li>
<li>Feature B</li>
<li>Feature C</li>
</ul>

aria snapshot for partial match

- list
- listitem: Feature B

The /children property can be used to control how child elements are matched:

<ul>
<li>Feature A</li>
<li>Feature B</li>
<li>Feature C</li>
</ul>

aria snapshot will fail due to Feature C not being in the template

- list
- /children: equal
- listitem: Feature A
- listitem: Feature B
Matching with regular expressions

Regular expressions allow flexible matching for elements with dynamic or variable text. Accessible names and text can support regex patterns.

aria snapshot with regular expression

Generating snapshots

Creating aria snapshots in Playwright helps ensure and maintain your application's structure. You can generate snapshots in various ways depending on your testing setup and workflow.

Generating snapshots with the Playwright code generator

If you're using Playwright's Code Generator, generating aria snapshots is streamlined with its interactive interface:

Using the Locator.ariaSnapshot method

The locator.aria_snapshot() method allows you to programmatically create a YAML representation of accessible elements within a locator's scope, especially helpful for generating snapshots dynamically during test execution.

Example:

snapshot = page.locator("body").aria_snapshot()
print(snapshot)
snapshot = await page.locator("body").aria_snapshot()
print(snapshot)

This command outputs the aria snapshot within the specified locator's scope in YAML format, which you can validate or store as needed.

Accessibility tree examples Headings with level attributes

Headings can include a level attribute indicating their heading level.

<h1>Title</h1>
<h2>Subtitle</h2>

aria snapshot

- heading "Title" [level=1]
- heading "Subtitle" [level=2]
Text nodes

Standalone or descriptive text elements appear as text nodes.

<div>Sample accessible name</div>

aria snapshot

- text: Sample accessible name
Inline multiline text

Multiline text, such as paragraphs, is normalized in the aria snapshot.

aria snapshot

- paragraph: Line 1 Line 2
Links

Links display their text or composed content from pseudo-elements.

<a href="#more-info">Read more about Accessibility</a>

aria snapshot

- link "Read more about Accessibility"
Text boxes

Input elements of type text show their value attribute content.

<input type="text" value="Enter your name">

aria snapshot

- textbox: Enter your name
Lists with items

Ordered and unordered lists include their list items.

<ul aria-label="Main Features">
<li>Feature 1</li>
<li>Feature 2</li>
</ul>

aria snapshot

- list "Main Features":
- listitem: Feature 1
- listitem: Feature 2
Grouped elements

Groups capture nested elements, such as <details> elements with summary content.

<details>
<summary>Summary</summary>
<p>Detail content here</p>
</details>

aria snapshot

Attributes and states

Commonly used ARIA attributes, like checked, disabled, expanded, level, pressed, and selected, represent control states.

Checkbox with checked attribute
<input type="checkbox" checked>

aria snapshot

Button with pressed attribute
<button aria-pressed="true">Toggle</button>

aria snapshot

- button "Toggle" [pressed=true]

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4