playwright/docs/src/api/class-pageassertions.md
Andrey Lushnikov 303c5998f8
feat: release "comparator" option from experiment (#20720)
The option defines a comparator to be used to compare images.
Possible values are `"pixelmatch"` and `"ssim-cie94"`.

Note: This reverts commit 8167f8bf548308ad8c6f1188508aadee84f26023.
2023-02-07 08:51:48 -08:00

8.1 KiB

class: PageAssertions

  • since: v1.17

The [PageAssertions] class provides assertion methods that can be used to make assertions about the [Page] state in the tests. A new instance of [PageAssertions] is created by calling [method: PlaywrightAssertions.expectPage]:

import { test, expect } from '@playwright/test';

test('navigates to login', async ({ page }) => {
  // ...
  await page.getByText('Sign in').click();
  await expect(page).toHaveURL(/.*\/login/);
});
...
import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;

public class TestPage {
  ...
  @Test
  void navigatesToLoginPage() {
    ...
    page.getByText("Sign in").click();
    assertThat(page).hasURL(Pattern.compile(".*/login"));
  }
}
import re
from playwright.async_api import Page, expect

async def test_navigates_to_login_page(page: Page) -> None:
    # ..
    await page.get_by_text("Sign in").click()
    await expect(page).to_have_url(re.compile(r".*/login"))
import re
from playwright.sync_api import Page, expect

def test_navigates_to_login_page(page: Page) -> None:
    # ..
    page.get_by_text("Sign in").click()
    expect(page).to_have_url(re.compile(r".*/login"))
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.Playwright.NUnit;
using NUnit.Framework;

namespace PlaywrightTests;

[TestFixture]
public class ExampleTests : PageTest
{
    [Test]
    public async Task NavigatetoLoginPage()
    {
        // ..
        await Page.GetByText("Sing in").ClickAsync();
        await Expect(Page.Locator("div#foobar")).ToHaveURL(new Regex(".*/login"));
    }
}

property: PageAssertions.not

  • since: v1.20
  • langs: java, js, csharp
  • returns: <[PageAssertions]>

Makes the assertion check for the opposite condition. For example, this code tests that the page URL doesn't contain "error":

await expect(page).not.toHaveURL('error');
assertThat(page).not().hasURL("error");
await Expect(page).Not.ToHaveURL("error");

async method: PageAssertions.NotToHaveTitle

  • since: v1.20
  • langs: python

The opposite of [method: PageAssertions.toHaveTitle].

param: PageAssertions.NotToHaveTitle.titleOrRegExp

  • since: v1.18
  • titleOrRegExp <[string]|[RegExp]>

Expected title or RegExp.

option: PageAssertions.NotToHaveTitle.timeout = %%-js-assertions-timeout-%%

  • since: v1.18

option: PageAssertions.NotToHaveTitle.timeout = %%-csharp-java-python-assertions-timeout-%%

  • since: v1.18

async method: PageAssertions.NotToHaveURL

  • since: v1.20
  • langs: python
    • alias-java: hasURL

The opposite of [method: PageAssertions.toHaveURL].

param: PageAssertions.NotToHaveURL.urlOrRegExp

  • since: v1.18
  • urlOrRegExp <[string]|[RegExp]>

Expected URL string or RegExp.

option: PageAssertions.NotToHaveURL.timeout = %%-js-assertions-timeout-%%

  • since: v1.18

option: PageAssertions.NotToHaveURL.timeout = %%-csharp-java-python-assertions-timeout-%%

  • since: v1.18

async method: PageAssertions.toHaveScreenshot#1

  • since: v1.23
  • langs: js

This function will wait until two consecutive page screenshots yield the same result, and then compare the last screenshot with the expectation.

Usage

await expect(page).toHaveScreenshot('image.png');

Note that screenshot assertions only work with Playwright test runner.

param: PageAssertions.toHaveScreenshot#1.name

  • since: v1.23
  • name <[string]|[Array]<[string]>>

Snapshot name.

option: PageAssertions.toHaveScreenshot#1.timeout = %%-js-assertions-timeout-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#1.animations = %%-screenshot-option-animations-default-disabled-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#1.caret = %%-screenshot-option-caret-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#1.clip = %%-screenshot-option-clip-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#1.fullPage = %%-screenshot-option-full-page-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#1.mask = %%-screenshot-option-mask-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#1.omitBackground = %%-screenshot-option-omit-background-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#1.scale = %%-screenshot-option-scale-default-css-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#1.comparator = %%-assertions-comparator-%%

  • since: v1.29

option: PageAssertions.toHaveScreenshot#1.maxDiffPixels = %%-assertions-max-diff-pixels-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#1.maxDiffPixelRatio = %%-assertions-max-diff-pixel-ratio-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#1.threshold = %%-assertions-threshold-%%

  • since: v1.23

async method: PageAssertions.toHaveScreenshot#2

  • since: v1.23
  • langs: js

This function will wait until two consecutive page screenshots yield the same result, and then compare the last screenshot with the expectation.

Usage

await expect(page).toHaveScreenshot();

Note that screenshot assertions only work with Playwright test runner.

option: PageAssertions.toHaveScreenshot#2.timeout = %%-js-assertions-timeout-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#2.animations = %%-screenshot-option-animations-default-disabled-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#2.caret = %%-screenshot-option-caret-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#2.clip = %%-screenshot-option-clip-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#2.fullPage = %%-screenshot-option-full-page-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#2.mask = %%-screenshot-option-mask-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#2.omitBackground = %%-screenshot-option-omit-background-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#2.scale = %%-screenshot-option-scale-default-css-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#2.comparator = %%-assertions-comparator-%%

  • since: v1.29

option: PageAssertions.toHaveScreenshot#2.maxDiffPixels = %%-assertions-max-diff-pixels-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#2.maxDiffPixelRatio = %%-assertions-max-diff-pixel-ratio-%%

  • since: v1.23

option: PageAssertions.toHaveScreenshot#2.threshold = %%-assertions-threshold-%%

  • since: v1.23

async method: PageAssertions.toHaveTitle

  • since: v1.20
  • langs:
    • alias-java: hasTitle

Ensures the page has the given title.

Usage

await expect(page).toHaveTitle(/.*checkout/);
assertThat(page).hasTitle("Playwright");
import re
from playwright.async_api import expect

# ...
await expect(page).to_have_title(re.compile(r".*checkout"))
import re
from playwright.sync_api import expect

# ...
expect(page).to_have_title(re.compile(r".*checkout"))
await Expect(page).ToHaveTitle("Playwright");

param: PageAssertions.toHaveTitle.titleOrRegExp

  • since: v1.18
  • titleOrRegExp <[string]|[RegExp]>

Expected title or RegExp.

option: PageAssertions.toHaveTitle.timeout = %%-js-assertions-timeout-%%

  • since: v1.18

option: PageAssertions.toHaveTitle.timeout = %%-csharp-java-python-assertions-timeout-%%

  • since: v1.18

async method: PageAssertions.toHaveURL

  • since: v1.20
  • langs:
    • alias-java: hasURL

Ensures the page is navigated to the given URL.

Usage

await expect(page).toHaveURL(/.*checkout/);
assertThat(page).hasURL(".com");
import re
from playwright.async_api import expect

# ...
await expect(page).to_have_url(re.compile(".*checkout"))
import re
from playwright.sync_api import expect

# ...
expect(page).to_have_url(re.compile(".*checkout"))
await Expect(page).ToHaveURL(new Regex(".*checkout"));

param: PageAssertions.toHaveURL.urlOrRegExp

  • since: v1.18
  • urlOrRegExp <[string]|[RegExp]>

Expected URL string or RegExp.

option: PageAssertions.toHaveURL.timeout = %%-js-assertions-timeout-%%

  • since: v1.18

option: PageAssertions.toHaveURL.timeout = %%-csharp-java-python-assertions-timeout-%%

  • since: v1.18