# Copyright (c) Microsoft Corporation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import re import pytest from playwright.sync_api import Locator, Page, expect def _unshift(snapshot: str) -> str: lines = snapshot.split("\n") whitespace_prefix_length = 100 for line in lines: if not line.strip(): continue match = re.match(r"^(\s*)", line) if match and len(match[1]) < whitespace_prefix_length: whitespace_prefix_length = len(match[1]) return "\n".join( [line[whitespace_prefix_length:] for line in lines if line.strip()] ) def check_and_match_snapshot(locator: Locator, snapshot: str) -> None: assert locator.aria_snapshot() == _unshift(snapshot) expect(locator).to_match_aria_snapshot(snapshot) def test_should_snapshot(page: Page) -> None: page.set_content("

title

") check_and_match_snapshot( page.locator("body"), """ - heading "title" [level=1] """, ) def test_should_snapshot_list(page: Page) -> None: page.set_content("

title

title 2

") check_and_match_snapshot( page.locator("body"), """ - heading "title" [level=1] - heading "title 2" [level=1] """, ) def test_should_snapshot_list_with_list(page: Page) -> None: page.set_content("") check_and_match_snapshot( page.locator("body"), """ - list: - listitem: one - listitem: two """, ) def test_should_snapshot_list_with_accessible_name(page: Page) -> None: page.set_content('') check_and_match_snapshot( page.locator("body"), """ - list "my list": - listitem: one - listitem: two """, ) def test_should_snapshot_complex(page: Page) -> None: page.set_content('') check_and_match_snapshot( page.locator("body"), """ - list: - listitem: - link "link": - /url: about:blank """, ) def test_should_snapshot_with_unexpected_children_equal(page: Page) -> None: page.set_content( """ """ ) expect(page.locator("body")).to_match_aria_snapshot( """ - list: - listitem: One - listitem: Three """, ) with pytest.raises(AssertionError): expect(page.locator("body")).to_match_aria_snapshot( """ - list: - /children: equal - listitem: One - listitem: Three """, timeout=1000, ) def test_should_snapshot_with_unexpected_children_deep_equal(page: Page) -> None: page.set_content( """ """ ) expect(page.locator("body")).to_match_aria_snapshot( """ - list: - listitem: - list: - listitem: 1.1 """, ) expect(page.locator("body")).to_match_aria_snapshot( """ - list: - /children: equal - listitem: - list: - listitem: 1.1 """, ) with pytest.raises(AssertionError): expect(page.locator("body")).to_match_aria_snapshot( """ - list: - /children: deep-equal - listitem: - list: - listitem: 1.1 """, timeout=1000, ) def test_should_snapshot_with_restored_contain_mode_inside_deep_equal( page: Page, ) -> None: page.set_content( """ """ ) with pytest.raises(AssertionError): expect(page.locator("body")).to_match_aria_snapshot( """ - list: - /children: deep-equal - listitem: - list: - listitem: 1.1 """, timeout=1000, ) expect(page.locator("body")).to_match_aria_snapshot( """ - list: - /children: deep-equal - listitem: - list: - /children: contain - listitem: 1.1 """, ) def test_match_values_both_against_regex_and_string(page: Page) -> None: page.set_content('Log in') expect(page.locator("body")).to_match_aria_snapshot( """ - link "Log in": - /url: /auth?r=/ """, ) def test_should_snapshot_with_depth(page: Page) -> None: page.set_content("") snapshot = page.locator("body").aria_snapshot(depth=1) assert "listitem" in snapshot assert "/url" not in snapshot def test_page_aria_snapshot_should_work(page: Page) -> None: page.set_content("

title

") snapshot = page.aria_snapshot() assert _unshift(snapshot) == _unshift( """ - heading "title" [level=1] """ ) def test_to_match_aria_snapshot_should_match_page(page: Page) -> None: page.set_content("

title

") expect(page).to_match_aria_snapshot( """ - heading "title" """ ) def test_to_match_aria_snapshot_should_match_page_complex(page: Page) -> None: page.set_content( """

Microsoft

Open source projects and samples from Microsoft
""" ) expect(page).to_match_aria_snapshot( """ - heading "Microsoft" - text: Open source projects and samples from Microsoft - list: - listitem: - link "Playwright" """ ) def test_to_match_aria_snapshot_should_match_page_with_not(page: Page) -> None: page.set_content("

title

") expect(page).not_to_match_aria_snapshot( """ - heading "wrong" """ )