e97badcca8
* docs(CONTRIBUTING.md): Add build step Without the build step, a fresh install without any previous builds would get: ``` $ npm test > playwright-internal@1.2.0-post test /Users/pw/code/playwright > cross-env BROWSER=all node --unhandled-rejections=strict test/test.js internal/modules/cjs/loader.js:1033 throw err; ^ Error: Cannot find module '../lib/rpc/server/dispatcher' Require stack: - /Users/pw/code/playwright/test/environments.js - /Users/pw/code/playwright/test/test.js at Function.Module._resolveFilename (internal/modules/cjs/loader.js:1030:15) at Function.Module._load (internal/modules/cjs/loader.js:899:27) at Module.require (internal/modules/cjs/loader.js:1090:19) at require (internal/modules/cjs/helpers.js:75:18) at Object.<anonymous> (/Users/pw/code/playwright/test/environments.js:23:34) at Module._compile (internal/modules/cjs/loader.js:1201:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1221:10) at Module.load (internal/modules/cjs/loader.js:1050:32) at Function.Module._load (internal/modules/cjs/loader.js:938:14) at Module.require (internal/modules/cjs/loader.js:1090:19) { code: 'MODULE_NOT_FOUND', requireStack: [ '/Users/pw/code/playwright/test/environments.js', '/Users/pw/code/playwright/test/test.js' ] } npm ERR! Test failed. See above for more details. ``` Fixes #2868. Co-authored-by: Andrey Lushnikov <aslushnikov@gmail.com> |
||
---|---|---|
.circleci | ||
.github | ||
browser_patches | ||
docs | ||
packages | ||
src | ||
test | ||
utils | ||
.appveyor.yml | ||
.editorconfig | ||
.eslintignore | ||
.eslintrc.js | ||
.gitattributes | ||
.gitignore | ||
.npmignore | ||
.travis.yml | ||
browsers.json | ||
CODE_OF_CONDUCT.md | ||
CONTRIBUTING.md | ||
index.d.ts | ||
index.js | ||
install-from-github.js | ||
LICENSE | ||
NOTICE | ||
package-lock.json | ||
package.json | ||
README.md | ||
SECURITY.md | ||
tsconfig.json |
🎭 Playwright
Docs | API reference | Changelog
Playwright is a Node library to automate 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 85.0.4182.0 | ✅ | ✅ | ✅ |
WebKit 14.0 | ✅ | ✅ | ✅ |
Firefox 78.0b5 | ✅ | ✅ | ✅ |
Headless execution is supported for all the browsers on all platforms.
Usage
npm i -D playwright
This installs Playwright and browser binaries for Chromium, Firefox and WebKit. Once installed, you can require
Playwright in a Node.js script and automate web browser interactions.
Capabilities
Playwright is built to automate the broad and growing set of web browser capabilities used by Single Page Apps and Progressive Web Apps.
- Scenarios that span multiple page, domains and iframes
- Auto-wait for elements to be ready before executing actions (like click, fill)
- Intercept network activity for stubbing and mocking network requests
- Emulate mobile devices, geolocation, permissions
- Support for web components via shadow-piercing selectors
- Native input events for mouse and keyboard
- Upload and download files
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,
locale: 'en-US',
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();
})();