Playwright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API.
Перейти к файлу
Pavel Feldman d19f10ef42
fix(geolocation): use values from context options (#463)
2020-01-13 13:32:44 -08:00
.ci Initial commit 2019-11-19 10:58:15 -08:00
.github/workflows Update webkit.yml 2020-01-09 17:07:22 -08:00
browser_patches devops: migrate to new CDN for browser builds (#467) 2020-01-13 13:27:03 -08:00
docs fix(geolocation): use values from context options (#463) 2020-01-13 13:32:44 -08:00
src fix(geolocation): use values from context options (#463) 2020-01-13 13:32:44 -08:00
test fix(geolocation): use values from context options (#463) 2020-01-13 13:32:44 -08:00
utils chore: replace CHROME with CHROMIUM (#465) 2020-01-13 10:13:28 -08:00
.appveyor.yml Initial commit 2019-11-19 10:58:15 -08:00
.cirrus.yml Initial commit 2019-11-19 10:58:15 -08:00
.editorconfig Initial commit 2019-11-19 10:58:15 -08:00
.eslintignore feat: basic d.ts file (#161) 2019-12-06 11:28:23 -08:00
.eslintrc.js lint: fixes (#85) 2019-11-26 08:19:02 -08:00
.gitignore feat(pw-web): generate playwright/web.js which can be used in the browser (#455) 2020-01-10 16:03:10 -08:00
.npmignore feat(pw-web): generate playwright/web.js which can be used in the browser (#455) 2020-01-10 16:03:10 -08:00
.travis.yml chore(ci): use bionic for travis 2019-12-05 15:18:55 -08:00
CODE_OF_CONDUCT.md Initial CODE_OF_CONDUCT.md commit 2019-11-15 10:32:47 -08:00
CONTRIBUTING.md docs: preparing readme for public release (#433) 2020-01-08 16:53:57 -08:00
DeviceDescriptors.js chore: cleanup code around device descriptors (#404) 2020-01-07 12:53:06 -08:00
Errors.js chrome: co-locate transport types (#236) 2019-12-12 21:30:49 -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
README.md Update README.md 2020-01-13 09:05:25 -08:00
SECURITY.md Initial SECURITY.md commit 2019-11-15 10:32:49 -08:00
chromium.js fix: async stacks should work now (#325) 2019-12-20 15:31:20 -08:00
firefox.js fix: async stacks should work now (#325) 2019-12-20 15:31:20 -08:00
index.d.ts feat(pw-web): generate playwright/web.js which can be used in the browser (#455) 2020-01-10 16:03:10 -08:00
index.js feat(pw-web): generate playwright/web.js which can be used in the browser (#455) 2020-01-10 16:03:10 -08:00
install.js chore: replace CHROME with CHROMIUM (#465) 2020-01-13 10:13:28 -08:00
package.json test: uncomment more webkit tests (#461) 2020-01-11 08:37:51 -08:00
tsconfig.json feat: basic d.ts file (#161) 2019-12-06 11:28:23 -08:00
web.d.ts feat(pw-web): generate playwright/web.js which can be used in the browser (#455) 2020-01-10 16:03:10 -08:00
webkit.js fix: async stacks should work now (#325) 2019-12-20 15:31:20 -08:00

README.md

Playwright

npm version

API | FAQ | Contributing

Playwright is a Node library to automate the Chromium, WebKit and Firefox browsers. Playwright is focused on enabling cross-browser web automation platform that is ever-green, capable, reliable and fast. Our primary goal with Playwright is to improve automated UI testing by eliminating flakiness, improving the speed of execution and offering insights into the browser operation. Playwright runs headless versions of these browsers by default, but can be configured to run the full versions.

Installation

npm i playwright

This installs Playwright along with its dependencies and the browser binaries. Browser binaries are about 50-100MB each, so expect the installation network traffic to be substantial.

Usage

Playwright can be used to create a browser instance, open pages, and then manipulate them. See API docs for a comprehensive list.

Examples

Page screenshot

This code snippet navigates to example.com in WebKit, and saves a screenshot.

const pw = require('playwright');

(async () => {
  const browser = await pw.playwright('webkit').launch(); // or 'chromium', 'firefox'
  const context = await browser.newContext();
  const page = await context.newPage();

  await page.goto('https://www.example.com/');
  await page.screenshot({ path: 'example.png' });

  await browser.close();
})();

Evaluate script

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

const pw = require('playwright');

(async () => {
  const browser = await pw.playwright('firefox').launch(); // or 'chromium', 'webkit'
  const context = await browser.newContext();
  const page = await context.newPage();

  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);

  await browser.close();
})();

Limitations

WebKit support on Windows is based on the WSL / Docker containers. We are working on the WinCairo-based version of the browser, but it'll be available later. Stay tuned!

Contributing to Playwright

Check out our contributing guide.

FAQ

Q: How does Playwright relate to Puppeteer?

We are the same team that built Puppeteer. Puppeteer proved that there is a lot of interest in the new generation of ever-green, capable and reliable automation drivers. With Playwright, we'd like to take it one step further and offer the same functionality for all the popular rendering engines. We'd like to see Playwright vendor-neutral and shared goverened.

With Playwright, we are making the APIs more testing friendly as well. We are taking the lessons learned from Puppeteer and incorporate them into the API, for example, user agent / device emulation is set up consistently on the BrowserContext level to enable multi-page scenarios, click now waits for the element to be available and visible by default, etc.

Playwright also aims at being even more cloud-friendly. Rather than a single page, BrowserContext abstraction is now central to the library operation. BrowserContexts are isolated, they can be either created locally or provided by the server-side factories.

All the changes and improvements above would require breaking changes to the Puppeteer API, so we chose to start with a clean slate instead. Due to the similarity of the concepts and the APIs, migration between the two is still a mechanical task.

Q: What about the WebDriver?

WIP

Q: Is Playwright ready?

Playwright is ready for your feedback. It respects semver, so please expect some API breakages as we release 1.0. All we can promise is that those breakages are going to be based on your feedback with the sole purpose of making our APIs better.

Playwright is being actively developed as we get to the feature parity across Chromium, Firefox and WebKit. Progress on each browser can be tracked on the Is Playwright Ready? page, which shows currently failing tests per browser.

Resources