Go to file
Andrey Lushnikov 0b7f789de4
devops: try using another Github Actions event to trigger releases (#1931)
The [official
documentation](https://help.github.com/en/actions/language-and-framework-guides/publishing-nodejs-packages#publishing-packages-to-the-npm-registry)
suggests using `created` event, but it didn't work for us.

As someone mentioned on [github
community](https://github.community/t5/GitHub-Actions/Workflow-set-for-on-release-not-triggering-not-showing-up/m-p/53236#M8758),
it looks like the `created` event is actually issued when release draft
is first created.

Try using
[`published`](https://help.github.com/en/actions/reference/events-that-trigger-workflows#release-event-release)
event instead.
2020-04-22 22:52:32 -07:00
.circleci devops: add package-lock.json (#1859) (#1889) 2020-04-20 16:57:01 -07:00
.github devops: try using another Github Actions event to trigger releases (#1931) 2020-04-22 22:52:32 -07:00
browser_patches browser(webkit): ensure autorelease pools are drained on mac (#1933) 2020-04-22 21:49:00 -07:00
docs docs(verification.md): fix typo 2020-04-22 00:32:46 -07:00
packages chore: sync versions across packages (#1929) 2020-04-22 17:43:13 -07:00
src fix(downloads): fix acceptDownloads complaint (#1777) (#1923) 2020-04-22 17:02:15 -07:00
test fix(downloads): fix acceptDownloads complaint (#1777) (#1923) 2020-04-22 17:02:15 -07:00
utils devops: fix checking if branch is tip-of-tree when publishing @next (#1926) 2020-04-22 17:02:38 -07:00
.appveyor.yml devops: add package-lock.json (#1859) (#1889) 2020-04-20 16:57:01 -07:00
.cirrus.yml chore: windows bots via github actions (#678) 2020-01-28 18:04:51 -08:00
.editorconfig Initial commit 2019-11-19 10:58:15 -08:00
.eslintignore types: better types (#1166) 2020-03-20 01:30:35 -07:00
.eslintrc.js chore(lint): add @typescript-eslint/no-unnecessary-type-assertion rule (#898) 2020-02-07 13:38:50 -08:00
.gitattributes chore: windows bots via github actions (#678) 2020-01-28 18:04:51 -08:00
.gitignore devops: add package-lock.json (#1859) (#1889) 2020-04-20 16:57:01 -07:00
.npmignore types: better types (#1166) 2020-03-20 01:30:35 -07:00
.travis.yml devops: start releasing from Github Actions (#1890) 2020-04-20 17:45:29 -07:00
CODE_OF_CONDUCT.md Initial CODE_OF_CONDUCT.md commit 2019-11-15 10:32:47 -08:00
CONTRIBUTING.md docs(troubleshooting): add dependencies for firefox and webkit (#1461) 2020-03-21 17:58:08 -07:00
download-browser.js feat: introduce PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD env variable (#1892) 2020-04-21 16:47:16 -07:00
index.d.ts types: better types (#1166) 2020-03-20 01:30:35 -07:00
index.js feat: re-make global browser installation (#1506) 2020-03-24 00:08:00 -07:00
install-from-github.js chore: speedup npm install from a github checkout (#1545) 2020-03-25 22:32:54 -07: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: bring back DEBUG= logging (#1891) 2020-04-20 20:00:55 -07:00
package.json feat(browser): roll webkit to r1205 (#1922) 2020-04-22 14:50:56 -07:00
README.md docs(readme.md): drop FAQ (#1930) 2020-04-22 18:05:59 -07:00
SECURITY.md Initial SECURITY.md commit 2019-11-15 10:32:49 -08:00
tsconfig.json types: better types (#1166) 2020-03-20 01:30:35 -07:00

🎭 Playwright

npm version Chromium version Firefox version WebKit version Join Slack

API | Changelog | FAQ | Contributing

Playwright is a Node library to automate the Chromium, WebKit and Firefox browsers with a single API. It enables cross-browser web automation that is ever-green, capable, reliable and fast.

ver Linux macOS Win
Chromium 84.0.4117.0
WebKit 13.0.4
Firefox 76.0b5
  • Headless is supported for all the browsers on all platforms.

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.

Usage

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.

Once installed, Playwright can be used to create a browser instance, open pages and then automate interactions.

Examples

Page screenshot

This code snippet navigates to whatsmyuseragent.org in Chromium, Firefox and WebKit, and saves 3 screenshots.

const playwright = require('playwright');

(async () => {
  for (const browserType of ['chromium', 'firefox', 'webkit']) {
    const browser = await playwright[browserType].launch();
    const context = await browser.newContext();
    const page = await context.newPage();
    await page.goto('http://whatsmyuseragent.org/');
    await page.screenshot({ path: `example-${browserType}.png` });
    await browser.close();
  }
})();

Mobile and geolocation

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

const { webkit, devices } = require('playwright');
const iPhone11 = devices['iPhone 11 Pro'];

(async () => {
  const browser = await webkit.launch();
  const context = await browser.newContext({
    ...iPhone11,
    geolocation: { longitude: 12.492507, latitude: 41.889938 },
    permissions: ['geolocation']
  });
  const page = await context.newPage();
  await page.goto('https://maps.google.com');
  await page.click('text="Your location"');
  await page.waitForRequest(/.*preview\/pwa/);
  await page.screenshot({ path: 'colosseum-iphone.png' });
  await browser.close();
})();

Evaluate in browser context

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

const { firefox } = require('playwright');

(async () => {
  const browser = await firefox.launch();
  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();
})();

Intercept network requests

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

const { webkit } = require('playwright');

(async () => {
  const browser = await webkit.launch();
  const context = await browser.newContext();
  const page = await context.newPage();

  // Log and continue all network requests
  page.route('**', route => {
    console.log(route.request().url());
    route.continue();
  });

  await page.goto('http://todomvc.com');
  await browser.close();
})();

Contributing

Check out our contributing guide.

Resources