142 строки
5.7 KiB
Markdown
142 строки
5.7 KiB
Markdown
# 🎭 Playwright
|
|
|
|
[![npm version](https://img.shields.io/npm/v/playwright.svg?style=flat)](https://www.npmjs.com/package/playwright) [![Join Slack](https://img.shields.io/badge/join-slack-infomational)](https://join.slack.com/t/playwright/shared_invite/enQtOTEyMTUxMzgxMjIwLThjMDUxZmIyNTRiMTJjNjIyMzdmZDA3MTQxZWUwZTFjZjQwNGYxZGM5MzRmNzZlMWI5ZWUyOTkzMjE5Njg1NDg) <!-- GEN:chromium-version-badge -->[![Chromium version](https://img.shields.io/badge/chromium-90.0.4396.0-blue.svg?logo=google-chrome)](https://www.chromium.org/Home)<!-- GEN:stop --> <!-- GEN:firefox-version-badge -->[![Firefox version](https://img.shields.io/badge/firefox-86.0b5-blue.svg?logo=mozilla-firefox)](https://www.mozilla.org/en-US/firefox/new/)<!-- GEN:stop --> <!-- GEN:webkit-version-badge -->[![WebKit version](https://img.shields.io/badge/webkit-14.1-blue.svg?logo=safari)](https://webkit.org/)<!-- GEN:stop -->
|
|
|
|
## [Documentation](https://playwright.dev) | [API reference](https://playwright.dev/#?path=docs/api.md)
|
|
|
|
Playwright is a Node.js library to automate [Chromium](https://www.chromium.org/Home), [Firefox](https://www.mozilla.org/en-US/firefox/new/) and [WebKit](https://webkit.org/) 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 <!-- GEN:chromium-version -->90.0.4396.0<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: |
|
|
| WebKit <!-- GEN:webkit-version -->14.1<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: |
|
|
| Firefox <!-- GEN:firefox-version -->86.0b5<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: |
|
|
|
|
Headless execution is supported for all the browsers on all platforms. Check out [system requirements](https://playwright.dev/#?path=docs/intro.md&q=system-requirements) for details.
|
|
|
|
## 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.
|
|
|
|
* [Getting started](https://playwright.dev/docs/intro)
|
|
* [Installation configuration](https://playwright.dev/docs/installation)
|
|
* [API reference](https://playwright.dev/docs/api/class-playwright)
|
|
|
|
## 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.
|
|
|
|
```js
|
|
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.
|
|
|
|
```js
|
|
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.
|
|
|
|
```js
|
|
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.
|
|
|
|
```js
|
|
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();
|
|
})();
|
|
```
|
|
|
|
## Resources
|
|
|
|
* [Documentation](https://playwright.dev/#?path=docs/README.md)
|
|
* [API reference](https://playwright.dev/#?path=docs/api.md)
|
|
* [Community showcase](https://playwright.dev/#?path=docs/showcase.md)
|
|
* [Contribution guide](CONTRIBUTING.md)
|
|
* [Changelog](https://github.com/microsoft/playwright/releases)
|