Current Status
- Chromium 83.0.4090.0. Tests: 972 passing, 4 failing.
- Webkit 13.0.4. Tests: 905 passing, 6 failing.
- Firefox 74.0b10. Tests: 873 passing, 36 failing.
Detailed status can be found at [IsPlaywrightReady?](https://aslushnikov.github.io/isplaywrightready/)
Highlights
- There is no extra window when launching in headful mode.
- Default viewport has been changed from 800x600 to 1280x720.
- Published [recipes](https://github.com/microsoft/playwright/blob/v0.12.0/docs/ci.md) for popular CI environments.
- Playwright now includes a carefully crafted `index.d.ts` file with documentation inlined from [api.md](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md). Any type-related [issues](https://github.com/microsoft/playwright/issues/new/choose) are welcome.
- Many APIs are now available on browser context, for example [`browserContext.route(url, handler)`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#browsercontextrouteurl-handler). This makes it easier to setup context once and ensure that all pages and popups behave consistently.
- Many actions (for example, [`page.click(selector[, options])`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#pageclickselector-options) or [`page.evaluate(pageFunction[, arg])`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#pageevaluatepagefunction-arg)) by default wait before and after performing an action to facilitate linear workflow.
- Before action: input actions like `click` or `fill` wait for the element to be present in the dom, displayed, stop moving and receive pointer events. This behavior can be disabled by passing `{force: true}` option.
- After action: many actions wait for any triggered navigations to finish. Option `waitUntil` determines the "navigation finished" condition, for example `load` or `domcontentloaded`.
This change eliminates the need for explicit waits:
js
// Waits for the link to be present and clickable,
// clicks it and waits for the navigation to finish.
await page.click('a');
// Ready to use.
console.log(await page.title());
Previously, it was necessary to wait for preconditions and postconditions to avoid flakiness:
js
// Waits for the link to be present.
// Not needed anymore.
await page.waitForSelector('a');
await Promise.all([
// Waits for the triggered navigation to finish.
// Not needed anymore.
page.waitForNavigation(),
// Clicks the link.
page.click('a'),
]);
// Ready to use.
console.log(await page.title());
- Evaluation functions (for example, [`page.evaluate(pageFunction[, arg])`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#pageevaluatepagefunction-arg)) now accept nested handles inside objects/arrays, but only take a single argument.
js
const x = await page.evaluateHandle(() => window.scrollX);
const y = await page.evaluateHandle(() => window.scrollY);
// Old style, does not work anymore:
await page.evaluate((x, y) => x + y, x, y);
// New style, passing an object:
await page.evaluate(({x, y}) => x + y, {x, y});
// New style, passing an array:
await page.evaluate(([x, y]) => x + y, [x, y]);
// New style, passing arbitrary object structure with handles inside:
await page.evaluate(({ scrollOffset }) => scrollOffset.x + scrollOffset.y, { scrollOffset: { x, y }});
Breaking API Changes
- BrowserContext
- `browserContext.setCookies()` is renamed to [`browserContext.addCookies(cookies)`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#browsercontextaddcookiescookies).
- `browserContext.setPermissions()` is renamed to [`browserContext.grantPermissions(permissions[, options])`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#browsercontextgrantpermissionspermissions-options) and grants additional permissions instead of overriding entire permissions list.
- BrowserType
- `browserType.devices` is removed.
- `browserType.downloadBrowserIfNeeded()` is removed.
- `browserType.errors` is removed.
- `browserType.launchPersistent()` is renamed to [`browserType.launchPersistentContext(userDataDir[, options])`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#browsertypelaunchpersistentcontextuserdatadir-options).
- ChromiumTarget
- `ChromiumTarget`, related events and methods are removed. Use [`browserContext.on('page')`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#event-page), [`chromiumBrowserContext.on('backgroundpage')`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#event-backgroundpage) and [`chromiumBrowserContext.on('serviceworker')`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#event-serviceworker).
- `chromiumTarget.createCDPSession` is moved to [`chromiumBrowserContext.newCDPSession(page)`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#chromiumbrowsercontextnewcdpsessionpage).
- ElementHandle
- `elementHandle.click({relativePoint})` - `relativePoint` is renamed to [`position`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#elementhandleclickoptions).
- [`elementHandle.click({clickCount})`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#elementhandleclickoptions) - `clickCount` now clicks multiple times, instead of producing a single event with a `clickCount` property.
- `elementHandle.select()` is renamed to [`elementHandle.selectOption(values[, options])`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#elementhandleselectoptionvalues-options).
- `elementHandle.tripleclick()` is removed.
- `elementHandle.visibleRatio()` is removed.
- Frame
- `frame.click(selector, {relativePoint})` - `relativePoint` is renamed to [`position`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#frameclickselector-options).
- [`frame.click(selector, {clickCount})`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#frameclickselector-options) - `clickCount` now clicks multiple times, instead of producing a single event with a `clickCount` property.
- `frame.select()` is renamed to [`frame.selectOption(selector, values[, options])`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#frameselectoptionselector-values-options).
- `frame.tripleclick()` is removed.
- [`frame.waitForLoadState([state[, options]])`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#framewaitforloadstatestate-options) now takes a separate `state` parameter.
- Keyboard
- `keyboard.sendCharacters()` is renamed to [`keyboard.insertText(text)`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#keyboardinserttexttext).
- Page
- `page.on('workercreated')` is renamed to [`page.on('worker')`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#event-worker).
- `page.on('workerdestroyed')` is moved to [`worker.on('close')`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#event-close-2).
- `page.click(selector, {relativePoint})` - `relativePoint` is renamed to [`position`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#pageclickselector-options).
- [`page.click(selector, {clickCount})`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#pageclickselector-options) - `clickCount` now clicks multiple times, instead of producing a single event with a `clickCount` property.
- `page.evaluateOnNewDocument()` is renamed to [`page.addInitScript(script[, arg])`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#pageaddinitscriptscript-arg).
- [`page.route(url, handler)`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#pagerouteurl-handler) handler function now accepts two parameters: [`Route`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#class-route) and [`Request`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#class-request). Routing methods `abort`, `continue` and `fulfill` are only available on the `Route` class.
- `page.select()` is renamed to [`page.selectOption(selector, values[, options])`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#pageselectoptionselector-values-options).
- `page.tripleclick()` is removed.
- [`page.waitForLoadState([state[, options]])`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#pagewaitforloadstatestate-options) now takes a separate `state` parameter.
- Request
- `request.redirectChain()` is replaced with [`request.redirectedFrom()`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#requestredirectedfrom) and [`request.redirectedTo()`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#requestredirectedto).
- Response
- `response.buffer()` is renamed to [`response.body()`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#responsebody).
- Selectors
- [`selectors.register(name, script)`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#selectorsregistername-script) now requires a `name` parameter.
New APIs
- BrowserContext
- [`browserContext.setExtraHTTPHeaders(headers)`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#browsercontextsetextrahttpheadersheaders) allows to specify additional HTTP headers to be sent with every request in every page in the browser context.
- [`browserContext.setHTTPCredentials(httpCredentials)`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#browsercontextsethttpcredentialshttpcredentials) allows to handle HTTP authentication.
- [`browserContext.addInitScript(script[, arg])`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#browsercontextaddinitscriptscript-arg) allows to add a script to be evaluated in all frames of all pages in the browser context before the frame loads.
- [`browserContext.exposeFunction(name, playwrightFunction)`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#browsercontextexposefunctionname-playwrightfunction) allows to expose a function which can be called from any page in the browser context.
- [`browserContext.route(url, handler)`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#browsercontextrouteurl-handler) allows to intercept certain network requests from all pages in the browser context.
- [`browserContext.setOffline(offline)`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#browsercontextsetofflineoffline) emulates being offline.
- [`browserContext.grantPermissions(permissions[, options])`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#browsercontextgrantpermissionspermissions-options) and [`browser.newContext([options])`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#browsernewcontextoptions) `permissions` option can omit `origin` to grant permissions to all origins.
- [`browserContext.on('page')`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#event-page) event is emitted when a new page is opened in the browser context. This allows to handle popups originated by link clicks or `window.open()` calls.
- Page
- [`page.frame(options)`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#pageframeoptions) finds a frame based on its `name` or `src`.
- [`page.press(selector, key[, options])`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#pagepressselector-key-options) is a shortcut to [`elementHandle.press(key[, options])`](https://github.com/microsoft/playwright/blob/v0.12.0/docs/api.md#elementhandlepresskey-options).
Bug Fixes
8 - INTERNAL: run all the tests with npm test
720 - Setting permissions are flaky in firefox
813 - [BUG] website does not extend to full size
822 - [BUG] Cannot open file:// URLs with Firefox
844 - [BUG] WebKit scrollbars are not hidden
914 - [BUG and temporary fix] Open Firefox as the frontmost window (macOS-specific)
950 - [BUG] Chromium prints 'Connection terminated while reading from pipe' when closing browser
1030 - [BUG] chromium and webkit screenshot ignoring screenshot: clip: height option property
1078 - [BUG] Always launch 2 tabs or 2 windows
1085 - [BUG] Playwright requires manual install of browsers
1120 - [Question] `text=` selector does not match case-insensitive by default
1169 - [BUG] combined selector does not continue matching after first failure
1184 - [BUG] NPM proxy configuration is not respected
1212 - [BUG] Documentation ambiguous for browser.contexts()
1214 - [BUG] Setting slowMo to 250 ms to examples in README.md times out the test cases with headless: false
1258 - [REGRESSION]: Chromium page will not close after opening session
1265 - [BUG][WebKit] fill/type/press do not work in iframes
1269 - [BUG] Cannot set cookie in juggler
1288 - [BUG] bundle `c:\windows\system32\msvcp140_2.dll` on webkit win
Raw Notes
08b94ee - chore: mark version v0.12.0 (1497)
2225608 - chore: add logging to the testing server (1505)
8bf8339 - docs(showcase): updated showcase (1481)
8d5433c - fix(screenshotter) validateScreeshotOptions typo (1509)
4f89e40 - test: fix flaky interception test (1508)
b778789 - feat: re-make global browser installation (1506)
7ef394b - chore(chromium): remove CRTarget, use CRPage and CRServiceWorker instead (1436)
5a93872 - docs: add upload keyword to filechooser (1496)
bfb24e6 - chore: update releasing guide (1503)
7efff97 - fix(chromium): properly handle failures to set override (1498)
5bf9f22 - fix(docs): consider argument to be optional in evaluate (1500)
c28c5a6 - browser(firefox): make Runtime a global object shared between sessions (1458)
c0c9b7f - test: make debugp collect IO (take 2) (1493)
afbc2f2 - test(firefox): enable passing "userDataDir option should restore cookies" (1487)
05dc89b - chore: update release guide (1495)
e139d4c - feat(firefox): roll to 1051 (1494)
1a25a4e - fix(doclint): support lists in comments (1492)
6390645 - fix(testrunner): attribute unhandle promise reject to a single worker (1491)
de0a2d1 - api(waitForLoadState): move waitUntil to be a first parameter (1490)
45a175d - fix(chromium): ignore lifecycle events for the initial empty page (1486)
1ddf051 - Revert "test: make debugp collect IO (1485)"
b1bebda - test: make debugp collect IO (1485)
a74e23a - feat: support `PLAYWRIGHT_GLOBAL_INSTALL=1` env variable (1470)
15fddb5 - api(click): rename offset to position (1488)
a570290 - docs(examples): update main readme to point to examples + add a file uploads example (1484)
9826fd6 - browser(firefox): disable update, setting sync and other non-testing features (1480)
15ebe1c - feat(exposeFunction): implement context-level expose on firefox (1478)
23e5d80 - test: uncomment slow ff tests (1479)
049fdf7 - browser(firefox): implement Browser.addBinding (1477)
c68cee9 - feat(offline): implement offline in firefox (1476)
ac5852f - browser(firefox): implement offline emulation (1475)
6e8895f - fix(firefox): make interception, locale and geolocation work on browser context level (1472)
93954fe - chore: fix .local-browsers path into .gitignore (1464)
fb7b919 - browser(firefox): make interception, locale and geolocation work on browser context level (1469)
3f90c09 - tests: mark popup tests as passing on Firefox (1466)
1b08797 - tests(ff): uncomment a couple of firefox tests (1465)
9e95844 - docs(troubleshooting): add dependencies for firefox and webkit (1461)
ac02a6b - browser(firefox): issue Page.ready at the right time (1462)
670ce7a - chore: remove various watchers, use FrameTask directly (1460)
00c27ea - docs(readme): fix link to examples
6df17c6 - docs(examples): setup get started with examples guide (1441)
60a248e - test: add test for Map as eval argument (1457)
34cc358 - tests(webkit): reenable should await promise from popup (1447)
e115e8e - tests: mark tests that launch() twice or use fixtures as slow (1455)
5a42cbd - fix(permissions): manage permissions on the proxy level in webkit (1451)
96c9c81 - browser(firefox): fix bug in Juggler with clashing method names (1456)
e210e56 - feat(lang): emulate language on firefox (1453)
21630d6 - devops: strictly configure build folder for Firefox builds (1454)
c539325 - feat(geo): implement geo override in ff (1438)
840e69b - browser(firefox): emulate language (1452)
5fc1a04 - browser(webkit): manager permissions on the proxy level (1450)
bae56ea - fix(chromium): support main resource request interception for popups (1449)
053bab1 - browser(webkit): correctly detect Promise created in another window (1446)
4320d4b - test: fix link navigation test so that it passes in Chromium (1448)
16c7a5b - api(eval): accept zero or one arguments in all evaluation functions (1431)
fcdfa9c - browser(firefox): implement geolocation overrides (1437)
fa02b84 - test(types): add test for types (1445)
825555c - types: better types (1166)
f1d97b0 - chore(docs): remove remaining mentions of Chromium targets (1435)
535b484 - api(context): get rid of PageEvent (1433)
3ed9970 - api(chromium): add ChromiumBrowserContext.serviceWorkers() (1416)
c669674 - feat(chromium): roll Chromium to 751710 (1434)
ea99908 - fix(eval): adopt nested handles (1430)
f5ecbff - devops: remake downloading logic (1419)
2af07ce - chore: rework disposers into a frame task (1413)
7bd9246 - fix(PageEvent): properly wait for initial navigation in chromium and webkit (1412)
b0749e3 - fix(docs): fixup and lint optionals and return values in api.md (1376)
741e2d1 - fix(docs): lint and fix all internal links in api.md
a1929e2 - feat(types): better types for nested handles (1424)
bfcffbb - browser(webkit): introduce Playwright.windowOpen protocol event (1420)
dd850ad - api(eval): allow non-toplevel handles as eval arguments (1404)
045277d - docs(chore): fix link in troubleshooting (1422)
b8e79e6 - chore(chromium): remove obsolete target related code (1417)
049b336 - api(devices): extract isMobile/hasTouch from viewport (1415)
39e5eb7 - feat(devices): remove name from device objects (1414)
e4225ad - feat(permissions): make origin optional (1406)
8401462 - test(web): Remove unused variable (1410)
a9ab9b0 - fix(testrunner): sourcemapify stack traces for test errors (1409)
edd2fee - browser(firefox): grant permissions to all origins (1405)
3960b17 - fix(testrunner): fit.fail should run the test (1407)
aa32d35 - fix(tests): remove flaky load event from auto-waiting tests (1399)
64b175c - api(waitForLoadState): restore it (1390)
6731d37 - api(network): replace redirectChain with redirectedFrom/redirectedTo (1401)
6dcd6a6 - fix(types): jsHandle.getProperty should never resolve to null (1402)
5816ec5 - fix(testrunner): dedup focused tests and suites by id (1393)
e7eeefe - chore(testrunner): separate expectations from run mode (1395)
951126a - feat(chromium): roll Chromium to r750417 (1398)
e4991a1 - tests: add some failing page event tests (1394)
e692dd6 - api(cdp): rename ChromiumSession to CDPSession (1380)
19dd233 - devops: remove verbose on WebKit Win on Github Actions
a96dec5 - fix(webkit): emit close on pages before clearing them (1386)
69be12a - api(route): pass Route object instead of Request to route handlers (1385)
2647911 - fix(setContent): handle inner _waitForLoadState rejection (1382)
601d57a - test: add a test for popup with window features (1381)
9b86c63 - api: make BrowserContext.pages() synchronous (1369)
8aba111 - api(cdp): rename createSession to newCDPSession (1378)
b1a3b23 - api(request): make request.response a promise (1377)
24d4fb1 - api(click): remove tripleclick, respect clickCount (1373)
8c532bd - api(press): remove text option (1372)
e1d3196 - api(*.selectOption): renamed from *.select (1371)
064099a - api(keyboard.insertText): renamed from sendCharaters (1370)
a11e8f0 - devops(circleci): run all tests on all browsers
9aa56a6 - api(browserType): remove devices, errors (1368)
0d7cb29 - test: continue running tests after crash, report crashes separately (1362)
cfd3ae2 - api(addCookies): setCookies -> addCookies (1367)
3fa4255 - api: make request.postData() return null instead of undefined (1366)
be83cba - fix(doclint): correctly get versions on windows (1350)
245c1fa - fix(docs): a typo in showcase (1361)
e382bb3 - api: remove 'commit' phase, actions to wait until 'domcontentloaded' by default (1358)
7c59f9c - fix: do not wait for navigations while evaluating injected source (1347)
11c3c11 - feat(webkit): roll webkit to r1179
f92c95c - feat(firefox): roll Firefox to r1042 (1357)
704fe6d - fix(testrunner): fix reporting focused tests
1cd00bd - feat(testrunner): allow filtering by name and show all focused tests (1354)
b43f33f - api(review): misc changes to API. (1356)
7fe5656 - browser(webkit): fix win cookies expires (1355)
b3f87e8 - docs(api.md): Fix incorrect link to PageEvent (1353)
c1ef683 - api: remove waitForLoadState() in favor of PageEvent.page(options) (1323)
9b8f4a2 - test(webkit): uncomment fixed viewport screenshot tests (1346)
7e8ab8a - test: await setInputFiles in flaky input tests (1345)
823fffa - test: declare setInterval click test as undefined behavior (1343)
5d4fdd0 - feat(webkit): roll webkit to 1178 (1339)
3b85bf9 - browser(firefox): handle message manager `error` event without error (1344)
6b50c8f - browser(webkit): follow up 3 (1342)
13c2f65 - docs(selectors): clarify selector conversions
c044227 - browser(webkit): follow up 2 (1340)
2da705d - browser(webkit): follow up to roll (1337)
4a18f0f - browser(webkit): roll to ToT 3/11/2020 (1335)
128157d - browser(webkit): rename Browser domain to Playwright (1333)
401a916 - test(webkit): uncomment clearCookies test w/ right expectations
d08a0f0 - browser(webkit): account for page scale when screenshotting (1332)
3dd4945 - fix(chromium): install binding function during initialization (1320)
65d10a5 - fix: re-implement slow-mo transport without message serialization (1328)
a24cce8 - devops: fix protocol generation with root on Linux (1327)
6b711f5 - test(webkit): unblock and uncomment sync window.stop test
16d5a9c - tests(runner): support DEBUGP for timing out tests (1324)
0d2ae91 - fix(test): enable presssing in frames test (1326)
0cff9df - test: add failing test for clicking and oopifs (1325)
0077b42 - feat(webkit): emulate device size (1318)
044f774 - test: unflake should fail when frame detaches
59f2e88 - test: mark test as flaky on Firefox (1321)
ac5b518 - test: mark as flaky according to the new policy (1322)
23cf3be - api: make request.frame() non-null (1319)
0ce8efa - test: rework testrunner workers (1296)
a9b7bcf - test(webkit): expect cookies to be deleted after reload
d542ef8 - fix(testrunner): handle uncaught errors (1317)
e2616e4 - browser(webkit): override global permissions (1315)
92aa4f3 - test: stop sourceServer as well (1314)
38c3837 - test: remove test which is inherently racy (1313)
d5a2781 - fix(chromium): do not await extra promises in initialize() to attach early enough (1311)
008e0b2 - browser(webkit): emulate screen size (1310)
ea6978a - api(popups): expose BrowserContext.route() (1295)
adee9a9 - test: mark `worker.url()` API coverage as missing
e2a0d61 - docs(showcase): Add playwright-test to showcase (1283)
72ae5c8 - test: remove stray test (1302)
27d039a - browser(webkit): mark user gesture in frames (1304)
9bd3711 - fix(context): reliably fire BrowserContext.Close event when browser is closing (1277)
27eb25a - test: disable flaky test on Firefox Linux
eb2ca70 - api(route): allow fulfilling with a file path (1301)
cf46f1b - test(chromium): mark passing popup tests as passing (1297)
ca5ce7d - test: disable flaky worker tests on firefox
0fbc7af - chore(targets): create page targets only when attached to them (1278)
e650628 - fix(chromium): fix device-related media queries (1299)
a61d066 - test: add failing test for min-device-width media queries (1298)
c43de22 - chore(wk, ff): simplify target management (1279)
c8bbf88 - devops: bundle mvscp140_2.dll with windows webkit (1293)
2fa2421 - fix(webkit): fail the 204 navigations (1260)
3dc48f9 - chore: output both received value and diff for string expected results (1287)
c881248 - docs(contributing.md): update CONTRIBUTING.md (1286)
071ee06 - chore: normalize NPM scripts (1285)
e78f0f7 - feat(firefox): roll Firefox to r1041 (1281)
d1ef0c8 - fix(wk,ff): properly support getting and setting non-session cookies (1280)
bfd32fe - doc: fix typos (1284)
78bd29d - fix(click): work around input alignment on chromium (1282)
996f97a - browser(firefox): roll Firefox to current beta (1276)
68b4079 - chore: remove WKPage._sessions (1270)
aee6324 - feat(firefox): roll firefox (1273)
3c35d7b - api(waitFor): click(waitFor) -> click(force) (1275)
578880c - test: mark test as slow
a0e12e0 - feat(testrunner): support .slow() for slow tests (1274)
e604acd - test: disable flaky test on WebKit
8211287 - fix(session): use isolated root session for client page sessions (1271)
3fa000f - api(waitForSelector): bring it back (1272)
29f2430 - browser(firefox): merge Target domain into Browser, rework default context attach (1259)
119df5a - feat(nowait): allow waitUntil:nowait for actions (1264)
c494944 - api(popups): move Page.authenticate to BrowserContext.setHTTPCredentials (1267)
ca6faf2 - chore: properly mark failint tests
cf820b5 - test: mark failing tests on WebKit
8cc7d43 - tests: disable failing test on chromium
d114620 - chore: remove WKPageProxy, use WKPage instead (1256)
677ebf8 - test: mark "clicking anchor should await navigation" as failing on chromium
f3734c3 - test: mark "should await navigating specified target" as failing on chromium
3288057 - test(webkit): disable failing wk test
a802b00 - test: oops - fdescribe
5c9ebfa - chore(ci): bump checkout action to v2 (1263)
49c1161 - api(press): bump .press to the page/frame level (1262)
2724157 - feat(waitUntil): allow waiting for navigation from clicks, etc (1255)
9c80c9e - browser(webkit): don't leak pages on window.open (1261)
1d770af - api: waitForElement accepts waitFor: attached|detached|visible|hidden (1244)
9bc6dce - feat(api): introduce BrowserContext.waitForEvent (1252)
8c9933e - browser(firefox): move Juggler to top-level (1254)
9d3bff1 - browser(firefox): implement Browser.setHTTPCredentials (1251)
e5f82af - api(popups): emit PageEvent immediately, and resolve page() once initialized (1229)
c734b4b - feat(click): start wire auto-waiting click in firefox (1233)
e770d70 - fix(chromium): do not create default page and context in headless (1247)
b0d037e - browser(firefox): fix flaky permissions in Firefox (1249)
cd8714d - tests: skip failing waitForNavigation test in Chromium (1248)
20c3263 - browser(firefox): follow-up with SimpleChannel unification (1246)
2cd727f - browser(firefox): signal link click (1236)
665888d - feat(popups): auto-attach to all pages in Chromium (1226)
aabdac8 - api: remove Page.setCacheEnabled (1231)
1bf5b61 - browser(firefox): move workers to use SimpleChannel (1232)
4fd2312 - chore: introduce webkit cheatsheet
a69c85f - chore: added ff cheat sheet
11f68ba - feat(cr, wk): make clicks, input and evaluate await scheduled navigations (1200)
7f9df94 - api(popups): move Page.setOfflineMode -> BrowserContext.setOffline (1223)
3bedc60 - fix(dispose): do not await inner handle dispose (1230)
5ee744c - api(page.frame): allow looking up frames by name (1228)
6fb5168 - feat(chromium): roll Chromium to v747023 (1227)
5ff660d - feat(navigation): waitForNavigation/goto should not wait until response finished (1225)
3127840 - browser(firefox): introduce SimpleChannel (1209)
82baf61 - feat(webkit): roll webKit to r1168 (1224)
56e25c2 - docs: create development dir for non-user related docs (1217)
dbfeda2 - feat(webkit): roll to 1167 (1221)
2d4317d - docs: fix `browser.contexts()` description (1220)
f5a530e - docs(showcase): Add headlesstesting.com (1218)
262ee7c - browser(webkit): fix the pool leaks on mac (1219)
d6e265f - docs(readme): add network interception example (1216)
14a7d1c - chore: bump proxy-from-env dependency (1210)
7787624 - browser(webkit): fix delete context stall, emit schedule load (1211)
771793f - test(context): test that context.close() works for empty context (1205)
8aa88d5 - fix(doc): check and update optional types in the api (1206)
f4e9b50 - api: declare not supporting isMobile on Firefox (1207)
33f3e57 - test: skip flaky 'Page.goto extraHttpHeaders should be pushed to provisional page' (1203)
1c4619e - fix(chromium/webkit): fix a race between Page.enable and Page.getResourceTree (1201)
15c70c9 - fix(click): timing out in page while waiting for interactable should have proper error (1199)
23790f7 - browser(webkit): send reply to deleteContext even if there are no pages in it (1204)
fcfe887 - feat(select): don't accept undefined as a value (1202)
4556513 - chore(test): test cleanup (1198)
6c6cdc0 - api(popup): introduce BrowserContext.exposeFunction (1176)
1b863c2 - fix(screenshots): simplify implementation, allow fullPage + clip, add tests (1194)
2ec9e6d - test: cleanup some test files (1195)
9f3ccb4 - browser(webkit): wait for all pages to close in deleteContext (1197)
4a9a155 - test: enable page opener test on WebKit (1193)
3eec2d0 - docs(ci): list sample configurations for ci (1196)
ce3398b - browser(webkit): allow scripts in inspected pages to create popups (1192)
a3ed301 - fix(docs): page.coverage type (1189)
42aa70f - chore(ci): run all browser tests on Travis again
2711891 - chore(ci): use bionic image on circle ci
019eaa4 - chore(ci): different attempt to publish on Travis
ec3ee66 - chore(docs): optionally install XVFB in docker
0188889 - chore(ci): fix publish_all_packages.sh on travis
64e5e21 - chore(ci): forcefully login NPM on CI if NPM_AUTH_TOKEN is set
a40f562 - chore(ci): add debug info for publish_all_packages
bccdaec - chore(ci): add circle ci (1188)
31e26a2 - fix(api): fire BrowserContext.Page event in WebKit and Firefox (1186)
497a74d - chore(ci): fix publishing next on travis
ed2de2c - chore(ci): test if travis can publish packages
62e2570 - chore: fix utils/apply_next_version.js
57c45f0 - fix: properly publish all packages on travis (1187)
342a2cf - fix(selectors): continue matching after first fail for combined selectors (1185)
342e79c - test: mark some tests as skipped (3)
2f98b5e - test: mark some tests as skipped (2)
ba06fb2 - test: mark some tests as skipped
1186998 - fix(click): wait for element to be displayed before scrolling into view (1182)
db9a243 - docs(showcase): rename playwright-controller to playwright-fluent (1183)
a57978a - api(chromium): remove Target from public API (1163)
f242e0c - fix: make Transport.send() synchronous (1177)
5bd6e49 - test: it.skip skips and it.fail expects to fail now (1178)
08fbc92 - feat: support `PLAYWRIGHT_DOWNLOAD_HOST` (1179)
d5951b4 - fix: properly download browsers (1173)
cbf65a9 - test: chain test modifiers (1175)
e3ec6b2 - docs(showcase): add playwright-controller (1171)
eb1a9eb - chore: rename prepare.js into install-from-github.js
eeceda4 - chore(ci): re-enable browser tests on travis
b20b323 - chore(ci): another attempt to program in .travis.yml
8fc519d - chore(ci): another try to publish edge version
96e7132 - chore(ci): try to publish new next
ac2f04f - api(selectors): pass selector name when registering, allow file path (1162)
d511d7d - chore(ci): use TRAVIS_NEXT_NUMBER instead of Date.now()
583f7a0 - chore(ci): publish all packages
b5da5f1 - chore(ci): another attempt to publish 2 packages
66799af - chore(ci): try to publish 2 things with travis
7843c29 - feat(selectors): auto-detect each selector part (1160)
c4f55bf - chore: guide for producing release notes (1165)
1781ae7 - feat: add a playwright-ready docker image (1161)
4af4557 - chore(ci): regenerate key with travis --pro
67a8485 - chore(ci): another attempt to fix travis
ea11a77 - docs(showcase): add new tools to showcase (1164)
ea0539f - chore: remove unused docker images
400e55d - chore(ci): attempt to publish next from travis
9b51feb - feat: setup continuous deployment (1159)
82a4ede - chore: roll Chromium to 745253 (1156)
041b8c6 - chore: fix typo on sepcified -> specified (1153)
823bf38 - api: evaluateOnNewDocument -> addInitScript (1152)
9478bf3 - docs(readme): add link to changelog (1148)
857ffd8 - fix: text selector should be case insensitive without quotes (1151)
de542c0 - docs(api): unify selector references to include xpath (1150)
7682865 - feat(popups): add BrowserContext.evaluateOnNewDocument (1136)
dc161df - fix(launch): throw upon page argument when non-persistent (1144)
9d6aa96 - chore(workers): align worker lifecycle evens with other APIs (1147)
c6fde22 - chore(webkit): always attach to all pages, simplify initialization (1139)
6b6a671 - fix(webkit): pass popup tests (1138)
d41342f - browser(webkit): mac build fix (1137)
ee9c7f1 - browser(firefox): support BrowserContext.evaluateOnNewDocument (1135)
4ebf419 - fix(yarn): download browsers to package directories (1133)
22c28b6 - test(firefox): support loading of file URLs (1132)
7a75754 - browser(webkit): pause in popup until Target.resume is received (1134)
5cfe68d - test: uncomment webkit fix
4ab8801 - chore: fix lint
d20f3ca - feat(webkit): no start window, healthy pipe (1113)
b8c6069 - browser(webkit): trim down mac embedder (1130)
672f3f9 - feat(popups): introduce BrowserContext.setDefaultHTTPHeaders (1116)
4f69930 - fix(chromium): make locale overrides work (1108)
3afaeef - feat(socket): destroy contexts upon disconnect (1119)
72fa945 - Update request.respond to request.fulfill (1123)
1d02c2d - browser(webkit): --no-startup-window for mac (1118)
51d1b63 - browser(webkit): no_startup_window on linux (1117)
facf2c2 - browser(firefox): support BrowserContext.setExtraHTTPHeaders (1111)
de63534 - browser(webkit): happy pipe on win, no startup windows (1112)
e3b2f2b - browser(firefox): allow loading file URLs in web process (1110)
dcdc7db - feat(chromium): use no-startup-window to not create default context (1106)
c7ade1a - browser(webkit): revert unused Target.oldTargetId (1096)
30a4d0e - feat(webkit): roll to v1155 (1104)
ebcaade - feat(log): log only user api calls with DEBUG=pw:api (1029)
d97ea70 - chore: move more injected code to injected to reduce evaluation size (1093)
8c57358 - browser(webkit): fix null pointer access (1099)
ba29470 - fix(api): rename relativePoint to offset, remove unused parameters from input (1092)
fdfec8e - fix(platform) instanceof bug between execution contexts of RegExp object (1048)
a6c3735 - test: add failing drag and drop test (1095)
b50e8b3 - chore: fix doclint tests (1098)
6acc439 - feat(api): move targets from CRBrowser to CRBrowserContext (1089)
de03f37 - browser(webkit): follow up to roll, fix Win (1091)
971ab77 - chore(docs): update win buildbot setup docs
6821c9e - browser(webkit): roll to ToT 2/24/2020 (1088)
69fe6f7 - docs: added community example project (1084)
a43b409 - chore: make BrowserContext an interface, with 3 implementations (1075)
3677818 - fix(api): browser.serviceWorker -> target.serviceWorker (1076)
1f8508d - feat(waitFor): update various waitFor options to be a single boolean (1066)
88e3109 - test: fix test on Firefox Linux (1079)
f305d65 - chore: remove focused test
66362a5 - chore: update appveyour config
0ded511 - feat(testrunner): better matchers (1077)
53a7e34 - fix(testrunner): support throwing non-errors
05a1e1c - test: remove `newContext` and `newPage` test helpers (1070)
2fabaaf - browser(webkit): force overlay scrollbars on mac, ignoring system setting (1071)
4016429 - api: remove ElementHandle.visibleRatio (1069)
568c6cb - test(navigation): fix flaky networkidle tests (1058)
84ee297 - test: add a test for bounding box on partially visible element (1011)
4be48a6 - chore: disable DEBUGP on bots
33824aa - feat(click): waitForInteractable option, defaults to true (934) (1052)
9f1edad - fix(navigation): do not count random failures as navigation cancel (1055)
223685e - chore: strip out injected script from protocol logs (1054)
1805acd - test: update animation click test (1053)
1ee6578 - feat(viewport): update defaults to 1280x720, fix Firefox (1038)
f2b2d72 - fix(input): emit change events upon page.setInputFiles (1028)
8a7728d - docs: document LaunchOptions.dumpio (1051)
010c274 - Docs: fix return type of launchPersistent (1047)
e658978 - test: add screenshot test that fails on Chromium (1039)
cfeaecb - test(keyboard): Remove duplicated test (1031)
8071225 - Add xterm.js to showcase (1034)
8cfdeb9 - chore: mark v0.11.1-post (1027)