Playwright v0.12.0 Release Notes
Release Date: 2020-03-24 // about 4 years ago-
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?
Highlights
There is no extra window when launching in headful mode.
0️⃣ Default viewport has been changed from 800x600 to 1280x720.
👷 Published recipes for popular CI environments.
📚 Playwright now includes a carefully crafted
index.d.ts
file with documentation inlined from api.md. Any type-related issues are welcome.💻 Many APIs are now available on browser context, for example
browserContext.route(url, handler)
. This makes it easier to setup context once and ensure that all pages and popups behave consistently.0️⃣ Many actions (for example,
page.click(selector[, options])
orpage.evaluate(pageFunction[, arg])
) by default wait before and after performing an action to facilitate linear workflow.- Before action: input actions like
click
orfill
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 exampleload
ordomcontentloaded
.
This change eliminates the need for explicit waits:
// 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:
// 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])
) now accept nested handles inside objects/arrays, but only take a single argument.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 tobrowserContext.addCookies(cookies)
.
-
browserContext.setPermissions()
is renamed tobrowserContext.grantPermissions(permissions[, 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 tobrowserType.launchPersistentContext(userDataDir[, options])
.ChromiumTarget
ChromiumTarget
, related events and methods are removed. UsebrowserContext.on('page')
,chromiumBrowserContext.on('backgroundpage')
andchromiumBrowserContext.on('serviceworker')
.
-
chromiumTarget.createCDPSession
is moved tochromiumBrowserContext.newCDPSession(page)
.ElementHandle
elementHandle.click({relativePoint})
-relativePoint
is renamed toposition
.elementHandle.click({clickCount})
-clickCount
now clicks multiple times, instead of producing a single event with aclickCount
property.elementHandle.select()
is renamed toelementHandle.selectOption(values[, options])
.elementHandle.tripleclick()
is removed.
-
elementHandle.visibleRatio()
is removed.Frame
frame.click(selector, {relativePoint})
-relativePoint
is renamed toposition
.frame.click(selector, {clickCount})
-clickCount
now clicks multiple times, instead of producing a single event with aclickCount
property.frame.select()
is renamed toframe.selectOption(selector, values[, options])
.frame.tripleclick()
is removed.
-
frame.waitForLoadState([state[, options]])
now takes a separatestate
parameter.Keyboard
-
keyboard.sendCharacters()
is renamed tokeyboard.insertText(text)
.Page
page.on('workercreated')
is renamed topage.on('worker')
.page.on('workerdestroyed')
is moved toworker.on('close')
.page.click(selector, {relativePoint})
-relativePoint
is renamed toposition
.page.click(selector, {clickCount})
-clickCount
now clicks multiple times, instead of producing a single event with aclickCount
property.page.evaluateOnNewDocument()
is renamed topage.addInitScript(script[, arg])
.page.route(url, handler)
handler function now accepts two parameters:Route
andRequest
. Routing methodsabort
,continue
andfulfill
are only available on theRoute
class.page.select()
is renamed topage.selectOption(selector, values[, options])
.page.tripleclick()
is removed.
-
page.waitForLoadState([state[, options]])
now takes a separatestate
parameter.Request
-
request.redirectChain()
is replaced withrequest.redirectedFrom()
andrequest.redirectedTo()
.Response
-
response.buffer()
is renamed toresponse.body()
.Selectors
selectors.register(name, script)
now requires aname
parameter.
🆕 New APIs
💻 BrowserContext
browserContext.setExtraHTTPHeaders(headers)
allows to specify additional HTTP headers to be sent with every request in every page in the browser context.browserContext.setHTTPCredentials(httpCredentials)
allows to handle HTTP authentication.browserContext.addInitScript(script[, 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)
allows to expose a function which can be called from any page in the browser context.browserContext.route(url, handler)
allows to intercept certain network requests from all pages in the browser context.browserContext.setOffline(offline)
emulates being offline.browserContext.grantPermissions(permissions[, options])
andbrowser.newContext([options])
permissions
option can omitorigin
to grant permissions to all origins.
-
browserContext.on('page')
event is emitted when a new page is opened in the browser context. This allows to handle popups originated by link clicks orwindow.open()
calls.Page
page.frame(options)
finds a frame based on itsname
orsrc
.page.press(selector, key[, options])
is a shortcut toelementHandle.press(key[, 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
0️⃣ #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] bundlec:\windows\system32\msvcp140_2.dll
on webkit winRaw 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: supportPLAYWRIGHT_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 managererror
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: markworker.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)
0️⃣ 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: fixbrowser.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: supportPLAYWRIGHT_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)
0️⃣ 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)
0️⃣ 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: removenewContext
andnewPage
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
0️⃣ 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)