Go to file
RaiseYI 5e9d2b1e14 Improve repository documentation, configuration, and examples
Add new sections to `README.md`, create `CHANGELOG.md`, and update `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, and `.eslintrc.js`.

* **README.md**
  - Add an overview section to provide a better understanding of the project.
  - Add a getting started section with installation and first test instructions.
  - Add a section on running tests and checks.
  - Add a section on contributing to the project.

* **CHANGELOG.md**
  - Create a new file to document changes, new features, and bug fixes in each release.

* **CONTRIBUTING.md**
  - Add guidelines for coding standards, pull request process, and issue reporting.

* **CODE_OF_CONDUCT.md**
  - Add guidelines for community behavior and ensure a welcoming environment for all contributors.

* **.eslintrc.js**
  - Ensure that the ESLint configuration is properly set up and used.

* **.github/workflows**
  - Add GitHub Actions workflows for continuous integration and other automated tasks.

* **examples**
  - Add more examples and use cases to help users understand how to use the project effectively.

---

For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/microsoft/playwright?shareId=XXXX-XXXX-XXXX-XXXX).
2024-11-01 18:31:28 +08:00
.devcontainer chore: fixed devcontainer Docker usage (#3898) 2020-09-17 11:21:10 -07:00
.github Improve repository documentation, configuration, and examples 2024-11-01 18:31:28 +08:00
browser_patches chore: update browser patches to 09195c9 (#32877) 2024-09-30 05:14:45 -07:00
docs/src docs(best-practices): improve wording (#33342) 2024-10-29 16:27:14 +01:00
packages chore: support reverse in ansi2html, drop ansi-to-html (#33389) 2024-10-31 21:42:06 -07:00
tests chore: support reverse in ansi2html, drop ansi-to-html (#33389) 2024-10-31 21:42:06 -07:00
utils chore: bump Docker Node.js to 22 (#33348) 2024-10-29 21:04:13 +01:00
.editorconfig Initial commit 2019-11-19 10:58:15 -08:00
.eslintignore chore: update eslintignore to lint files in utils/ folders (#33218) 2024-10-22 11:52:20 +02:00
.eslintrc-with-ts-config.js chore: strengthen linting (#29669) 2024-02-26 16:52:28 -08:00
.eslintrc.js Improve repository documentation, configuration, and examples 2024-11-01 18:31:28 +08:00
.gitattributes feat: implement a new image comparison function (#19166) 2022-12-02 15:22:05 -08:00
.gitignore fix(screenshot): show image diff inline in errors list (#32997) 2024-10-10 16:49:17 -07:00
babel.config.json chore: move off babel proposals to plugins (#29053) 2024-01-18 17:50:52 -08:00
CHANGELOG.md Improve repository documentation, configuration, and examples 2024-11-01 18:31:28 +08:00
CODE_OF_CONDUCT.md Improve repository documentation, configuration, and examples 2024-11-01 18:31:28 +08:00
CONTRIBUTING.md Improve repository documentation, configuration, and examples 2024-11-01 18:31:28 +08:00
examples Improve repository documentation, configuration, and examples 2024-11-01 18:31:28 +08:00
LICENSE chore(license): use Apache 2.0 (#389) 2020-01-06 18:22:35 -08:00
NOTICE chore(license): add NOTICE (#309) 2019-12-19 12:19:54 -08:00
package-lock.json chore: support reverse in ansi2html, drop ansi-to-html (#33389) 2024-10-31 21:42:06 -07:00
package.json chore: experimental toMatchAriaSnapshot (#33014) 2024-10-14 14:07:19 -07:00
README.md Improve repository documentation, configuration, and examples 2024-11-01 18:31:28 +08:00
SECURITY.md chore(policy files): Update SECURITY.md to V0.0.9 (#31775) 2024-07-19 14:56:32 +02:00
SUPPORT.md docs: add SUPPORT.md (#32362) 2024-08-28 11:01:34 -07:00
tsconfig.json chore: address deprecated Vite warnings (#31618) 2024-07-10 22:32:08 +02:00

🎭 Playwright

npm version Chromium version Firefox version WebKit version Join Discord

Documentation | API reference

Playwright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API. Playwright is built to enable cross-browser web automation that is ever-green, capable, reliable and fast.

Linux macOS Windows
Chromium 131.0.6778.24
WebKit 18.0
Firefox 131.0

Headless execution is supported for all browsers on all platforms. Check out system requirements for details.

Looking for Playwright for Python, .NET, or Java?

Overview

Playwright is a powerful tool for browser automation and testing. It provides a unified API for automating browsers, making it easy to write tests that work across different browsers and platforms. With Playwright, you can automate tasks such as navigating web pages, interacting with elements, capturing screenshots, and more. It is designed to be reliable, fast, and capable of handling complex web applications.

Getting Started

To get started with Playwright, follow these steps:

  1. Install Playwright:

    npm install playwright
    
  2. Install the browsers:

    npx playwright install
    
  3. Write your first test:

    const { chromium } = require('playwright');
    
    (async () => {
      const browser = await chromium.launch();
      const page = await browser.newPage();
      await page.goto('https://example.com');
      await page.screenshot({ path: 'example.png' });
      await browser.close();
    })();
    
  4. Run the test:

    node test.js
    

For more detailed instructions and examples, refer to the Playwright documentation.

Installation

Playwright has its own test runner for end-to-end tests, we call it Playwright Test.

Using init command

The easiest way to get started with Playwright Test is to run the init command.

# Run from your project's root directory
npm init playwright@latest
# Or create a new project
npm init playwright@latest new-project

This will create a configuration file, optionally add examples, a GitHub Action workflow and a first test example.spec.ts. You can now jump directly to writing assertions section.

Manually

Add dependency and install browsers.

npm i -D @playwright/test
# install supported browsers
npx playwright install

You can optionally install only selected browsers, see install browsers for more details. Or you can install no browsers at all and use existing browser channels.

Running Tests and Checks

To run the tests and checks for your Playwright project, follow these steps:

  1. Run the tests:

    npx playwright test
    
  2. Run the linter:

    npm run lint
    
  3. Run the type checker:

    npm run tsc
    

For more information on running tests and checks, refer to the Playwright documentation.

Contributing

We welcome contributions to the Playwright project! If you would like to contribute, please follow these guidelines:

  1. Fork the repository and create a new branch for your contribution.
  2. Make your changes and ensure that the tests and checks pass.
  3. Write clear and concise commit messages.
  4. Submit a pull request with a detailed description of your changes.

For more information on contributing, refer to the CONTRIBUTING.md file.

Capabilities

Resilient • No flaky tests

Auto-wait. Playwright waits for elements to be actionable prior to performing actions. It also has a rich set of introspection events. The combination of the two eliminates the need for artificial timeouts - a primary cause of flaky tests.

Web-first assertions. Playwright assertions are created specifically for the dynamic web. Checks are automatically retried until the necessary conditions are met.

Tracing. Configure test retry strategy, capture execution trace, videos and screenshots to eliminate flakes.

No trade-offs • No limits

Browsers run web content belonging to different origins in different processes. Playwright is aligned with the architecture of the modern browsers and runs tests out-of-process. This makes Playwright free of the typical in-process test runner limitations.

Multiple everything. Test scenarios that span multiple tabs, multiple origins and multiple users. Create scenarios with different contexts for different users and run them against your server, all in one test.

Trusted events. Hover elements, interact with dynamic controls and produce trusted events. Playwright uses real browser input pipeline indistinguishable from the real user.

Test frames, pierce Shadow DOM. Playwright selectors pierce shadow DOM and allow entering frames seamlessly.

Full isolation • Fast execution

Browser contexts. Playwright creates a browser context for each test. Browser context is equivalent to a brand new browser profile. This delivers full test isolation with zero overhead. Creating a new browser context only takes a handful of milliseconds.

Log in once. Save the authentication state of the context and reuse it in all the tests. This bypasses repetitive log-in operations in each test, yet delivers full isolation of independent tests.

Powerful Tooling

Codegen. Generate tests by recording your actions. Save them into any language.

Playwright inspector. Inspect page, generate selectors, step through the test execution, see click points and explore execution logs.

Trace Viewer. Capture all the information to investigate the test failure. Playwright trace contains test execution screencast, live DOM snapshots, action explorer, test source and many more.

Looking for Playwright for TypeScript, JavaScript, Python, .NET, or Java?

Examples

To learn how to run these Playwright Test examples, check out our getting started docs.

Page screenshot

This code snippet navigates to Playwright homepage and saves a screenshot.

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

test('Page Screenshot', async ({ page }) => {
  await page.goto('https://playwright.dev/');
  await page.screenshot({ path: `example.png` });
});

Mobile and geolocation

This snippet emulates Mobile Safari on a device at given geolocation, navigates to maps.google.com, performs the action and takes a screenshot.

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

test.use({
  ...devices['iPhone 13 Pro'],
  locale: 'en-US',
  geolocation: { longitude: 12.492507, latitude: 41.889938 },
  permissions: ['geolocation'],
})

test('Mobile and geolocation', async ({ page }) => {
  await page.goto('https://maps.google.com');
  await page.getByText('Your location').click();
  await page.waitForRequest(/.*preview\/pwa/);
  await page.screenshot({ path: 'colosseum-iphone.png' });
});

Evaluate in browser context

This code snippet navigates to example.com, and executes a script in the page context.

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

test('Evaluate in browser context', async ({ page }) => {
  await page.goto('https://www.example.com/');
  const dimensions = await page.evaluate(() => {
    return {
      width: document.documentElement.clientWidth,
      height: document.documentElement.clientHeight,
      deviceScaleFactor: window.devicePixelRatio
    }
  });
  console.log(dimensions);
});

Intercept network requests

This code snippet sets up request routing for a page to log all network requests.

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

test('Intercept network requests', async ({ page }) => {
  // Log and continue all network requests
  await page.route('**', route => {
    console.log(route.request().url());
    route.continue();
  });
  await page.goto('http://todomvc.com');
});

Resources