Playwright v1.4.0 Release Notes

Release Date: 2020-09-10 // over 3 years ago
  • Highlights

    ๐Ÿฑ ๐Ÿš€ playwright-cli is now public!

    Playwright C ommand L ine I nterface can:

    Open pages in Chromium, Firefox and WebKit (Safari) on all platforms

    $ npx playwright-cli open wikipedia.org
    

    Record user interactions and generate Playwright scripts

    $ npx playwright-cli codegen wikipedia.org
    
    • multi-page scenarios
    • text-based selectors
    • downloads, uploads

    - many more!

    Emulate devices, color schemes, geolocation, etc

    $ npx playwright-cli --device="iPhone 11" open wikipedia.org
    

    ๐Ÿ‘‰ Use DevTools console to inspect Playwright selectors

    > playwright.inspect('text=Log in')
    

    Generate page screenshots and PDFs

    $ npx playwright-cli screenshot --help
    

    ๐Ÿฑ ๐ŸŽฅ Record videos ( experimental )

    Record videos of your scripts, every page and popup is captured!

    const fs = require('fs');const { chromium } = require('playwright');(async () =\> {const browser = await chromium.launch({\_videosPath: \_\_dirname// save videos here.});const context = await browser.newContext({\_recordVideos: { width: 1024, height: 768 },// downscale});const page = await context.newPage();const video = await page.waitForEvent('\_videostarted');await page.goto('https://github.com/microsoft/playwright');// ... perform actionsawait page.close();fs.renameSync(await video.path(), 'video.webm');await browser.close();})();
    

    ๐Ÿฑ โ˜ New Client / Server Wire protocol

    ๐Ÿš€ In the last release, we introduced an internal protocol to support Playwright in the none-Node environments. It is already used in the Playwright for Python as well as in third party PlaywrightSharp and Playwright for Go implementations.

    โšก๏ธ With v1.4, we are taking it one step further and migrate Node version of the library along with its client-server mode to be based on this new protocol. So if you are using browserType.connect against cloud services or internally, you need to make sure that the service is also updated to v1.4 before you can use it.

    ๐Ÿ’ป Browser Versions

    • Chromium 86.0.4238.0
    • Mozilla Firefox 80.0b8
    • WebKit 14.0

    ๐Ÿ†• New APIs

    ๐Ÿ’ฅ Breaking changes for Docker and CI users

    • ๐Ÿณ root user is used in the default Docker image 5f6441e
    • ffmpeg dependency is required when running Chromium Issues Closed (73)

    #632 - [BUG] setInputFiles does fetch that fails due to CSP
    ๐ŸŽ #1396 - [Question] Performance issues on Firefox?
    #1400 - [Feature] debugging client script
    #1568 - [BUG] Playwright cannot talk to Chromium on Heroku
    #1605 - Parrallel execution[Question]
    #1626 - [Feature] Playwright Recorder
    #1654 - [Feature] Command events/hooks
    #1935 - [BUG] cant create webkit context
    ๐ŸŒฒ #2053 - How to use playwrite to log in as various users in another ntlm domain?
    #2054 - [Feature] page.waitForActionable()
    ๐Ÿ‘€ #2086 - [BUG] Firefox on Appveyor seems flaky
    #2124 - [Feature] https://playwright.dev/ should have a link to GitHub
    โœ… #2236 - [Feature] Ability to test printing
    ๐Ÿš€ #2321 - [BUG] Google Cloud Function error (deploy)
    ๐Ÿ’ป #2363 - [Feature] Pass timeout in the BrowserContextOptions for newContext
    #2366 - [Feature] Allow PDF to be returned as a stream.
    #2450 - [BUG] Error: NS_ERROR_CONNECTION_REFUSED while navigating to http://localhost:8000
    #2453 - [BUG] Text selector not found in open shadow root
    #2526 - [BUG]Wait for navigation with url and wait until network idle fail to respond and time out
    #2556 - [Question] page.evaluate() issues with xpath
    #2559 - [Question] Running WebKit GTK on Ubuntu 20.04
    #2573 - [BUG] Can't click 2FA duo button.
    #2587 - How can I call an external function in class inside page.evaluateHandle(...) context
    #2603 - How to make page bring to front
    #2616 - [REGRESSION]: Very slow on v1.1
    #2623 - [BUG] Firefox does not launch with executablePath set to Firefox inside Applications folder
    ๐Ÿ’ป #2657 - [Feature] Consider adding Browser Server to the Core Concepts docs
    ๐Ÿ’ป #2660 - [BUG] Cannot find a MiniBrowser.app in neither location
    โœ… #2692 - What is the proper way of handling tests with more that one tab?
    #2704 - Error: Protocol error (Overlay.highlightNode): Could not find object with given id
    #2707 - [Question] Unable to load website on Webkit
    ๐Ÿ‘€ #2718 - [Feature] Simulate mouse movements so you can visually see what is being clicked during a test run
    ๐Ÿ’ป #2726 - [Question] Allow cross-site tracking or change your browser
    ๐Ÿณ #2728 - Is it possible to launch playwright browser "headless:false" in a docker container.
    #2821 - [Question] Wait for response.ok()
    #2828 - [BUG] - Multiple calls to launchPersistentContext fail in non-headless mode
    #2833 - [Question] Is it possible to launch contexts with different proxies?
    #2846 - [BUG] Disconnect\Reconnect not working in firefox[when using jest-playwright-preset]
    #2853 - Do Playwright stores a "dev_profile" file?[Question]
    ๐Ÿ’ป #2859 - Playwright Firefox browser instances not closing after closing browser context[BUG]
    #2878 - [REGRESSION]: context.pages() now works differently
    #2882 - [BUG] Cannot use https or socks5 proxies
    ๐Ÿš€ #2889 - [Feature]release train order
    #2905 - [BUG] Getting chromium as undefined with playwright-core
    #2930 - [BUG] page.screenshot doesn't create folder if needed
    #2942 - [Feature] Switch between tabs in same context
    #2971 - [Internal] Jest runner limitations / adoption blockers
    โœ… #3001 - [Internal] for the jest portion of the tests, we should handle sigint.
    ๐Ÿ’ป #3047 - [BUG] miss export type BrowserTypeConnectOptions
    โšก๏ธ #3083 - [Internal] browser roll script should update docs
    #3084 - [Question] "Cannot read property 'launch' of undefined"
    ๐Ÿš€ #3094 - [Feature] Add list of contributions to release notes
    ๐Ÿณ #3108 - [Feature] Add yarn to playwright:{bionic:dev} Docker images
    ๐Ÿ”Š #3109 - [Question] Add PID to pw logs
    #3140 - [Feature]make automation life more good!
    #3142 - [BUG]
    โฑ #3144 - [Question] clarify in docs what click timeout option waits for
    #3146 - [Question] Deno Integration?
    ๐Ÿ‘€ #3151 - [BUG] Page.goto() flakiness - seeing TimeoutError sometimes
    #3192 - [Question] Check if element is stable
    #3215 - [Feature] Roll Firefox to current beta
    #3230 - [BUG] FF - launchPersistentContext
    #3231 - [Question] page.keyboard.press('Enter') not working on Firefox
    #3232 - [Question] Chorimium is lauched but unable to navigate to url as it just says about:blank
    #3233 - [BUG] IP:PORT Proxy doesnt work on playwright-firefox
    #3258 - [Feature] add a webkit/firefox auto-roll bots
    #3259 - [Feature] serve Chromium from our CDN
    #3262 - [Question] Channels download.delete and download.createReadStream
    #3269 - [Question] Mouse smooth scroll
    ๐Ÿ“„ #3281 - [BUG] Docs have wrong evaluation argument type
    #3293 - [Feature] take implicit xpath if selector starts with .. (dot dot)
    ๐Ÿ‘ป #3310 - [BUG] Website throws exception before rendering
    #3315 - [BUG] Fails on start - WS url is undefined

    Commits (384)

    ๐Ÿ’ป d64d002 - browser(firefox): fix screencast in first window on mac headful (#3826)
    559f30d - chore: roll ffmpeg binaries to r1001 (#3824)
    3124a1b - devops: fine-tune ffmpeg compilation (#3823)
    ๐Ÿ“„ 4240e1d - docs: add page on language bindings (#3819)
    ๐Ÿ“„ 777689a - docs(intro): add cli to getting started (#3821)
    ๐Ÿณ 29b8098 - devops: fix running docker when executed from cronjob (#3822)
    โšก๏ธ ee98bd0 - docs(selectors): update structure and add best practices (#3817)
    ๐Ÿ— 245d100 - devops: produce ffmpeg builds on bots (#3820)
    ๐Ÿ’ป 8a339be - browser(firefox): roll Firefox to r1171 (#3818)
    ๐Ÿณ ff0d697 - docs(docker): add note how to use chromium sandbox (#3779)
    ๐Ÿ”จ 8687400 - refactor: consolidate ffmpeg-related files in third_party/ffmpeg (#3815)
    ๐Ÿ’ป 6c83266 - browser(firefox): force firefox devtools to open in a separate window (#3816)
    dee7392 - feat(webkit): bump to 1343 (#3814)
    ๐Ÿ’ป 5364c6a - browser(firefox): fix automatic http->https redirect (#3812)
    โœ… 3c69f2a - tes(types): use @ts-expect-error in tests where we check for errors (#3794)
    e8cf895 - feat(chromium): roll Chromium to r799411 (#3811)
    1791be6 - fix(input): send keypress event for enter key in chromium (#3796)
    ๐Ÿšš b28ed21 - chore: remove highlight from PWDEBUG in favor of devtools one (#3800)
    ๐Ÿ“ฆ 355ea73 - feat: actually bundle FFMPEG binaries with NPM packages (#3804)
    e9f4843 - chore: use non-fractional revision for chromium revision (#3809)
    ๐Ÿ’ป b8d7f39 - browser(chromium): mirror Chromium r799411 to Azure (#3808)
    638c77c - devops: stop bundling FFMPEG with Chromium (#3806)
    af58c8a - fix(screencast): ensure that _videostarted is fired after newPage (#3807)
    ๐Ÿ’ป a5a5636 - browser(webkit): fix basic screencast for accelerated compositing on win (#3803)
    ๐Ÿ‘ 8f81868 - fix(screencast): tune ffmpeg params for better quality (#3798)
    ๐Ÿ”จ 143adc1 - refactor: bake ffmpeg into npm instead of CDN (#3799)
    ๐Ÿ’ป 1d4601b - browser(webkit): fix screencast scale on Mac headful (#3797)
    ๐Ÿ‘• 658b34e - fix(lint): fix doclint and preprocessor tests (#3793)
    74f1a64 - fix(debug): do not generate source urls for anonymous scripts (#3787)
    โช c83b2da - chore: revert isDevMode into isUnderTest (#3785)
    fea3ceb - chore: expose injectedScript.extend (#3784)
    โœ… d6cd022 - test(screencast): mark win/webkit ac as failing (#3783)
    โœ… f8e1fd7 - test: add a failing test for page.press (#3780)
    66985fc - feat(screencast): add expreimental public API on context (#3766)
    f6aab9e - chore: fix minimum node version (#3777)
    675ce00 - chore: introduce "instrumentation" that is used for debug and trace (#3775)
    โšก๏ธ 25fe115 - docs: update why-playwright.md (#3761)
    bd7cdc3 - feat(webkit): bump to 1341 (#3774)
    ๐Ÿ— bcb4944 - devops: auto-detect platform in //browser_patches/chromium/build.sh (#3772)
    bbe2233 - feat(chromium): use bundled ffmpeg instead of npm deps (#3771)
    ๐Ÿ— f09145e - chore: fix typo in build script
    ๐Ÿ— 3cb3c65 - chore: build Chromium version with ffmpeg (#3770)
    ๐Ÿ— a755d10 - devops: encode build number together with Chromium revision (#3769)
    dfc0006 - devops: bundle ffmpeg with chromium (#3767)
    ๐Ÿ— fa8de99 - Revert "devops: revision Chromium repackaged builds separately (#3698)" (#3763)
    ๐Ÿšš b6557b9 - browser(webkit): remove incognito emoji from title (#3765)
    โช fc7b065 - browser(webkit): revert #3360 as it broke many sites (#3764)
    ๐Ÿ“„ 921c8d8 - docs: add help section (#3741)
    52fd88b - fix(screencast): always send at least one frame in wpe (#3760)
    ๐Ÿ’ป 190d16d - feat: add browser type to device descriptors (#3731)
    ๐Ÿ“ฆ 8b9be6b - devops: fix publishing of @next packages to NPM (#3759)
    ๐Ÿšš 91671f5 - chore: remove unused dev dependencies (#3758)
    ๐Ÿ“ฆ 5364e32 - devops: bake commit SHA inside npm package (#3754)
    c190310 - fix(setInputFiles): make it work with CSP enabled (#3756)
    โœ… f232f34 - test: create a page in fixture tests to exercise browser processes (#3745)
    ๐Ÿ’ป d3c6777 - browser(webkit): force repaint on screencast start (#3757)
    โœ… 8df1fe4 - test: explicitly require expect (#3755)
    โœ… 7ad5bd9 - test: roll test-runner to 0.2.9 (#3752)
    ๐Ÿš€ 84a0066 - devops: align release publishing of docker image with dev releases (#3725)
    โœ… 42a6404 - test: roll test-runner to 0.2.9 (#3753)
    โœ… 175fc52 - test: roll test-runner to 0.2.8 (#3748)
    c5c3c75 - feat(webkit): bump to 1338 (#3751)
    ๐Ÿ’ป 6b085a3 - browser(webkit): do not clear existing contexts from map when exiting (#3750)
    ๐Ÿšš 7671e8e - devops: remove warnings when running under root without sandbox (#3749)
    2d46cd8 - feat(electron): automatically disable electron sandbox when run as root (#3747)
    ๐Ÿšš 0976732 - fix(screencast): remove white padding in headless chromium (#3746)
    ๐Ÿ’ป de547d7 - fix(connect): make selectors.register work in connected browser (#3664)
    โœ… 5c3bf5b - test: add tests for selectors matching root behavior (#3744)
    โœ… 469541a - test(screencast): try to unflake tests (#3742)
    ๐Ÿณ 5f6441e - chore(docker): use root user in Docker image (#3739)
    ๐Ÿณ b7f6a98 - devops: use a helper script to tag and push docker images (#3737)
    โœ… a588840 - test(screencast): add auto scale test (#3733)
    be5eba0 - fix(rpc): improve internal error for unexpected rpc message (#3734)
    ๐Ÿš€ df12264 - devops: use ubuntu 20.04 to build & publish docker releases (#3736)
    216db2c - devops: use microsoft/playwright-github-action@v1 everywhere (#3735)
    1e64efc - feat(screencast): autoscale to fit requested size (#3730)
    ๐Ÿณ 9d999ae - devops: push all tags to docker registry (#3732)
    ๐Ÿšš a4563a8 - fix(snapshot): remove integrity checksum for css (#3729)
    โœ… a588125 - test: call setDevMode in wire tests (#3678)
    ๐Ÿง fc29623 - feat(screencast): use system ffmpeg on linux (#3724)
    โœ… 6590130 - test: roll test runner to 0.2.5 (#3723)
    ๐Ÿณ 47ea1e0 - devops: another attempt to figure out docker publishing (#3721)
    ๐Ÿ’ป ee1becd - browser(firefox): autoscale screencast to fit frame (#3720)
    ๐Ÿš€ 1de4f7f - devops: trigger docker devrelease when github action itself changes (#3719)
    2dc57c5 - chore: fix yaml syntax in the github action (#3718)
    ๐Ÿš€ 1f93fb7 - chore: fix devrelease workflow names (#3717)
    ๐Ÿณ d71d2f5 - devops: install ssh in the docker image (#3716)
    f8408cb - fix(launcher): check libs required for playing h.264 (#3715)
    ๐Ÿ’ป 76ab82f - browser(webkit): prepend http:// to the schema-less URLs (#3713)
    ๐Ÿณ ba7093c - devops: try to use azure/docker-login instead of manual login (#3714)
    ๐Ÿ’ป fad840d - browser(webkit): fit screencast to frame if no scale is specified (#3707)
    ๐Ÿณ ef5c87c - devops: switch docker publishing to a bash script (#3704)
    db9b8a0 - fix(screencast): dont throw from frameAck if target is closed (#3702)
    ๐Ÿšš 1877c29 - devops: remove autoroll (#3684)
    a17dd98 - feat(screencast): auto recording for new pages in chromium (#3701)
    ๐Ÿ‘€ f23dbfb - test(screencast): more tests on Chromium, new seek impl (#3699)
    ๐Ÿ— fcc1680 - devops: revision Chromium repackaged builds separately (#3698)
    8f37d78 - Add Applitools SDK to the showcase (#3694)
    8ec55e1 - feat(screencast): use ffmpeg to produce webm in chromium (#3668)
    ๐Ÿšš 3cc9109 - chore(testrunner): move out of the repo (#3687)
    โœ… 555a8d0 - fix(testrunner): include fixture teardown into timeout, add global timeout (#3685)
    โœ… c47af2d - fix(testrunner): report unhandled rejection ones, allow retry (#3686)
    ๐Ÿ’ป abb50a7 - browser(firefox): fix request frame attribution (#3657)
    6a93cb9 - fix(types): don't show types that we don't export (#3185)
    โœ… 4e5007a - fix(rpc): nice error stacks when running tests (#3507)
    c2cd963 - chore: added envinfo to the bug issue template (#2237)
    โœ… 657cc9b - feat(test): use metafunc in describes (#3682)
    ๐Ÿณ fb6d1ad - docs(docker): add link to mcr status ui (#3679)
    ๐Ÿ‘ 45e178f - fix: support IP:PORT short notation to specify proxy server (#3568)
    โœ… 97e4561 - feat(test): introduce metafunc for skip (#3676)
    e5ff283 - fix(trace): only enable on separate tracing bots (#3677)
    63a0e0c - chore: bump dev dependencies (#3659)
    โœ… 7b1fac9 - test: mark all crash tests as flaky on firefox win (#3675)
    ๐Ÿง 3d6051a - test: mark "should work for webgl" as fixme on webkit linux (#3674)
    ๐Ÿšš 90408aa - test: Remove "request interception" from oopif tests (#3671)
    โœ… b34d9ab - feat(trace): experimental traces for our tests (#3567)
    ๐Ÿ’ป 19f21b1 - browser(webkit): use webkit generate-bundle tool to generate the bundles (#3563)
    โœ… 4386cd4 - test: mark "headless should be able to read cookies written by headful" as flaky on firefox (#3673)
    ๐Ÿ’ป 744af78 - feat(rpc): simplify browser name detection on the client side (#3670)
    โœ… eec9263 - test: make some tests as flaky (#3672)
    ๐Ÿ“„ 2edd6f2 - docs: introduce why-playwright.md (#3666)
    ๐Ÿ‘• e2057fb - chore(test): run eslint on tests (#3638)
    โœ… 6ffdd4d - feat(testrunner): allow unexpected passes (#3665)
    โœ… 5c0f933 - test: always setUnderTest in index.js, rename to setDevMode (#3662)
    โšก๏ธ 7444de4 - docs: update navigation and loading page (#3655)
    โœ… cfbec44 - feat(testrunner): allow annotating tests as flaky (#3663)
    โœ… 6a0f587 - fix(testrunner): report suite-level errors (#3661)
    ๐Ÿ 2b7d79d - fix(testrunner): fix windows bots (#3660)
    โœ… efd45f8 - fix(testrunner): report tests as passed in the trial-run mode (#3654)
    โœ… 0615406 - feat(testrunner): support repeat-each (#3652)
    ๐Ÿณ 3ea3cf0 - devops: add yarn and git in the docker container (#3651)
    โœ… 15ec87d - feat(testrunner): support --retries, flaky tests (#3649)
    ๐Ÿ’ป 254238c - enh: bake browser revisions and api into driver (#3514)
    ๐Ÿณ c96ea4b - chore: remove docker image size computation scripts (#3650)
    5f9407a - feat(webkit): bump to 1334 (#3643)
    โœ… 1a5f22d - fix(test): import playwright types with import type (#3647)
    โœ… a20bb94 - chore(testrunner): introduce test result, reuse it in ipc (#3644)
    โœ… 9e2e870 - test: switch browserType.connect tests to use remoteServer (#3646)
    8d7ec3a - fix(downloads): make path/saveAs work when connected remotely (#3634)
    โœ… a87614a - feat(test): shrink api to run only, rename pending to skipped (#3636)
    โœ… 9b50a6d - test: Fix Chromium JSCoverage reportAnonumousScripts test (#3641)
    โฌ†๏ธ 4249a11 - chore(types): upgrade to TypeScript 4.0.2 (#3637)
    ๐Ÿ’ป 80cf7e9 - browser(webkit): do not crash when opening web inspector (#3631)
    f9eeb29 - fix playwright being imported before toImpl could be registered (#3632)
    โœ… a6b9922 - fix(testrunner): console.log in color (#3633)
    ๐Ÿ“„ 5f86253 - docs: add more detail to waitForNavigation API method (#3635)
    โœ… 25381cf - test: add some tests for remote connect (#3614)
    db0fa07 - fix(screencast): replace ScreencastStopped with async path() (#3626)
    ๐Ÿšš 1a37f8b - browser(webkit): remove browserContextId from some events (#3628)
    ๐Ÿ’ป 22b9246 - chore(context): unify browser context id handling (#3629)
    a2a9619 - fix(devops): fix firefox protocol.ts location (#3630)
    โœ… adc2a44 - infra: simplify test results collection (#3623)
    ๐Ÿ’ป 17077fd - browser(firefox): introduce browser level screencastFinished event (#3625)
    ๐Ÿ“ฆ a0bd8de - browser(chromium): package r799610 (#3624)
    a38564b - fix(screencast): replace ScreencastStopped event with async path() (#3612)
    โœ… aaff845 - test: collect stdout/stderr in tests (#3615)
    ๐Ÿ“„ 0af3d8e - docs(showcases): added example for Heroku (#3414)
    ๐Ÿณ aeab0fa - docs(docker): add note about how to list all tags (#3596)
    ๐Ÿ“„ 72b3147 - docs(example): simplified overwriting of requests (#3621)
    c25dfba - infra: pull chromium 801321 (#3620)
    ๐Ÿ’ป 14abee2 - browser(webkit): fix compilation on mac (#3619)
    โœ… e215461 - chore: split tests for faster execution (#3613)
    ๐Ÿ’ป db7bec3 - browser(webkit): introduce screencastFinished event on Context (#3611)
    โœ… 06dcf96 - feat(testrunner): allow external reporters (#3603)
    โœ… e89de7e - fix(testrunner): allow worker fixture to throw/timeout (#3610)
    โœ… 3b2f14f - test: fix wire tests (#3609)
    b9d6324 - feat(screencast): fire start evet for popups (#3600)
    22e2bf1 - chore: use channels as a namespace in client code (#3608)
    ๐Ÿšš bdbcae1 - chore: remove injected -> types dependency (#3606)
    โœ… 3bdf0e8 - fix(testrunner): pass error into test fixtures (#3605)
    ๐Ÿšš a099e94 - chore: move last rpc files to their place (#3604)
    59a439e - feat(webkit): bump to 1330 (#3602)
    ๐Ÿ’ป 1c69682 - browser(webkit): avoid use after free on page close (#3599)
    ๐Ÿ’… a2dc852 - feat(testrunner): introduce pytest-style reporter (#3594)
    ๐Ÿ’ป 4f1f972 - browser(webkit): fix mac compilation (#3598)
    ๐Ÿ“„ 2b3a1ae - docs: add theheadless.dev to showcase (#3597)
    ๐Ÿšš cd220da - chore: move src files to server (#3593)
    43893cc - chore: improve check-deps (#3592)
    ๐Ÿšš 73e53b2 - chore: move injected and debug to src/server (#3591)
    โœ… baa6b64 - feat(testrunner): convert reporter to an interface (#3588)
    ๐Ÿšš 847201b - chore: move firefox to src/server/firefox (#3590)
    ๐Ÿšš 6a53b20 - chore: move webkit to src/server/webkit (#3589)
    ๐Ÿšš 77f8031 - fix(electron): fix electron types, move source to src/server/electron (#3583)
    โœ… 53ac35a - chore(testrunner): complete ts migration (#3587)
    โœ… 224d3df - chore(testrunner): extract runtime api and use it from cli (#3585)
    ๐Ÿšš 2e1493a - chore: move browserPaths to utils, enforce more deps (#3584)
    โœ… 4025f9f - feat(testrunner): expose test and runner config to fixtures (#3580)
    ๐Ÿšš f4e8f34 - chore: move chromium to src/server/chromium, enfore installer deps (#3582)
    ๐Ÿšš 9fca63f - chore: move src/rpc/client to src/client (#3581)
    ๐Ÿšš 72f11fd - test: Remove duplicated expect (#3579)
    ๐Ÿšš e5dae0d - test: move reporters off mocha (#3577)
    ๐Ÿšš 655013d - chore: move shared utilities to src/utils (#3575)
    ๐Ÿšš b909924 - test: remove mocha dependency (#3576)
    ๐Ÿ’ป 93d8839 - browser(webkit): explicitly track pages reported for context (#3574)
    ๐Ÿšš 6fe1cd9 - chore: move protocol files to src/protocol (#3571)
    โœ… 398bd47 - test: translate tests into ts, extract mocha (#3565)
    ๐Ÿ”จ 57e8617 - chore: refactor impl-side events to be per-class (#3569)
    โœ… d4dac04 - chore(testrunner): add exit code tests (#3562)
    ๐Ÿ’ป de5ecc0 - browser(webkit): roll to r266002 08/21/2020 (#3561)
    โœ… 8ae3c4b - feat(testrunner): delete types.d.ts (#3551)
    ๐Ÿ‘ 1f0e9db - feat(firefox): support context-level screencast api (#3555)
    ๐Ÿ 7a49283 - fix(test): fix the popup test on Windows (#3558)
    โœ… 83f3995 - test: take a screenshot upon failure example (#3556)
    071931e - feat(firefox): bump to 1166 (#3557)
    e2bb6a0 - fix(click): allow clicking 1x1 sized elements (#3538)
    ๐Ÿšš 012f942 - chore(test-runner): move into its own folder and typescript project (#3548)
    ๐Ÿ’ป 4c56354 - fix(permissions): browserContext.grantPermissions to respect the origin (#3542)
    ๐Ÿ’ป 9f3a1b5 - browser(firefox): send screencastStarted after attachedToTarget (#3554)
    ๐Ÿ’ป 5ba0254 - browser(firefox): make sure response is sent when context is closed (#3553)
    โœ… db2e66a - test: introduce global setup (#3544)
    eab5ff4 - chore(rpc): use channels types in dispatchers (#3549)
    โœ… e32a496 - devops(browser-roll): fix fixture tests (#3547)
    ๐Ÿ’ป 854d755 - browser(firefox): make context close wait for sessions to finish (#3550)
    ๐Ÿ— 0d03cc0 - feat(utils): add a script for watching various builds (#3545)
    ๐Ÿšš 86815d7 - test: convert rename options to parameters, remove options magic (#3543)
    ๐Ÿšš 30f4c0c - test runner: remove dependencies on playwright (#3539)
    1829232 - api: add waitForElementState('disabled') (#3537)
    0a22e27 - fix(chromium): disable lazy loading iframes (#3535)
    ๐Ÿšš f13cebc - browser(firefox): remove redundant checks for PageTarget._browserContext (#3541)
    โœ… e679b82 - fix(devops): auto roll tests (#3536)
    ๐Ÿ“„ a78d83e - docs: clarify response and requestfinished events (#3532)
    ๐Ÿ”€ a65b0bb - test: merge test options into options (#3531)
    ๐Ÿšš 9ac1bbc - chore: remove more paths and url matches from the server side (#3528)
    ๐Ÿ”€ df50660 - browser(firefox): make tab close listener sync again (#3533)
    83de007 - feat(screencast): add start/stop events on context (#3483)
    ๐Ÿ’ป 73cd6ec - browser(firefox): add screencast control methods to context (#3530)
    ๐Ÿ”€ 745dc33 - chore: merge Browser{Context,}Base into Browser{Context,} (#3524)
    56da4bb - devops: make sure rust toolchain is installed (#3485)
    โœ… 8989d66 - test: introduce options (#3525)
    63a2c67 - chore: align SerializedAXNode with rpc protocol AXNode (#3522)
    9715752 - feat(slowmo): only slowmo once per user action (#3012)
    โœ… b0667e8 - test: fix fit, do not rely upon mocha suite (#3520)
    e54195c - chore: align page.pdf options to the rpc protocol (#3521)
    ๐Ÿšš e7e8524 - chore: remove screenshot path from the server side (#3519)
    ๐Ÿšš 20c6b85 - chore: remove route/unroute from the server side (#3518)
    3cf48f9 - chore: simplify conversions around setInputFiles (#3516)
    ecf4cd3 - chore: simplify conversions around selectOption (#3517)
    aeadf50 - chore: use HeadersArray instead of Headers object on the server side (#3512)
    โœ… 77cab8b - test: introduce test collector (#3515)
    โœ… 510182f - test: use isChromium, etc fixtures for browser name sniffing (#3508)
    โœ… b2228a6 - fix(test): disable more screenshot tests on headful firefox (#3513)
    โœ… 5a964f7 - tests: fix should get the same headers as the server (#3510)
    9790ea5 - chore: align more server-side options with rpc protocol (#3506)
    โœ… 7a77faf - fix(testrunner): do not override debug.log (#3505)
    dfa1f10 - feat(screenshot): create directories for screenshot file
    0e9793c - api: ElementHandle.waitForElementState (#3501)
    58fc6b4 - chore: align some server-side methods with rpc calls (#3504)
    โœ… 59e3326 - tests: add test for page.focus() in Firefox (#3478)
    ๐Ÿšš 141a255 - chore: remove unused methods from server side (#3502)
    ๐Ÿšš 1e9c0eb - chore: remove logger infrastructure from server side (#3487)
    f3c2584 - feat: added rpc driver (#3500)
    ๐Ÿ’ป 8ea2800 - devops: first implementation of browser auto-roll bot (#3455)
    ๐Ÿ‘• 5aa4116 - docs: sort all enums in doclint (#3488)
    โœ… 3aae8c6 - test: run tests by ordinals, not ranges (#3497)
    262e886 - test: organize golden files under snapshots folder (#3494)
    c0b9cec - feat(types): export ConnectOptions (#3147)
    d516f81 - fix(rpc): add a custom toJSON to help jest's expect library (#3489)
    f983432 - feat(firefox): roll firefox to r1160 (#3468)
    โœ… c900395 - test: restart worker upon any test failure (#3492)
    โœ… c44f841 - test: reverse dumpio into quiet, serialize output (#3491)
    โœ… 73d2dc1 - test: encapsulate mocha into test runner (#3490)
    โœ… 5410c30 - chore(test): fix tests when using browser path overwrites (#3453)
    โœ… 35fbd58 - test: implement in-process debug mode (#3486)
    ๐Ÿšš bc23324 - chore: remove apiName plumbing and some unused methods from server side (#3481)
    244c2f3 - feat(rpc): make sure filechooser is only intercepted when needed (#3482)
    โœ… 0c798f0 - fix(testrunner): properly run tests when the first arg is a file (#3472)
    69e1e71 - feat(click): provide preview of the element intercepting pointer events (#3449)
    85c93e9 - api: introduce ElementHandle.waitForSelector (#3452)
    โœ… a03c761 - test: unconditionally plumb debug to parent process (#3479)
    โœ… d537088 - test: deliver colorful debug messages, do not pipe stdio (#3477)
    ae4280a - chore: cleanup more non-rpc code (#3471)
    dec8fb7 - fix(hover): do not require the element to be enabled before hovering (#3445)
    โœ… c1de95f - feat(testrunner): pretty error messages (#3469)
    โœ… 2f5a0a6 - test: slowly removing testOptions (#3464)
    โœ… 036cd5c - feat(testrunner): use ring character for skips (#3454)
    โœ… f45791d - feat(testrunner): support sourcemaps (#3459)
    ๐Ÿ’ป 4dde288 - browser(firefox): roll Firefox to August 14 beta (#3465)
    โœ… ee02702 - test: allow overriding test fixtures, add some test runner tests (#3463)
    a64cdcc - feat(webkit): bump to 1326 (#3462)
    โœ… 31fac37 - test: allow overriding the worker fixtures (#3460)
    โœ… 737bfa2 - test(screencast): skip test that depends on accelerated compositing (#3458)
    ๐Ÿšš 6abc352 - test: remove output and golden directory notions (#3456)
    ๐Ÿ’ป ae5700b - browser(webkit): do not crop video on Mac headless (#3457)
    ๐Ÿšš 9b52ca8 - chore: remove unused non-rpc code, test options, infra, bots (#3444)
    โœ… 1762275 - feat(testrunner): cache transformed files (#3451)
    ๐Ÿ‘• 84441f8 - chore(test): run doclint tests with mocha, delete testrunner again (#3447)
    โœ… e2cfb05 - test: print stderr upon test failure (#3448)
    ๐Ÿ’ป 18b2cf5 - feat(rpc): use rpc protocol for browserType.connect (#3380)
    ๐Ÿ’… a4eb86c - browser(firefox): update styles when changing color scheme (#3407)
    โœ… 5498ed1 - test: introduce --trial-run mode to capture test model (#3436)
    5156659 - chore: add comment to clarify /sbin
    โช c99acd0 - feat(firefox): rollback to 1157 (#3438)
    โš  c27e809 - chore: suppress trailing whitespace warning in prepare_checkout (#3441)
    โœ… 4bad89f - test(screencast): do print actual pixels on failure (#3442)
    d9727c6 - Typo fix (#3430)
    4f05039 - devops: do not fail check when refusing to publish TOT revision (#3443)
    โœ… 84ca012 - test: upload output from headful bots (#3439)
    โœ… 68e6ab8 - test(screencast): test that css animations are recorded (#3427)
    โœ… 4bb2658 - test: fix create output folder (#3431)
    ๐Ÿ‘• 51bd370 - Revert "chore(test): run doclint tests with mocha, delete utils/testrunner (#3428)" (#3432)
    15fa27e - feat(firefox): roll firefox to r1158 (#3426)
    33785eb - chore: add npm i changes (#3413)
    ๐Ÿ‘• 061ff25 - chore(test): run doclint tests with mocha, delete utils/testrunner (#3428)
    โœ… d367735 - feat(testrunner): take the first argument as the test root dir (#3423)
    f2088e0 - devops: fix Chromium repackaging to respect symlinks (#3424)
    ๐Ÿšš ec24516 - chore(test): remove try/finally pattern from fixtures (#3409)
    ๐Ÿš€ 23f5ed8 - fix(launcher): default to ubuntu20.04 for newer releases (#3400)
    ๐Ÿ— f4e65f6 - test: implement spec builder (#3422)
    โœ… f0fcdc8 - test(firefox): make headful screencast tests work under xvfb (#3421)
    ๐Ÿ“„ 06ddacd - docs: introduce doc on authentication (#3404)
    โœ… eb67c86 - test: fix it.fail().slow is not a function (#3420)
    ๐Ÿ’ป 40f6852 - devops: migrate //utils/check_availability.js off browser fetcher (#3418)
    ๐Ÿ’ป 884cef7 - browser(chromium): roll Chromium to r796653 (#3419)
    โœ… a4a07c4 - test: support --grep, --forbid-only (#3417)
    a574fa6 - api: add Frame.page() getter (#3392)
    โœ… 3a6b5ca - test: add sanity test for playwright-electron (#3387)
    adfeaa4 - feat(firefox): bump to 1157 (#3395)
    ๐Ÿ“„ 22d1be3 - docs: add showcase how to use allure-report and jest-circus with playwright (#3408)
    ๐Ÿ“„ be7db4d - docs(ci): add sample config for jenkins (#3398)
    โœ… 962ddc0 - test: consolidate runner files (#3415)
    โœ… 7e07634 - test: use mocha in ci/cd (#3406)
    ๐Ÿ“„ 079b6e0 - docs: add getting help section (#3410)
    โœ… 16b471f - test(screencast): video recording during cros-process navigation (#3396)
    ๐Ÿ’ป 915902c - browser(firefox): roll Firefox to roughly July, 15 (#3411)
    ๐Ÿ“ฆ 1ef199f - fix(launchDoctor): add sudo to install missing packages hint (#3402)
    ๐Ÿง c035560 - fix: full path to ldconfig in linux (#3401)
    โœ… 4061bc6 - test: make fit run single test (#3394)
    ๐Ÿ’ป da95b73 - browser(firefox): emit iframe lifecycle when initial navigation fails (#3389)
    โœ… 6054f14 - chore(tests): convert all tests to typescript (#3384)
    ๐Ÿ“„ 9375cc6 - docs: introduce docs for page object models (#3391)
    โœ… 55a7848 - fix(types): fix type generation to make ts tests work (#3385)
    812d7ee - feat(webkit): bump to 1325 (#3388)
    2db97e3 - feat(firefox): migrate to protocol-based proxy implementation (#3362)
    โœ… bfdb59e - test: make mocha runner work in parallel (#3383)
    9697ad6 - fix(chromium): handle the case when new pending comes before old commit (#3370)
    โœ… ff2c2b2 - test: Fix insertText test title (#3386)
    ๐Ÿšš 77e75b4 - chore(test): move electron tests to typescript (#3379)
    โœ… d8d845a - feat(screencast): add private recording APIs and basic test (#3296)
    ๐Ÿง 8bb6d73 - feat(rpc): keep non-rpc linux bots for now (#3381)
    โœ… 823ef86 - test: add support for mocha (#3376)
    7580360 - feat(firefox): bump to 1156 (#3378)
    ๐Ÿ’ป f254498 - browser(webkit): align GTK implementation with Win (#3377)
    โœ… d76166b - chore(test): require playwright fixtures from userland (#3355)
    82c6843 - feat(webkit): bump to 1324 (#3373)
    ๐Ÿ’ป 538daf3 - browser(firefox): exclude frame from screencast video (#3372)
    ๐Ÿ“„ 6c68435 - docs: make api docs around pointer actions more explicit (#3374)
    ๐Ÿ’ป 8f30d15 - devops: re-packge chromium on windows without interactive_ui_tests.exe (#3375)
    0๏ธโƒฃ 3179e71 - feat(rpc): in-process rpc on by default (#3104)
    1b8128e - installer: start downloading Chromium archives from our CDN (#3361)
    ef76f5b - feat(rpc): introduce JSON type in the protocol for arbitrary blobs (#3367)
    ๐Ÿ“„ 6f3f608 - docs(showcase.md): add Accessibilty Insights to community showcase (#3368)
    ๐Ÿ 89ae8e0 - browser(webkit): disable accelerated compositing on Windows (#3360)
    โช 6f09590 - test: restore nojest runner (#3359)
    ๐Ÿ“„ c6acc32 - docs(api): explicit nulls, use Serializable and EvaluationArgument more (#3358)
    ๐Ÿ“„ 6a19bf5 - docs(showcase): add expected-condtion-playwright library (#3356)
    ๐Ÿ— 2a0cbda - devops: mirror chromium builds to our CDN (#3357)
    69c88d8 - feat(rpc): handle screenshot path on the client (#3352)
    โœ… 7e2cc77 - test: add a test for newCDPSession rejecting on non-pages (#3353)
    ๐Ÿ›  83f5628 - feat(rpc): misc fixes (#3351)
    ๐Ÿ’ป a225447 - browser(firefox): introduce global proxy (#3335)
    ๐Ÿ ddd483b - browser(webkit): correctly record video in headless mode Windows (#3354)
    โœ… f6d321f - test: do not inherit from the Node environment (#3348)
    b3091de - fix(cors): allow routing the cors request with credentials (#3336)
    โœ… eac8aee - chore(types): convert tests to typescript part 3 (#3340)
    ๐Ÿง 1bcbf19 - test(video): mark test as failing in WebKit Linux (#3344)
    ๐Ÿšš 3665bb0 - docs(api): remove extra closing square bracket, add an opening square bracket. (#3342)
    ๐Ÿ“„ 9d543f9 - docs: fix typo in Core Concepts doc page (#3343)
    ๐Ÿ“„ 4ec3290 - docs(api): replace select-all note with example (#3328)
    411c738 - feat(firefox): roll to r1154 (#3333)
    434b9e1 - devops: support EXPORT_COMPILE_COMMANDS env variable in webkit build.sh (#3334)
    c9409bf - fix(types): add missing properties to DeviceDescriptor (#3332)
    โœ… 83ac3f4 - chore(test): convert some more tests to typescript (#3329)
    ๐Ÿ’ป ca3bd5e - browser(firefox): roll Firefox to June, 24 (#3327)
    โœ… 4b3fb6d - chore(test): convert tests to typescript (1) (#3307)
    ๐Ÿ“š 8716a54 - docs: fix for documentation link in the README.md (#3324)
    cdfe73f - api(console): make ConsoleMessageLocation properties required (#3290)
    โœ… 5c0b88f - feat(test): add dot report for aslushnikov (#3317)
    โœ… 0a5d340 - test: print failed tests upon interrupt (#3316)
    โœ… 5f7b546 - test: overridden timezone does not change default in another context (#3313)
    ๐Ÿ’ป 9effb32 - browser(firefox): always create new process rather than reuse one (#3312)
    c45f7af - feat(firefox): bump to 1152 (#3302)
    โœ… 4956054 - test: bump jest to 26.2 - per-test progress, slow thresholds (#3314)
    โœ… aa2ec09 - test: default and overriden locale isolation between contexts (#3308)
    ๐Ÿ”ง e582cc6 - fix(launcher): make PrintDeps.exe path configurable (#3311)