Skip to main content

Writing tests


Playwright assertions are created specifically for the dynamic web. Checks are automatically retried until the necessary conditions are met. Playwright comes with auto-wait built in meaning it waits for elements to be actionable prior to performing actions. Playwright provides assertThat overloads to write assertions.

Take a look at the example test below to see how to write a test using web first assertions, locators and selectors.

package org.example;

import java.util.regex.Pattern;

import static;

public class App {
public static void main(String[] args) {
try (Playwright playwright = Playwright.create()) {
Browser browser = playwright.chromium().launch();
Page page = browser.newPage();

// Expect a title "to contain" a substring.

// create a locator
Locator getStarted = page.getByRole(AriaRole.LINK, new Page.GetByRoleOptions().setName("Get Started"));

// Expect an attribute "to be strictly equal" to the value.
assertThat(getStarted).hasAttribute("href", "/docs/intro");

// Click the get started link.;

// Expects page to have a heading with the name of Installation.
new Page.GetByRoleOptions().setName("Installation"))).isVisible();


Playwright provides assertThat overloads which will wait until the expected condition is met.

import java.util.regex.Pattern;
import static;



Locators are the central piece of Playwright's auto-waiting and retry-ability. Locators represent a way to find element(s) on the page at any moment and are used to perform actions on elements such as .click .fill etc. Custom locators can be created with the Page.locator() method.

import static;

Locator getStarted = page.locator("text=Get Started");

assertThat(getStarted).hasAttribute("href", "/docs/intro");;

Playwright supports many different locators like role text, test id and many more. Learn more about available locators and how to pick one in this in-depth guide.

import static;


Test Isolation

Playwright has the concept of a BrowserContext which is an in-memory isolated browser profile. It's recommended to create a new BrowserContext for each test to ensure they don't interfere with each other.

Browser browser = playwright.chromium().launch();
BrowserContext context = browser.newContext();
Page page = context.newPage();

What's Next