Commit graph

1394 commits

Author SHA1 Message Date
Dmitry Gozman 5c0f93301d
test: always setUnderTest in index.js, rename to setDevMode (#3662)
Root index.js is only used for local development, so
assuming dev mode there is fine. This way we do not have
to worry about calling setUnderTest early enough.
2020-08-27 21:08:33 -07:00
Pavel Feldman 2b7d79d7fa
fix(testrunner): fix windows bots (#3660) 2020-08-27 10:14:27 -07:00
Yury Semikhatsky 5f9407a0d1
feat(webkit): bump to 1334 (#3643) 2020-08-26 15:18:39 -07:00
Pavel Feldman a20bb949ea
chore(testrunner): introduce test result, reuse it in ipc (#3644) 2020-08-26 14:14:23 -07:00
Dmitry Gozman 8d7ec3aca3
fix(downloads): make path/saveAs work when connected remotely (#3634)
- saveAs uses a stream internally and pipes it to the local file;
- path throws an error when called on a remote browser.
2020-08-26 12:46:30 -07:00
Yury Semikhatsky db0fa07330
fix(screencast): replace ScreencastStopped with async path() (#3626) 2020-08-25 17:18:28 -07:00
Yury Semikhatsky 22b9246692
chore(context): unify browser context id handling (#3629) 2020-08-25 16:33:16 -07:00
Pavel Feldman adc2a44113
infra: simplify test results collection (#3623) 2020-08-25 15:46:42 -07:00
Yury Semikhatsky a38564b7ca
fix(screencast): replace ScreencastStopped event with async path() (#3612) 2020-08-25 13:07:32 -07:00
Dmitry Gozman 3b2f14fcee
test: fix wire tests (#3609) 2020-08-24 17:32:55 -07:00
Yury Semikhatsky b9d6324d14
feat(screencast): fire start evet for popups (#3600) 2020-08-24 17:23:54 -07:00
Dmitry Gozman 22e2bf1227
chore: use channels as a namespace in client code (#3608)
Also, rename LoggerSink to Logger to match api docs.
2020-08-24 17:05:16 -07:00
Dmitry Gozman bdbcae16cb
chore: remove injected -> types dependency (#3606)
This way, injected is self-contained and we can ensure it does not
depend on anything node-specific.
2020-08-24 15:30:45 -07:00
Dmitry Gozman a099e941d6
chore: move last rpc files to their place (#3604)
Also update check-deps to be more user-friendly.
2020-08-24 14:48:03 -07:00
Dmitry Gozman cd220daa83
chore: move src files to server (#3593) 2020-08-24 06:51:51 -07:00
Dmitry Gozman 73e53b21df
chore: move injected and debug to src/server (#3591) 2020-08-23 20:25:59 -07:00
Dmitry Gozman 847201b132
chore: move firefox to src/server/firefox (#3590) 2020-08-23 17:05:58 -07:00
Dmitry Gozman 6a53b205e5
chore: move webkit to src/server/webkit (#3589) 2020-08-23 15:39:03 -07:00
Dmitry Gozman 77f803140a
fix(electron): fix electron types, move source to src/server/electron (#3583) 2020-08-23 13:46:40 -07:00
Dmitry Gozman 2e1493a5fa
chore: move browserPaths to utils, enforce more deps (#3584) 2020-08-22 21:15:03 -07:00
Dmitry Gozman f4e8f34c96
chore: move chromium to src/server/chromium, enfore installer deps (#3582) 2020-08-22 15:46:42 -07:00
Dmitry Gozman 9fca63f8ec
chore: move src/rpc/client to src/client (#3581) 2020-08-22 15:13:51 -07:00
Dmitry Gozman 655013d025
chore: move shared utilities to src/utils (#3575) 2020-08-22 07:07:13 -07:00
Dmitry Gozman 6fe1cd9812
chore: move protocol files to src/protocol (#3571) 2020-08-21 18:46:11 -07:00
Dmitry Gozman 57e8617474
chore: refactor impl-side events to be per-class (#3569) 2020-08-21 16:26:33 -07:00
Yury Semikhatsky 1f0e9db0a6
feat(firefox): support context-level screencast api (#3555) 2020-08-20 19:49:30 -07:00
Yury Semikhatsky 071931ebb1
feat(firefox): bump to 1166 (#3557) 2020-08-20 16:51:17 -07:00
Dmitry Gozman e2bb6a07cd
fix(click): allow clicking 1x1 sized elements (#3538)
One by one seems like a resonable minimum size for clicking.

It is not surprising to see a 1x1 native accessible control
that is covered by a custom control that handles input instead.
2020-08-20 16:49:19 -07:00
Dmitry Gozman 4c5635434a
fix(permissions): browserContext.grantPermissions to respect the origin (#3542)
Due to wrong type usage, we ignored the origin while granting permissions.
Switching to generated types revealed this issue. We should follow up
with switching all dispatchers to the generated types.
2020-08-20 14:19:27 -07:00
Dmitry Gozman eab5ff4eae
chore(rpc): use channels types in dispatchers (#3549)
This ensures we actually implement channels as intended.
For example, this change found an issue with Route.fulfill.
2020-08-20 11:25:33 -07:00
Dmitry Gozman 18292325b6
api: add waitForElementState('disabled') (#3537)
Allows waiting for the element to be disabled.
2020-08-19 17:20:10 -07:00
Dmitry Gozman 0a22e2758a
fix(chromium): disable lazy loading iframes (#3535)
These do not play nicely with our "page is loaded when all frames
are loaded" logic.
2020-08-19 15:58:13 -07:00
Dmitry Gozman 9ac1bbc2a5
chore: remove more paths and url matches from the server side (#3528) 2020-08-19 13:27:58 -07:00
Yury Semikhatsky 83de0071c9
feat(screencast): add start/stop events on context (#3483) 2020-08-19 12:45:31 -07:00
Dmitry Gozman 745dc339a6
chore: merge Browser{Context,}Base into Browser{Context,} (#3524) 2020-08-19 10:31:59 -07:00
Dmitry Gozman 63a2c673b5
chore: align SerializedAXNode with rpc protocol AXNode (#3522) 2020-08-18 20:25:03 -07:00
Joel Einbinder 97157520a6
feat(slowmo): only slowmo once per user action (#3012)
This changes the behavior of slowmo to slow down user actions instead of every protocol command. This makes slowmo a lot more predictable. Without this, there is no way to set slowmo to a good value without incurring a huge delay at the start of your test when it sets things up.
2020-08-18 19:13:40 -07:00
Dmitry Gozman e54195ccfb
chore: align page.pdf options to the rpc protocol (#3521)
Drive-by: remove unused devices from playwright impl.
2020-08-18 18:48:44 -07:00
Dmitry Gozman e7e8524e14
chore: remove screenshot path from the server side (#3519)
Also fixes auto-detection of mime type based on path and adds tests.
2020-08-18 18:46:56 -07:00
Dmitry Gozman 20c6b85178
chore: remove route/unroute from the server side (#3518)
We only use a global "intercept all requests" handler on
page and browser context, instead of granular ones.
2020-08-18 17:34:04 -07:00
Dmitry Gozman 3cf48f9bd4
chore: simplify conversions around setInputFiles (#3516)
We do not need api types on the server side anymore.
2020-08-18 17:32:11 -07:00
Dmitry Gozman ecf4cd3933
chore: simplify conversions around selectOption (#3517)
We do not need to support api types on the server side.
2020-08-18 16:44:17 -07:00
Dmitry Gozman aeadf50165
chore: use HeadersArray instead of Headers object on the server side (#3512)
This simplifies implementation and avoids multiple conversions.
Also adding some tests around lowercase and wrong types.
2020-08-18 15:38:29 -07:00
Dmitry Gozman 9790ea5b5d
chore: align more server-side options with rpc protocol (#3506)
This touches:
- noDefaultViewport;
- ignoreAllDefaultArgs;
- env;
- validateXYZ logic that was copying objects - we do not need that anymore;
- shuffles some converters closer to their usage.
2020-08-18 09:37:40 -07:00
Joel Einbinder dfa1f103af
feat(screenshot): create directories for screenshot file 2020-08-17 16:53:19 -07:00
Dmitry Gozman 0e9793c452
api: ElementHandle.waitForElementState (#3501)
This method waits for visible, hidden, stable or enabled state,
similar to the actionability checks performed before actions.

This gives a bit more control to the user. Some examples:
- Allows to wait for something to be stable before taking a screenshot.
- Allows to wait for the element to be hidden/detached after a specific action.
2020-08-17 16:22:34 -07:00
Dmitry Gozman 58fc6b4003
chore: align some server-side methods with rpc calls (#3504)
- Never write to console on the server side - we use stdout for
  communication. This includes logPolitely and deprecate.
- Pass undefined instead of null in some BrowserContext methods.
- Use explicit _setFileChooserIntercepted instead of on/off magic.
2020-08-17 16:19:21 -07:00
Dmitry Gozman 141a255a07
chore: remove unused methods from server side (#3502)
Most of these were api methods that are no longer called directly.
2020-08-17 14:36:51 -07:00
Dmitry Gozman 1e9c0eb705
chore: remove logger infrastructure from server side (#3487)
We do not implement LoggerSink on the server, so we can
use a simple debugLogger.
2020-08-17 14:12:31 -07:00
Joel Einbinder d516f81eeb
fix(rpc): add a custom toJSON to help jest's expect library (#3489) 2020-08-16 14:41:33 -07:00
Dmitry Gozman bc23324878
chore: remove apiName plumbing and some unused methods from server side (#3481)
We append apiName where needed on the client instead.
2020-08-14 18:25:32 -07:00
Dmitry Gozman 244c2f37b6
feat(rpc): make sure filechooser is only intercepted when needed (#3482)
So that user can choose a file manually in headful mode.
2020-08-14 18:24:36 -07:00
Dmitry Gozman 69e1e713ef
feat(click): provide preview of the element intercepting pointer events (#3449) 2020-08-14 14:48:36 -07:00
Dmitry Gozman 85c93e91a7
api: introduce ElementHandle.waitForSelector (#3452)
This is similar to Frame.waitForSelector, but relative to the handle.
2020-08-14 14:47:24 -07:00
Dmitry Gozman ae4280a12b
chore: cleanup more non-rpc code (#3471)
- Replaces BrowserServer class with BrowserProcess struct.
- Removes src/api.ts.
- Removes helper.installApiHooks.
- Removes BrowserType.launchServer.
2020-08-14 13:19:12 -07:00
Dmitry Gozman dec8fb7890
fix(hover): do not require the element to be enabled before hovering (#3445) 2020-08-14 13:18:32 -07:00
Dmitry Gozman 9b52ca8676
chore: remove unused non-rpc code, test options, infra, bots (#3444) 2020-08-13 16:00:23 -07:00
Dmitry Gozman 18b2cf5ec7
feat(rpc): use rpc protocol for browserType.connect (#3380) 2020-08-13 13:24:49 -07:00
Andrey Lushnikov 515665908e chore: add comment to clarify /sbin 2020-08-13 11:44:21 -07:00
Joel Einbinder 23f5ed89b0
fix(launcher): default to ubuntu20.04 for newer releases (#3400) 2020-08-12 17:50:46 -07:00
Andrey Lushnikov 40f685226b
devops: migrate //utils/check_availability.js off browser fetcher (#3418)
The script is used to check the state of chromium CDN, whereas
our browser fetcher now defaults to Playwright CDN.
2020-08-12 15:01:07 -07:00
Dmitry Gozman a574fa6edb
api: add Frame.page() getter (#3392) 2020-08-12 14:45:36 -07:00
Joel Einbinder 1ef199f512
fix(launchDoctor): add sudo to install missing packages hint (#3402) 2020-08-12 08:48:35 -07:00
Andrey Lushnikov c035560389
fix: full path to ldconfig in linux (#3401) 2020-08-12 08:47:41 -07:00
Andrey Lushnikov 2db97e3b2d
feat(firefox): migrate to protocol-based proxy implementation (#3362)
This migrates Firefox to the protocol-based proxy implementation.

Benefits:
- supports secure web proxies (already supported by Chromium)
- unlocks support for SOCKS proxies with authentication
2020-08-11 11:36:27 -07:00
Dmitry Gozman 9697ad635f
fix(chromium): handle the case when new pending comes before old commit (#3370) 2020-08-11 08:59:00 -07:00
Yury Semikhatsky d8d845afcc
feat(screencast): add private recording APIs and basic test (#3296) 2020-08-10 21:22:57 -07:00
Andrey Lushnikov 1b8128eb84
installer: start downloading Chromium archives from our CDN (#3361)
This starts downloading newer Chromium archives from our CDN, but
retains old endpoint for older Chromium revisions.

This backwards compatibility might help later on to implement
a browser bisecting tool.

References #3259
2020-08-10 11:40:30 -07:00
Dmitry Gozman ef76f5b922
feat(rpc): introduce JSON type in the protocol for arbitrary blobs (#3367) 2020-08-10 11:20:32 -07:00
Dmitry Gozman 69c88d8063
feat(rpc): handle screenshot path on the client (#3352) 2020-08-07 15:41:34 -07:00
Dmitry Gozman 7e2cc77524
test: add a test for newCDPSession rejecting on non-pages (#3353) 2020-08-07 15:40:46 -07:00
Dmitry Gozman 83f5628549
feat(rpc): misc fixes (#3351) 2020-08-07 15:40:21 -07:00
Pavel Feldman b3091deb78
fix(cors): allow routing the cors request with credentials (#3336) 2020-08-07 14:02:41 -07:00
Joel Einbinder eac8aeedaf
chore(types): convert tests to typescript part 3 (#3340) 2020-08-07 11:19:15 -07:00
Dmitry Gozman cdfe73fee3
api(console): make ConsoleMessageLocation properties required (#3290)
Everywhere in our api, possibly missing properties are nullable.
However, to make things easier for everyone, we just default to an
empty url instead, so that users do not have to null-check it.
2020-08-05 22:25:56 -07:00
Max Schmitt e582cc678c
fix(launcher): make PrintDeps.exe path configurable (#3311) 2020-08-05 13:33:40 -07:00
Max Schmitt 4956041109
fix(validation): error typo "unknown" (#3304) 2020-08-05 11:44:32 -07:00
Dmitry Gozman 126b1f79d4
feat(rpc): run doclint against rpc client (#3260) 2020-07-31 17:00:36 -07:00
Lars den Bakker 776f0192ab
fix(chromium): remove Debugger.paused event listener on coverage stop (#3252) 2020-07-31 15:45:29 -07:00
Yury Semikhatsky 7e8d03b050
fix(launcher): extend list of known missing DLLs (#3256)
#2745
2020-07-31 14:11:11 -07:00
Dmitry Gozman 4e5aa3c9c3
feat(rpc): support chromiumSandbox option (#3251) 2020-07-31 09:31:55 -07:00
Ross Wollman ce0ddd270b
feat(download): create directories for saveAs (#3249)
This is to match the behavior for screenshots path added in #3247.
2020-07-30 23:21:03 -07:00
Pavel Feldman 93056ed8ef
chore(rpc): more protocol nits (#3246) 2020-07-30 17:51:41 -07:00
Yury Semikhatsky cbfdca736c
feat(launcher): check dependencies before launch on Windows (#3240) 2020-07-30 17:15:46 -07:00
Dmitry Gozman 2f95b6e34e
feat(selectors): auto-detect xpath starting with ".." (#3239) 2020-07-30 16:21:48 -07:00
Dmitry Gozman 6297f86cfa
feat(rpc): run generate-channels during lint (#3238) 2020-07-30 15:08:21 -07:00
Pavel Feldman 1728a3df93
chore: minor protocol fixes (#3226) 2020-07-30 11:14:41 -07:00
Dmitry Gozman cefb1b9727
feat(rpc): run fixtures.jest.js with channel (#3227)
Also, introduce setupInProcess wrapper to be used for in-process rpc.
2020-07-30 10:22:28 -07:00
Andrey Lushnikov e09132527d
fix: a pretty error when browser executable is not found (#3220)
Make sure executable exists before launching it. If it doesn't and
we were launched without custom executable path, print a helpful
instruction to run `npm i playwright` and get browsers downloaded.

Note: there's already a test that makes sure bad executable paths
are treated fairly: 9132d23b2b/test/launcher.jest.js (L54-L59)

This doesn't test missing default browser installation which I think is
fine.

Fixes #3161
2020-07-29 23:16:24 -07:00
Max Schmitt 52eb6c609a
fix(rpc): protocol Route.fulfill (#3200) 2020-07-29 20:42:14 -07:00
Dmitry Gozman 3bd97776b8
feat(rpc): do not use server types and events in rpc/client (#3219)
This change removes almost all dependencies from rpc/client
to the rest of the project. The last ones would be utilities
like helper, converters, etc.
2020-07-29 17:26:59 -07:00
Dmitry Gozman 9132d23b2b
fix(screenshot): wait for stable position before taking element screenshot (#3216)
Same goes for scrollIntoViewIfNeeded.
2020-07-29 16:36:02 -07:00
Dmitry Gozman 84a17f27eb
fix(rpc): Frame.dblclick is missing notWaitAfter (#3210) 2020-07-29 11:45:19 -07:00
Andrey Lushnikov f111ad7437
fix: add missing libgles2 package to launch doctor (#3209)
References #2745
2020-07-29 10:40:33 -07:00
Andrey Lushnikov 6bc02f8fb6
feat(launchdoctor): detect missing libraries for dlopen (#3202)
WebKit WPE assumes `libglesv2.so` is available on the host system
and uses `dlopen` to open it.

This patch starts using `ldconfig -p` to check if the library
exists on the system.

References #2745
2020-07-29 09:58:45 -07:00
Yury Semikhatsky a700a7a9a8
feat(chromium): roll to 07/29 (#3207) 2020-07-29 09:57:02 -07:00
Dmitry Gozman fab5eba64f
fix(oopifs): translate coordinates to viewport (#3201)
Renderer-based method DOM.getContentQuads and DOM.getBoxModel return
coordinates relative to the local root's viewport, but we need them relative
to the root viewport.
2020-07-28 15:52:33 -07:00
Dmitry Gozman 6cb1e03713
feat(rpc): disallow deps into rpc client from outside (#3199)
For this, common converters are extracted from rpc serializers.
2020-07-28 15:33:38 -07:00
Yury Semikhatsky 576e2c5287
fix(webkit): correctly report outerWidth/Height on Mac (#3133) 2020-07-27 16:06:50 -07:00
Dmitry Gozman 97c10002e7
api: introduce Browser.version() (#3177) 2020-07-27 13:41:35 -07:00
Andrey Lushnikov 6fa7547ce3
fix(launchDoctor): add package mapping for libvpx.so.5 (#3180)
Since we were bundling the library with the browsers before, the
mapping was missing.

References #2745
2020-07-27 10:39:45 -07:00
Tierney Cyren 51ce47f30f
docs: use "Node.js" instead of "Node" (#3176)
* docs: use "Node.js" instead of "Node"

* docs: fix broken anchor
2020-07-27 10:27:41 -07:00
Dmitry Gozman b2179193c6
feat(rpc): replace implicit scopes with explicit dispose (#3173)
This adds one more protocol message __dispose__
to dispose a scope and all child objects.

Now, client side does not need a notion of scope anymore -
it just disposes the whole object subtree upon __dispose__.
Server, on the other hand, marks some objects as scopes
and disposes them manually, also asserting that all parents
are proper scopes.
2020-07-27 10:21:39 -07:00
Max Schmitt 9b502af4e3
fix(launchDoctor): support existing LD_LIBRARY_PATH (#3165) 2020-07-27 10:05:12 -07:00
Dmitry Gozman f4e584ea08
feat(rpc): align class names with api docs (#3164) 2020-07-26 21:27:09 -07:00
Dmitry Gozman 98cc9db8e8
chore: simplify doclint (#3162)
This renames CRBrowserContext events into ChromiumBrowserContext and
simplifies some doclint/coverage logic.
2020-07-24 20:40:21 -07:00
Dmitry Gozman fd2e65b73c
api: export all browsers from every package (#3128)
This makes it easier to reason about our packages.
The only difference is what each package downloads.
When the browser is not downloaded, it will fail to launch.

Each browser gets a 'download' attribute in the browser.json file.
2020-07-24 16:36:00 -07:00
Dmitry Gozman d9890f1102
feat(rpc): make ElectronApplication a scope (#3159) 2020-07-24 16:22:20 -07:00
Andrey Lushnikov 86b64a2311
feat(launchDoctor): package mappings for Ubuntu 20.04 (#3155)
This teaches Launch Doctor to print a command to install missing
packages on Ubuntu 20.04.

References #2745
2020-07-24 16:15:42 -07:00
Andrey Lushnikov d4b707861c
feat: validate Ubuntu version if launching firefox (#3156)
The original plan was to rnu some checks against libc version the
binary is compiled with, but these turn out to be a little complicated:
parsing out libc version from both static binary and host system
requires text processing, and it's hard to make sure it works reliably
across distributions.

Instead, let's start with a very particular check against running
Firefox on Ubuntu 16.04.

References #2745
2020-07-24 16:14:14 -07:00
Dmitry Gozman 415e94f410
feat(rpc): server-side validator (#3150) 2020-07-24 15:16:33 -07:00
Pavel Feldman e7cca86757
fix(postData): allow overriding binary post data (#3120) 2020-07-24 12:16:45 -07:00
Dmitry Gozman deccddba24
feat(rpc): update BrowserServer (#3112)
- Make BrowserServer a scope.
- Plumb exitCode and signal to BrowserServer.on('close').
- Use toImpl in a test.
2020-07-24 10:17:07 -07:00
Dmitry Gozman 0f0e2acfaf
fix(type): unify selection behavior when typing (#3141)
Before typing/pressing, we focus the target element. WebKit
sometimes selects the value in this case. To unify the behavior
between the browsers we behave similar to human:
- when the input is already focused, we just type;
- when the input is not focused, we focus it, move caret
  to the start (like if user clicked at the start to focus the input)
  and then type.
Note this only affects inputs with non-empty value.
2020-07-24 09:30:31 -07:00
Andrey Lushnikov 678d16454a
devops: normalize blob names on the CDN (#3136)
This establishes a single naming for all our blobs with browser
builds that we upload to CDN: `<browser-name>-<os-version>`

- `<browser-name>` is either `firefox` or `webkit`.
- `os-version` is the OS that was used to produce the build.

References #2745
2020-07-24 00:31:18 -07:00
Andrey Lushnikov bbe7dbe9ae
feat(installer): start downloadinb Ubuntu 20.04 builds (#3126)
Start auto-detecting Ubuntu 20.04 and downloading custom webkit
build for it.

References #2745
2020-07-23 17:37:47 -07:00
Andrey Lushnikov 63689e36a6
devops: prepare buildbots to the introduction of Ubuntu 20.04 builder (#3116)
This patch:
- specializes "linux" scripts into "Ubuntu 18.04" scripts
- renames all future linux blobs on CDN:
    * `firefox-linux.zip => firefox-ubuntu-18.04.zip`
    * `minibrowser-gtk.zip => minibrowser-gtk-ubuntu-18.04.zip`
    * `minibrowser-wpe.zip => minibrowser-wpe-ubuntu-18.04.zip`
    * `minibrowser-gtk-wpe.zip => minibrowser-gtk-wpe-ubuntu-18.04.zip`
- updates downloader to deal with the new names

References #2745
2020-07-23 11:59:23 -07:00
Dmitry Gozman 2bed312911
fix(electron): emit close events in the correct order (#3111) 2020-07-23 11:02:43 -07:00
Dmitry Gozman 68c4f79b02
feat(rpc): convert protocol to yaml (#3102) 2020-07-22 19:38:19 -07:00
Dmitry Gozman b1a5a02154
feat(rpc): client-side parameters validation (#3069) 2020-07-22 18:05:07 -07:00
Dmitry Gozman 65002a0ac2
feat(rpc): support firefox user prefs (#3093)
Also ignore firefoxUserPrefs in launchPersistentContext according to our api.
2020-07-22 17:20:00 -07:00
Pavel Feldman 80c0711d98
feat(firefox): roll firefox to r1137 (#3095) 2020-07-22 15:59:37 -07:00
Pavel Feldman 2a08883ef8
chore(download): follow up to remove the redundant checks (#3097) 2020-07-22 15:59:11 -07:00
Ross Wollman d8a17fb0ab
api(download): Add saveAs helper (#2872) 2020-07-22 14:55:27 -07:00
Andrey Lushnikov ea5dfdbec7
fix: re-write Chromium startup error with clear instructions (#3070)
This patch detects Chromium crash with a sandboxing error and re-writes
the error to surface information nicely.

#### Error Before:

```sh
pwuser@23592d09b3bd:~/tmp$ node a.js
(node:324) UnhandledPromiseRejectionWarning: browserType.launch: Protocol error (Browser.getVersion): Target closed.
=========================== logs ===========================
[browser] <launching> /home/pwuser/.cache/ms-playwright/chromium-790602/chrome-linux/chrome --disable-background-networking --enable-features=NetworkService,NetworkServiceInProcess --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-breakpad --disab
le-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=TranslateUI,BlinkGenPropertyTrees,ImprovedCookieControls,SameSiteByDefaultCookies --disable-hang-monitor --disab
le-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-sync --force-color-profile=srgb --metrics-recording-only --no-first-run --enable-automation --password-store=basic --use-mock-keychain --user-data-dir=/tmp/playwrig
ht_chromiumdev_profile-mjSfr2 --remote-debugging-pipe --headless --hide-scrollbars --mute-audio --no-startup-window
[browser] <launched> pid=401
[browser] [0722/170825.030020:FATAL:zygote_host_impl_linux.cc(117)] No usable sandbox! Update your kernel or see https://chromium.googlesource.com/chromium/src/+/master/docs/linux/suid_sandbox_development.md for more information on developing with the SUID sandbox. If you want to live
dangerously and need an immediate workaround, you can try using --no-sandbox.
[browser] #0 0x55ac4f8c7be9 base::debug::CollectStackTrace()
[browser] #1 0x55ac4f841c13 base::debug::StackTrace::StackTrace()
[browser] #2 0x55ac4f853680 logging::LogMessage::~LogMessage()
[browser] #3 0x55ac4df2307e content::ZygoteHostImpl::Init()
[browser] #4 0x55ac4f40dd47 content::ContentMainRunnerImpl::Initialize()
[browser] #5 0x55ac4f45c9fa service_manager::Main()
[browser] #6 0x55ac4f40c361 content::ContentMain()
[browser] #7 0x55ac4f45b5bd headless::(anonymous namespace)::RunContentMain()
[browser] #8 0x55ac4f45b2bc headless::HeadlessShellMain()
[browser] #9 0x55ac4ccc22e7 ChromeMain
[browser] #10 0x7f0f3d736b97 __libc_start_main
[browser] #11 0x55ac4ccc212a _start
[browser]
[browser] Received signal 6
[browser] #0 0x55ac4f8c7be9 base::debug::CollectStackTrace()
[browser] #1 0x55ac4f841c13 base::debug::StackTrace::StackTrace()
[browser] #2 0x55ac4f8c7785 base::debug::(anonymous namespace)::StackDumpSignalHandler()
[browser] #3 0x7f0f437b3890 (/lib/x86_64-linux-gnu/libpthread-2.27.so+0x1288f)
[browser] #4 0x7f0f3d753e97 gsignal
[browser] #5 0x7f0f3d755801 abort
[browser] #6 0x55ac4f8c66e5 base::debug::BreakDebugger()
[browser] #7 0x55ac4f853aeb logging::LogMessage::~LogMessage()
[browser] #8 0x55ac4df2307e content::ZygoteHostImpl::Init()
[browser] #9 0x55ac4f40dd47 content::ContentMainRunnerImpl::Initialize()
[browser] #10 0x55ac4f45c9fa service_manager::Main()
[browser] #11 0x55ac4f40c361 content::ContentMain()
[browser] #12 0x55ac4f45b5bd headless::(anonymous namespace)::RunContentMain()
[browser] #13 0x55ac4f45b2bc headless::HeadlessShellMain()
[browser] #14 0x55ac4ccc22e7 ChromeMain
[browser] #15 0x7f0f3d736b97 __libc_start_main
[browser] #16 0x55ac4ccc212a _start
[browser]   r8: 0000000000000000  r9: 00007ffd38a863b0 r10: 0000000000000008 r11: 0000000000000246
[browser]  r12: 00007ffd38a87680 r13: 00007ffd38a86610 r14: 00007ffd38a87690 r15: aaaaaaaaaaaaaaaa
[browser]   di: 0000000000000002  si: 00007ffd38a863b0  bp: 00007ffd38a86600  bx: 00007ffd38a86e44
[browser]   dx: 0000000000000000  ax: 0000000000000000  cx: 00007f0f3d753e97  sp: 00007ffd38a863b0
[browser]   ip: 00007f0f3d753e97 efl: 0000000000000246 cgf: 002b000000000033 erf: 0000000000000000
[browser]  trp: 0000000000000000 msk: 0000000000000000 cr2: 0000000000000000
[browser] [end of stack trace]
[browser] Calling _exit(1). Core file will not be generated.
============================================================
Note: use DEBUG=pw:api environment variable and rerun to capture Playwright logs.Error
    at /home/pwuser/tmp/node_modules/playwright/lib/chromium/crConnection.js:131:63
    at new Promise (<anonymous>)
    at CRSession.send (/home/pwuser/tmp/node_modules/playwright/lib/chromium/crConnection.js:130:16)
    at CRSession.send (/home/pwuser/tmp/node_modules/playwright/lib/helper.js:78:31)
    at Function.connect (/home/pwuser/tmp/node_modules/playwright/lib/chromium/crBrowser.js:54:39)
    at Chromium._connectToTransport (/home/pwuser/tmp/node_modules/playwright/lib/server/chromium.js:52:38)
    at Chromium._innerLaunch (/home/pwuser/tmp/node_modules/playwright/lib/server/browserType.js:87:36)
    at async ProgressController.run (/home/pwuser/tmp/node_modules/playwright/lib/progress.js:75:28)
    at async Chromium.launch (/home/pwuser/tmp/node_modules/playwright/lib/server/browserType.js:60:25)
    at async /home/pwuser/tmp/a.js:4:19
(node:324) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise reject
ion, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
(node:324) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
```


#### Error After:

```sh
pwuser@23592d09b3bd:~/tmp$ node a.js
(node:222) UnhandledPromiseRejectionWarning: browserType.launch: Chromium sandboxing failed!
================================
To workaround sandboxing issues, do either of the following:
  - (preferred): Configure environment to support sandboxing: https://github.com/microsoft/playwright/blob/master/docs/troubleshooting.md
  - (alternative): Launch Chromium without sandbox using 'chromiumSandbox: false' option
================================
Error
    at /home/pwuser/tmp/node_modules/playwright/lib/chromium/crConnection.js:131:63
    at new Promise (<anonymous>)
    at CRSession.send (/home/pwuser/tmp/node_modules/playwright/lib/chromium/crConnection.js:130:16)
    at CRSession.send (/home/pwuser/tmp/node_modules/playwright/lib/helper.js:78:31)
    at Function.connect (/home/pwuser/tmp/node_modules/playwright/lib/chromium/crBrowser.js:54:27)
    at Chromium._connectToTransport (/home/pwuser/tmp/node_modules/playwright/lib/server/chromium.js:53:38)
    at Chromium._innerLaunch (/home/pwuser/tmp/node_modules/playwright/lib/server/browserType.js:89:36)
    at async ProgressController.run (/home/pwuser/tmp/node_modules/playwright/lib/progress.js:75:28)
    at async Chromium.launch (/home/pwuser/tmp/node_modules/playwright/lib/server/browserType.js:61:25)
    at async /home/pwuser/tmp/a.js:4:19
(node:222) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise reject
ion, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
(node:222) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
```

References #2745
2020-07-22 10:57:58 -07:00
Dmitry Gozman 1aee8dfc7c
feat(rpc): align types/guids in the protocol with their pdl definition (#3079)
This makes the protocol self-explanatory, and avoids silly conversions
in codegenerators, e.g. cdpSession <-> CDPSession.
2020-07-22 10:37:21 -07:00
Pavel Feldman f50f228a1f
browser(chromium): roll chromium to r790602 (#3082) 2020-07-22 09:21:23 -07:00
Pavel Feldman 2b0b0a9119
fix(misc): assorted fixes (#3031) 2020-07-21 23:48:21 -07:00
Dmitry Gozman ced0bc2d1b
api: make clear the use of null in page.emulateMedia (#3078)
We can pass null to disable emulating particular feature.
This change updates the docs and rpc protocol accordingly.
2020-07-21 18:56:41 -07:00
Joel Einbinder f4b7ed5542
fix(chromium): reland support selectAll on macos (#3038)
Co-authored-by: Joel Einbinder <joel.einbinde@gmail.com>
2020-07-21 16:33:46 -07:00
Dmitry Gozman db4e856a57
feat(rpc): use SerializedValue for CDPSession (#3076)
This is our way to define a schema for arbitrary values.
2020-07-21 15:58:00 -07:00
Dmitry Gozman 1553f19bab
chore: update error messages to match future rpc validator (#3075) 2020-07-21 15:25:31 -07:00
Dmitry Gozman 18cb1c017a
feat(rpc): inline selectors.register options in the protocol (#3072) 2020-07-21 14:41:33 -07:00
Dmitry Gozman 3dd61629e0
feat(rpc): update Response.finished to return string instead of Error (#3071) 2020-07-21 14:40:53 -07:00
Andrey Lushnikov 47e30f047b
feat: introduce chromiumSandbox launch option (#3067)
The option is intended to be used instead of the `--no-sandbox`
argument that is accepted exclusively by Chromium and crashes
WebKit.

References #2745
2020-07-21 13:49:09 -07:00
Andrey Lushnikov af20d2704f
fix: auto-add --no-sandbox when running Chromium under root (#3064)
References #2745
2020-07-21 13:21:42 -07:00
Dmitry Gozman 3dead4c8d1
feat(rpc): remove last union types from the protocol (#3059) 2020-07-21 12:44:30 -07:00
Pavel Feldman 99658c2d32
feat(bringToFront): enable on all browsers (#3052) 2020-07-21 09:36:54 -07:00
Dmitry Gozman 2d59a8f9c2
feat(rpc): remove some union types (#3058) 2020-07-21 08:26:48 -07:00
Dmitry Gozman 5848ed8f41
feat(rpc): introduce protocol.pdl (#3054)
We now generate channels.ts from the protocol definition. There are still some shortcomings,
like union types - these will be addressed in follow ups.
2020-07-20 17:38:06 -07:00
Dmitry Gozman cfe3aa3d94
test: add a few tests for null values (#3035) 2020-07-20 09:39:16 -07:00
Dmitry Gozman 29504c0824
feat(rpc): make SerializedValue format pdl-friendly (#3007)
This avoids sum types and instead uses different fields
for different types.
2020-07-19 19:46:19 -07:00
Andrey Lushnikov 9a2245d30a
devops: show package names instead of missing libs on Ubuntu 18.04 (#3013)
This patch starts putting package names to install on Ubuntu instead
of missing dependencies list.

The mapping of library to package name is obtained using the following
script: https://gist.github.com/aslushnikov/2766200430228c3700537292fccad064

References #2745
2020-07-17 16:50:20 -07:00
Andrey Lushnikov ef2a6522b8
feat: support atomic browser installation - attempt 2 (#3008)
Currently, Ctrl-C while extracting browser might yield users in
a bad place.

This patch adds a marker file inside browser directory to make
sure that browser extraction completed.

Note: this was already attempted in #2489, but was eventually
reverted in #2534.

References #2660
2020-07-17 16:39:27 -07:00
Dmitry Gozman 91e1a25f34
feat(rpc): gracefully close browsers in server process on disconnect (#3005) 2020-07-17 16:14:23 -07:00
Pavel Feldman 9d9801192e
test: wire test commands to jest (#3014) 2020-07-17 16:09:27 -07:00
Pavel Feldman a8216339d8
Revert "fix(chromium): select all on macos should work again (#3006)" (#3011) 2020-07-17 14:34:05 -07:00
Pavel Feldman 096ec4c44f
test: move fixtures to jest (#3010) 2020-07-17 13:53:23 -07:00
Joel Einbinder 631fbce7ff
fix(chromium): select all on macos should work again (#3006)
* fix(chromium): select all on macos should work again

* Update src/chromium/crInput.ts

Co-authored-by: Joel Einbinder <joel.einbinde@gmail.com>
2020-07-17 10:59:48 -07:00
Joel Einbinder 9140063c90
fix(accessibility): don't filter everything when the page has a title (#2909) 2020-07-17 10:48:50 -07:00
Dmitry Gozman d8bedd851d
chore: explicitly type SerializedArgument, fix rpc dispatchEvent (#2988)
We now have types for SerializedValue/SerializedArgument. This will
allow us to avoid double parse/serialize for evaluation arguments/results.

Drive-by: typing exposed a bug in ElementHandle.dispatchEvent().
2020-07-17 09:53:13 -07:00
Pavel Feldman 070a257600
test: move all generic page tests to jest (#3002) 2020-07-17 09:49:12 -07:00
Dmitry Gozman 5cf3e4f0f2
feat(rpc): switch Env to use an array, split ignoreDefaultArgs (#2984) 2020-07-17 09:32:27 -07:00
Pavel Feldman 1c0504ae28
test: respect fixtures in describe, match image snapshots (#2989) 2020-07-16 22:38:52 -07:00
Tapajyoti Bose 16e3776a9c
fix(JSCoverageEntry): added scriptId and isBlockCoverage (#2955) 2020-07-16 20:32:49 -07:00
Pavel Feldman 424f11d165
test: convert some tests to the jest+fixtures (#2983) 2020-07-16 16:59:45 -07:00
Dmitry Gozman 056f0e290d
feat(rpc): ensure that error stack traces point to the user code (#2961)
This also adds more "_wrapApiCall" calls for correct logs and stack traces.
2020-07-16 14:32:21 -07:00
Dmitry Gozman b890569afc
feat(rpc): move leftover extraHTTPHeaders to HeadersArray (#2980) 2020-07-16 13:36:22 -07:00
Dmitry Gozman 439e048a4c
feat(rpc): migrate DeviceDescriptors payload to an array (#2981)
Currently it is an object with arbitrary keys - that makes it
hard to have a protocol definition.
2020-07-16 13:18:54 -07:00
Dmitry Gozman 4c8ba3ed67
chore: remove cli (#2976)
It will be a separate package instead.
2020-07-16 13:13:26 -07:00
Pavel Feldman ecc130c644
test: convert evaluation.spec to jest+fixtures (#2968) 2020-07-16 11:18:38 -07:00
Dmitry Gozman 198ecee875
api(exposeBinding): allow handles in the binding result (#2970) 2020-07-15 20:05:11 -07:00
Dmitry Gozman aa4c893b09
feat(rpc): implement waitForNavigation on the client (#2949)
Drive-by: fix electron issues, exposed by the test using
waitForNavigation.

Drive-by: mark some tests skip(CHANNEL) that were mistakenly
marked skip(USES_HOOKS).
2020-07-15 18:48:19 -07:00
Andrey Lushnikov 0b9218149f
feat: validate browser dependencies before launching on Linux (#2960)
Missing dependencies is #1 problem with launching on Linux.

This patch starts validating browser dependencies before launching
browser on Linux. In case of a missing dependency, we will abandon
launching with an error that lists all missing libs.

References #2745
2020-07-15 15:24:38 -07:00
Dmitry Gozman c51ea0afd1
feat(rpc): remove PageAttribution from the protocol, attribute on the client side (#2957)
This also changes timeout error format to
"page.click: Timeout 5000ms exceeded", so that all errors
can be similarly prefixed with api name.

We can now have different api names in different clients,
and our protocol is more reasonable.
2020-07-15 14:04:39 -07:00
Dmitry Gozman 7f6171579b
feat(rpc): use headers array in the protocol (#2959) 2020-07-15 13:21:21 -07:00
Dmitry Gozman 2d5c0328cd
feat(rpc): return objects for every protocol command (#2950)
For future extensibility, returning objects with fields instead
of plain strings or channels.
2020-07-14 18:26:50 -07:00
Dmitry Gozman 1b84ec9023
fix(binding): dispatch binding after the page has been initialized (#2938)
... but not after it was closed.
2020-07-14 13:34:49 -07:00
Pavel Feldman d5bd459986
chore(rpc): remove some paths from the channel (#2934) 2020-07-14 10:51:37 -07:00
Dmitry Gozman cc8fe5a763
feat(rpc): support electron (#2933) 2020-07-13 21:46:59 -07:00
Dmitry Gozman 9fdb3e23c3
feat(rpc): support selectors (#2936) 2020-07-13 17:47:15 -07:00
Dmitry Gozman 65d45c18c3
feat(rpc): introduce Waiter for various waitFor implementations (#2935)
Use it for waitForEvent and waitForLoadState.
2020-07-13 16:03:24 -07:00
Dmitry Gozman 9fd30e58e2
feat(rpc): ensure feature-detection works as before (#2898)
For this, some tests are migrated from skip() to feature detection,
like our users would do.
2020-07-13 15:26:09 -07:00
Dmitry Gozman 2151757621
feat(rpc): run rpc tests in-process and out-of-process (#2929) 2020-07-13 15:00:20 -07:00
Dmitry Gozman 6d94c92053
feat(rpc): support no-serialization mode, run hook tests (#2925)
Added rpc_json_linux bots to excercise serialization - these
do not run hook tests.
2020-07-13 08:31:20 -07:00
Dmitry Gozman 6674458496
feat(rpc): log api calls into LoggerSink (#2904) 2020-07-10 18:00:10 -07:00
Dmitry Gozman c63b706aac
fix(events): avoid firing events after close/detach (#2919) 2020-07-10 16:38:01 -07:00
Dmitry Gozman fc6861410b
feat(rpc): merge DispatcherScope and Dispatcher (#2918) 2020-07-10 16:24:11 -07:00
Andrey Lushnikov a403d4beff
fix(firefox): fix launching firefox without dependencies (#2900)
We always have to reject promises with some error. Otherwise,
our error-rewriting logic in try-catch miserably fails.

With this patch, attempt to launch Firefox when it's missing
dependencies will actually result in a thrown exception with
pretty logs. Without this patch, Playwright throws internal error.
2020-07-10 16:04:19 -07:00
Pavel Feldman 631f76df75
chore(rpc): remove union types from page and handles (#2912) 2020-07-10 15:39:11 -07:00
Dmitry Gozman b6fd4dc56c
feat(rpc): merge ChannelOwner and ConnectionScope (#2911) 2020-07-10 15:11:47 -07:00
Pavel Feldman c89c30e333
fix(popup): do not report frameless pages (#2910) 2020-07-10 13:15:39 -07:00
Dmitry Gozman a91ec9a15d
feat(rpc): pass more tests (#2896)
Includes coverage, tracing and misc close() tests.
2020-07-09 15:33:01 -07:00
Joel Einbinder e90ba26250
fix(context): fire close event for persistent contexts (#2891) 2020-07-09 08:34:07 -07:00
Dmitry Gozman 8fe29feb21
feat(rpc): support more chromium-specific apis (#2883)
This includes page CDPSession, backgroundPages() and serviceWorkers().

This has also revealed an issue with closing order between the context
and the service worker.
2020-07-08 21:36:03 -07:00
Pavel Feldman b3ca4afd40
chore: misc test fixes (#2857) 2020-07-08 18:42:31 -07:00
Pavel Feldman 6209d14f87
chore: misc test fixes (#2888) 2020-07-08 18:42:04 -07:00
Yury Semikhatsky b93e0994bc
browser(webkit, firefox): bump versions (#2866) 2020-07-08 17:10:33 -07:00
Andrey Lushnikov 458aaa508f
feat(chromium): roll Chromium to r786218 (#2879)
This roll includes:
- https://crrev.com/786119 - mac: close context menu when destroying RenderViewContextMenuMacCocoa

Fixes #2700
2020-07-08 17:09:42 -07:00
Paul 71713c9580
fix(webkit): Fix default User-Agent (#2886)
Co-authored-by: pspaul <pspaul@pspaul.de>
2020-07-08 16:15:31 -07:00
Dmitry Gozman 0c80c22716
feat(rpc): plumb CDPSession (#2862) 2020-07-07 18:47:00 -07:00
Dmitry Gozman 2a86ead0ac
chore: replace FrameTask with internal events on Frame (#2856)
We now use a few helper.waitForEvent calls to wait for internal
events kNavigationEvent and kLifecycleEvent. With these events,
we should be able to replicate logic over rpc.
2020-07-07 15:22:05 -07:00
Dmitry Gozman 35cb20d5ad
test: unflake recorder tests (#2808)
We ensure that recorder is installed in the main frame before running the test.
2020-07-07 14:11:59 -07:00
Dmitry Gozman 0380400de4
chore: refactor waiting for lifecycle events (#2851)
Instead of checking lifecycle events on every change, we
notify precisely when lifecycle event in the subtree
is satisfied. This allows FrameTask to be later switched
to event-based approach, and will easily translate to the
rpc client.
2020-07-06 17:33:56 -07:00
Dmitry Gozman db3439d411
chore: introduce DocumentInfo (#2765)
It encapsulates documentId and request.
2020-07-06 15:58:27 -07:00
Andrey Lushnikov 15ddb5d32b
chore: update webkit version (#2804)
Safari Technology Preview reports WebKit 14.0. Align with them!
2020-07-06 15:13:53 -07:00
Dmitry Gozman ac2185a9d9
test: update http credentials tests (#2806) 2020-07-06 11:28:07 -07:00
Pavel Feldman 6bbe7eb006
chore(rpc): inline options parameter in all rpc channels (#2842) 2020-07-06 10:04:09 -07:00
Pavel Feldman 241d39f904
chore(rpc): exit server upon pipe disconnect (#2836) 2020-07-04 09:52:38 -07:00
Pavel Feldman 2540805bf2
chore(rpc): misc serializer improvements (#2832) 2020-07-03 18:04:08 -07:00
Joel Einbinder f484b20eea
fix(recorder): allow node to close gracefully (#2817) 2020-07-02 08:02:27 -07:00
Dmitry Gozman 19abc9bd9f
fix(dialogs): let click timeout, log information about dialogs (#2781)
We should not stall selector actions because of dialogs
and properly timeout instead. For this, we should not await
the handle.dispose() call because it will never happen
while dialog is shown.

Also, log information about dialogs to make it easier to debug.
2020-07-01 22:10:37 -07:00
Dmitry Gozman 9d6eaadba7
fix(navigation): ensure that goBack/goForward work with file urls (#2792) 2020-07-01 19:17:27 -07:00
Pavel Feldman c15dc94f8e
chore(rpc): explicitly create page dispatcher (#2799) 2020-07-01 18:36:09 -07:00
Dmitry Gozman e8e45e8450
feat(dom): migrate innerText, innerHTML and getAttribute to tasks (#2782)
This ensures synchronous access to avoid element recycling.
2020-07-01 16:10:53 -07:00
Dmitry Gozman ff1fe3ac39
fix(close): actually mark the page as closing (#2798)
Currently double-closing flakiness is seen on Firefox bots.
2020-07-01 16:05:56 -07:00
Dmitry Gozman 5c4751d5dd
chore: generate protocol during browser roll (#2719)
We now commit protocol.ts files during the roll.
New utils/roll_browser.js helps with that.

This makes our installation very shallow:
- build installer;
- download browsers.
2020-07-01 15:22:29 -07:00
Pavel Feldman c25fc4956d
chore(rpc): scope client-side handles (#2796) 2020-07-01 13:55:29 -07:00
Pavel Feldman 95538e73e7
chore(rpc): move classes around, fix tests, respect dispatcher scopes (#2784) 2020-06-30 22:21:17 -07:00
Pavel Feldman 87516cb3a3
chore(rpc): make dispatcher creation and lookup explicit (#2783) 2020-06-30 21:30:39 -07:00
Andrey Lushnikov 922cbe6718
chore: roll https-proxy-agent to v5 (#2777)
Co-authored-by: Luke Edwards <luke.edwards05@gmail.com>
2020-06-30 17:03:01 -07:00
Andrey Lushnikov 55a07dbf4d
fix: follow-up with offline comments on implementation of deprecation (#2770)
This moves all extra deprecation messages from vendor implementations
into a single vendor-neutral land.
2020-06-30 11:02:12 -07:00
Pavel Feldman e29f7b9f58
chore(rpc): support workers, file chooser, browser server (#2766) 2020-06-30 10:55:11 -07:00
Pavel Feldman 5bb018e0e5
chore(rpc): attribute calles to page, ignore USES_HOOKS (#2764) 2020-06-29 18:58:09 -07:00
Pavel Feldman 3a7d629c61
chore(rpc): pass more network tests (#2762) 2020-06-29 16:37:38 -07:00
Andrey Lushnikov 0963c1979e
chore: deprecate method context.setHTTPCredentials() (#2763)
This will start emitting deprecation warning once
`context.setHTTPCredentials` is called.
2020-06-29 16:37:01 -07:00
Dmitry Gozman 38236b4f29
fix(close): ensure close() can be called twice (#2744)
... without any exceptions.
2020-06-29 16:26:32 -07:00
Dmitry Gozman 1fa9d30992
fix(evaluate): awaitPromise when Promise is overwritten (#2759)
Firefox and WebKit require native promises to provide awaitPromise
functionality. When the Promise is overwritten, all evaluations
in the main world produce wrong Promise, so we wrap with async
function to get a native promise instead.
2020-06-29 16:25:52 -07:00
Pavel Feldman e920fde9f7
chore(rpc): bootstrap demo for rpc (#2741) 2020-06-27 11:32:27 -07:00
Pavel Feldman 4e94bdabfd
chore(rpc): serialize rpc into actual wire string (#2740) 2020-06-27 11:10:07 -07:00
Pavel Feldman 3e33523ee3
chore(rpc): clear the browsercontext test spec (#2739) 2020-06-26 22:38:21 -07:00
Pavel Feldman db12ddebb3
chore(rpc): clear the page test spec (#2736) 2020-06-26 21:22:03 -07:00
Pavel Feldman 6393407a6a
chore(rpc): support downloads, dialogs, persistent context (#2733) 2020-06-26 17:24:21 -07:00
Dmitry Gozman b54303a386
fix(textContent): make page.textContent(selector) atomic (#2717)
We now query selector and take textContent synchronously. This
avoids any issues with async processing: node being recycled,
detached, etc.

More methods will follow with the same atomic pattern.

Drive-by: fixed selector engine names being sometimes case-sensitive
and sometimes not.
2020-06-26 16:32:42 -07:00
Dmitry Gozman 43f70ab978
test: add more failing tests with react recycle (#2731) 2020-06-26 16:31:51 -07:00
Pavel Feldman 02f7501725
chore(rpc): strongly-type the initializer, remove __init__ phase (#2729) 2020-06-26 12:28:27 -07:00
Pavel Feldman 18d6140d3e
chore(rpc): support routes and bindings (#2725) 2020-06-26 11:51:47 -07:00
Dmitry Gozman 064a0a1154
fix(webkit): do not swallow errors when returning by value (#2723)
We currently return undefined whenever we had an error trying
return the evaluation result by error. The most common error
is "execution context destroyed".

This produces very unexpected undefined from methods that do not
ever expect undefined. Instead, we should throw because we were
not able to return the result.
2020-06-26 09:50:57 -07:00
Pavel Feldman 71618a9e2b
chore(rpc): implement input, a11y, console (#2722) 2020-06-25 18:01:18 -07:00
Dmitry Gozman ab6a6c9b82
chore: run most actions through page._runAbortableTask (#2721)
This introduces a single place for future snapshots.
2020-06-25 16:57:21 -07:00
Pavel Feldman bab6833232
chore: introduce the experimental rpc implementation (#2720) 2020-06-25 16:05:36 -07:00
Dmitry Gozman 5d5cf26a0e
fix(logs): streaming logs from InjectedScriptPoll without exception (#2712)
We used to get undefined messages, because we were mistakenly
fulfilling the logs multiple times.
2020-06-25 13:13:10 -07:00
Dmitry Gozman 807dc1f324
fix(crash): improve documentation for crash, reject waitForEvent (#2694) 2020-06-25 09:53:56 -07:00
Pavel Feldman bc3050776e
chore: prepare library types for rpc (#2706) 2020-06-25 08:30:56 -07:00
Dmitry Gozman f111974ad6
chore: prepare parsed selectors to more tasks (#2696)
We currently have dispatchEventTask and waitForSelectorTask.
However, most selector-based operations make sense as tasks, to ensure
atomic execution, e.g. textContent(selector) or focus(selector).
This will fight hydration, elements recycling and other async issues.

In preparation, decouple tasks from selectors parsing so that
we can have common infrastructure for tasks.
2020-06-24 17:03:28 -07:00
Dmitry Gozman 39ce35e154
fix(errors): strict error handling around element operations (#2567)
- Gave all possible dom errors distinct names, and throw them on the node side.
- Separated errors into FatalDOMError and RetargetableDOMError.
  Fatal errors are unrecoverable. Retargetable errors
  could be resolved by requerying the selector.
- This exposed a number of unhandled 'notconnected' cases.
- Added helper functions to handle errors and ensure TypeScript catches
  unhandled ones.
2020-06-24 15:12:17 -07:00
Dmitry Gozman 355305d31d
feat(screenshot): accept timeout, migrate to Progress, wait for visible (#2679)
Element screenshot now waits for the element to become visible and
throws on detach.

Both screenshot methods accept a timeout and capture logs using Progress.
Also, carefully handling exceptions and restoring the viewport.
2020-06-24 10:16:54 -07:00
Pavel Feldman fca514d74e
chore: move non-trivial types out of types.ts (#2680) 2020-06-23 14:51:06 -07:00
Dmitry Gozman d0a6e1a64e
fix(dom): make selectText and scrollIntoViewIfNeeded wait for visible (#2628)
All other methods wait for the element to be visible, so we should make
them behave similarly.
2020-06-23 13:02:31 -07:00
Joel Einbinder 9000ccb3b2
fix(click): don't timeout when innerWidth is modified (#2669)
We were evaluating `innerWidth` in the main context, where it could be modified.
2020-06-22 14:03:31 -07:00
Pavel Feldman eac7dab8b7
fix(cors): allow intercepting cors requests on chromium (#2643) 2020-06-19 17:14:32 -07:00
Dmitry Gozman d0336ea5c2
fix(network): disallow intercepting redirects (#2617)
WebKit and Firefox are only able to continue redirects.
Firefox is faking it on the backend, so you can't even stall it.

Instead, we just do not fire routes for redirects on all browsers,
to avoid surprises.
2020-06-18 17:15:47 -07:00
Joel Einbinder b88fabab13
test: add another test for browserContext.addInitScript (#2285) 2020-06-18 12:27:48 -07:00
Mike Tobia 63924d9a26
feat(install/download-hosts): allow multiple per browser (#2452)
In addition to `PLAYWRIGHT_DOWNLOAD_HOST` env variable, this patch adds a per-browser 
configuration:

- `PLAYWRIGHT_CHROMIUM_DOWNLOAD_HOST`
- `PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST`
- `PLAYWRIGHT_WEBKIT_DOWNLOAD_HOST`
2020-06-18 11:20:43 -07:00
Dmitry Gozman 971bd88922
fix(chromium): do not bring page to front before screenshot (#2614) 2020-06-18 10:52:08 -07:00
Dmitry Gozman f581e84829
fix(css selector): handle missing spaces between [] and > (#2612) 2020-06-17 23:20:12 -07:00
Dmitry Gozman f9633ea9b7
fix(scrollIntoView): ensure similar behavior across browsers, handle errors (#2599) 2020-06-17 10:48:07 -07:00
Pavel Feldman 277d50e39c
feat(webkit): roll WebKit to 1286 - interception (#2601) 2020-06-17 08:34:42 -07:00
Pavel Feldman c220fc7f46
chore(logs): rework logs for simplicity (#2592) 2020-06-16 17:11:19 -07:00
Pavel Feldman 59d0f8728d
test(recorder): add recorder sanity tests (#2582) 2020-06-16 10:15:08 -07:00
Pavel Feldman 1c7a8952b9
chore(cli): add recording mode (#2579) 2020-06-15 15:27:03 -07:00
Pavel Feldman f2c47b1d33
feat(cli): introduce basic playwright CLI tool (#2571) 2020-06-14 17:24:45 -07:00
Pavel Feldman 61b11252b4
chore(debug): various debug mode improvements (#2561) 2020-06-13 13:17:12 -07:00
Dmitry Gozman d4c466868b
chore: explicitly plumb various errors through the retries (#2554)
We are about to have more errors, so explicit plumbing helps with visibility.
2020-06-12 14:59:26 -07:00
Dmitry Gozman c4e8720eb5
feat(debug): generate preview for ElementHandle (#2549)
This is a best-effort debugging feature - we try to generate preview asynchronously,
so it might not be available immediately.
2020-06-12 11:10:18 -07:00
Dmitry Gozman 1bf9e65ef5
fix(log): include log name in progress recording (#2550) 2020-06-12 09:48:56 -07:00
Pavel Feldman 894826dec0
chore: form the debug script for authoring hints / helpers (#2551) 2020-06-11 18:18:33 -07:00
Dmitry Gozman 7ddf66418a
test: add a failing test with React rerender (#2545) 2020-06-11 15:19:35 -07:00
Pavel Feldman e287f19493
feat(debug): add basic recording helper infra (#2533) 2020-06-11 11:42:52 -07:00
Dmitry Gozman 5e97acde0c
fix(oopif): make Page.addInitScript and Page.exposeBinding work for oopifs (#2542) 2020-06-11 11:41:36 -07:00
Pavel Feldman 17433d1881
chore: verify launch options (#2530) 2020-06-10 20:48:54 -07:00
Andrey Lushnikov 89d1b52f43
chore: revert atomic install (#2534)
This reverts 2 commits:

- "fix(installer): create tmp directory inside `browserPath` (#2498)"
  commit 946b4efa3b.

- "feat: support atomic installation of browsers (#2489)"
  commit 3de0c087bc.

This addresses installation issues we see in some CI environments.
2020-06-10 18:49:03 -07:00
Dmitry Gozman c99f0d1f98
feat(debug): more logs while waiting for stable, enabled, etc. (#2531) 2020-06-10 18:45:18 -07:00
Pavel Feldman 903de2582a
chore(websocket): extract common socket part (#2506) 2020-06-10 16:33:27 -07:00
Dmitry Gozman 1bb33650b0
chore: remove ExtendedEventEmitter and inline waitForEvent (#2529) 2020-06-10 15:12:50 -07:00
Pavel Feldman 8ee19d53e7
feature(webkit): roll WebKit to 1273 (#2514) 2020-06-10 13:36:45 -07:00
Darío Kondratiuk e3f34f6ae2
fix(selectOption): allow passing null to unselect all (#2405) 2020-06-10 09:37:29 -07:00
Dmitry Gozman 4d069dda0f
feat: avoid side effects after progress aborts (#2518)
Actions like click, focus or polling now avoid doing any work
with side-effects after their progress has been aborted.
2020-06-09 18:57:11 -07:00
Dmitry Gozman 80705ff5e9
chore: simplify logging a bit (#2512)
This merges a few classes and stops inheriting from InnerLogger.
2020-06-09 16:11:17 -07:00
Pavel Feldman 9aa9d6bc1d
feat(downloads): accept downloads in persistent, allow specifying the downloadsPath (#2503) 2020-06-08 21:45:35 -07:00
Dmitry Gozman 55cfff38c6
fix(waitForFunction): handle predicate that throws (#2488)
Currently, we fail when the predicate throws on the first call,
and timeout when it fails on any other call.

There are two possible ways to handle throwing predicates:
- Fail waitForFunction if predicate throws once. This is good
  since it gives you the error faster.
- Tolerate predicate exceptions. This is good because you do
  not have to worry about non-initialized state during load.

This change implements the former.
2020-06-08 16:29:29 -07:00
Andrey Lushnikov 946b4efa3b
fix(installer): create tmp directory inside browserPath (#2498)
`fs.rename` doesn't work across partitions, so we have to have
tmp folder next to our final destination.

Fixes #2494
2020-06-08 12:11:16 -07:00
Dmitry Gozman bb4e959d2d
feat(debug): add note about DEBUG=pw:api to errors (#2496) 2020-06-08 11:41:09 -07:00
Dmitry Gozman 5c3a275270
feat(debug): improve api logs (#2481) 2020-06-06 20:59:06 -07:00
Andrey Lushnikov 3de0c087bc
feat: support atomic installation of browsers (#2489)
Currently, Ctrl-C while extracting browser might yield users in
a bad place.

This patch extracts browsers in a temp directory that is later
moved to a installer registry.
2020-06-05 16:26:32 -07:00
Dmitry Gozman 3ec79e17fc
chore: simplify timeout handling in progress (#2487) 2020-06-05 15:53:30 -07:00
Dmitry Gozman 300099734c
chore: migrate waitForEvent to Progress (#2483)
Drive-by: remove/simplify some helper code.
2020-06-05 14:14:19 -07:00
Pavel Feldman fb058ffe0d
feat(proxy): allow specifying proxy (#2485) 2020-06-05 13:50:15 -07:00
Dmitry Gozman 87e0c96ef2
chore: inverse FrameTask callbacks/promises (#2478)
Alternative way to handle this indirection.
2020-06-05 10:06:59 -07:00
Dmitry Gozman c08da50bb3
chore: introduce session.sendMayFail to ease error logging (#2480) 2020-06-05 07:50:26 -07:00
Dmitry Gozman 1d37a10558
chore: migrate navigations to Progress (#2463) 2020-06-04 16:43:48 -07:00
Dmitry Gozman 724d73c03b
feat(debug): chromium debugging port (#2246)
This exposes Chromium remote debugging pipe under the port PLAYWRIGHT_CHROMIUM_DEBUG_PORT.
2020-06-04 16:40:07 -07:00
Dmitry Gozman d5c992e1db
chore: unify evaluations across browsers even more (#2459)
This moves all the logic around UtilityScript to javascript.ts.
Also uncovers a bug in WebKit where we cannot returnByValue after navigation.
2020-06-03 17:50:16 -07:00
Dmitry Gozman 8e6375f532
chore: reduce the number of evaluate methods, improve types (#2454)
Types can now handle non-trivial tuples with handles inside.
2020-06-03 13:22:05 -07:00
Dmitry Gozman 1accb5141d
chore: convert more actions to Progress (#2444) 2020-06-03 11:23:24 -07:00
Dmitry Gozman f188b0a174
chore: migrate most actions to Progress (#2439) 2020-06-03 09:14:53 -07:00
Dmitry Gozman a644f0a881
feat(fill): wait for the element to be enabled/writable/visible (#2435) 2020-06-01 18:56:49 -07:00
Dmitry Gozman bf67245de6
feat(debug): stream logs from waitForSelector (#2434)
- we can now stream logs from InjectedScriptProgress to Progress;
- waitForSelector task uses it to report intermediate elements.
2020-06-01 15:48:23 -07:00
Dmitry Gozman 454411062b
fix(oopif): race between detachedFromTarget and frameAttached (#2419)
During remote -> local transition, these two events come in unpredictable order, so we try to handle both cases. Also, remote frame detach was not handled at all.
2020-06-01 13:47:02 -07:00
Dmitry Gozman de0bbd3031
chore: remove page pause support (#2431) 2020-06-01 11:14:16 -07:00
Dmitry Gozman b7df4d57a4
chore: migrate wait tasks to Progress (#2422) 2020-06-01 08:54:18 -07:00
Pavel Feldman c001facffc
feat(firefox): allow passing user prefs at launch time (#2417) 2020-05-31 09:28:57 -07:00
Dmitry Gozman 8f350e4fe6
chore: make polling in page cancelable from node (#2399)
- unifies polling timeouts with everything else,
  based on the client time instead of the server time;
- prepares polling tasks for cancellation token
  behavior.

Unfortunately, RerunnableTask had to be rewritten almost
entirely.
2020-05-30 15:00:53 -07:00
Dmitry Gozman acf059fe00
fix(click): wait for button, input and select to be enabled before clicking (#2414) 2020-05-30 13:29:46 -07:00
Dmitry Gozman 8e4a1e7c67
fix(text selector): do not match text inside <head> (#2413)
We already skip <script> and <style> tags because they are not
the page content. Similar reasoning applies to <head> that has
content that is never rendered on the page.
2020-05-29 15:28:27 -07:00
Dmitry Gozman d980ed7e7e
chore: introduce Progress concept (#2350)
A progress roughly corresponds to an api call. It is used:

- to collect logs related to the call;
- to handle timeout;
- to provide "cancellation token" behavior so that cancelable process can either
  early-exit with progress.throwIfCanceled() or race against it with progress.race();
- to ensure resources are disposed in the case of a failure
  with progress.cleanupWhenCanceled();
- (possibly) to log api calls if needed;
- (in the future) to augment async stacks.
2020-05-29 14:39:34 -07:00
Andrey Lushnikov fdd48f8940
chore: remove confusing logging from registry (#2397) 2020-05-28 22:36:08 -07:00
Andrey Lushnikov 7a785ac268
fix: properly rewrite error message (#2392)
Error message is included in error's stack, so we should
re-write stack as well.

Fixes #2373
2020-05-28 16:33:31 -07:00
Dmitry Gozman fdbd4fe197
fix(selectors): fix selector parsing for css attributes and quotes (#2389)
- css attribute selector may contain spaces;
- >> escaping inside strings was sometimes incorrect.

See added test cases for more details.
2020-05-28 14:49:39 -07:00
Andrey Lushnikov 7981e4e3da
fix: support event source type in firefox (#2390)
References #2189
2020-05-28 14:38:47 -07:00
Pavel Feldman 6620008dcb
chore: follow up to address evaluation review comments (#2380) 2020-05-27 22:19:05 -07:00
Dmitry Gozman ece4789165
feat(debug): expose playwright object in console (#2365)
- playwright.$ and playwright.$$ to query elements;
- playwright.inspect to reveal an element;
- playwright.clear to remove highlight.
2020-05-27 22:16:54 -07:00
Dmitry Gozman 4413138cc6
fix(fill): allow to clear number input (#2376) 2020-05-27 20:01:08 -07:00
Dmitry Gozman 057ae14adc
feat: make browserServer.kill() wait for the process to exit (#2375)
This ensures we cleaned everything up.
2020-05-27 19:59:03 -07:00
Max Schmitt 9dfe9348ac
feat: Request.postDataJSON (#2368) 2020-05-27 18:43:49 -07:00
Pavel Feldman e168fddac8
fix(evaluate): consistently serialize json values (#2377) 2020-05-27 17:19:05 -07:00
Dmitry Gozman 609bc4cfb0
chore: add stack trace utilities and tests (#2371) 2020-05-27 14:26:44 -07:00
Dmitry Gozman 1e2b46437d
feat(debug): when debugging, use zero as default timeout (#2362)
Otherwise, operations always time out while stepping in debugger.
2020-05-27 13:25:57 -07:00
Dmitry Gozman 8f0f32b5e6
chore: move debug-related code to src/debug (#2309) 2020-05-26 14:08:32 -07:00
Dmitry Gozman 27d30fe162
chore: encapsulate more launching logic in BrowserType (#2339) 2020-05-22 16:06:00 -07:00
Dmitry Gozman aac5bf24ec
fix(popups): do not override popup size from window features (#2139)
We usually force window size from the browser context. However,
popups that have window features insist on a specific window size,
so we respect that.
2020-05-22 15:56:37 -07:00
Dmitry Gozman e2972ad5ba
feat(click): retry when the element it outside of the viewport (#2330)
The element might get animated into the viewport.
2020-05-22 11:15:57 -07:00
Dmitry Gozman 55d47fd48f
chore: unify launching server between browser types (#2338) 2020-05-22 07:03:42 -07:00
Dmitry Gozman 3aca21c13b
chore: simplify launch routine a bit more (#2336) 2020-05-21 19:16:13 -07:00
Pavel Feldman 5ee6494032
feat(evaluate): return user-readable error from evaluate (#2329) 2020-05-21 16:00:55 -07:00
Dmitry Gozman aae3f1e75d
feat(default context): support selected options for default context (#2177) 2020-05-21 15:13:16 -07:00
Pavel Feldman 2ede4bce12
chore: further unify launching and connection (#2320) 2020-05-21 09:43:10 -07:00
Yury Semikhatsky 9154f4b6e0
feat(webktt): explicitly enable Playwright domain on start (#2315) 2020-05-21 08:44:57 -07:00
Pavel Feldman f9b437a49e
chore: pull common functionality into the BrowserTypeBase (#2312) 2020-05-20 16:30:04 -07:00
Pavel Feldman aa0d844c76
chore: introduce utility script for evaluate helpers (#2306) 2020-05-20 15:55:33 -07:00
Dmitry Gozman 48440f7ed7
test: unflake fixtures test (#2313)
Drive-by: ensure we call onkill before manually exiting the process.
2020-05-20 14:58:27 -07:00
Pavel Feldman e558f0516b
chore: print the launch error message to console (#2304) 2020-05-20 00:10:10 -07:00
Andrey Lushnikov e312845ba9
fix: less confusing error message (#2305)
Fixes #2283
2020-05-19 17:47:46 -07:00
Andrey Lushnikov 545c43d28d
fix: better hittarget testing for clicking (#2217)
While checking for hittarget, we first bubble from a target element
up to find the first element without `pointer-events: none` style.

This bubbling does not make much sense: we risk desperately clicking
"body" element, when we were actually asked to click some deeply-nested
"span".

Additionally, in many cases the original intent is to click a button. In this
case, we should use the enclosing "button" as a hit target directly.

Fixes #2175
2020-05-19 16:27:56 -07:00
Dmitry Gozman de606b9553
fix(chromium): handle various exception values in pageerror (#2293) 2020-05-19 15:20:49 -07:00
Dmitry Gozman 7efc22c062
fix(chromium): websocket wrapper leaks child sessions (#2291)
When a parent session is detached, we do not always get Target.detachedFromTarget
for child sessions. This is especially true when the socket disconnects, leaving
all child sessions in the maps.

Flakily reproducible by browserType.connect multiclient tests.
2020-05-19 15:02:13 -07:00
Dmitry Gozman 481643409e
feat(debug): persist devtools preferences in Chromium (#2266)
We store devtools-preferences.json file in the downloaded browser directory.
2020-05-19 14:55:11 -07:00
Dmitry Gozman 8957c86837
feat(debug): add source maps to evaluates in debug mode (#2267)
When PLAYWRIGHT_DEBUG_UI is set, we try to find the source
of the function in the current file and source map it.
2020-05-19 08:40:45 -07:00
Dmitry Gozman 82cab094e8
feat(logging): add logging to websocket transport (#2289) 2020-05-18 19:00:38 -07:00
Andrey Lushnikov f24696be62
feat: add page convenience methods for textContent and getAttribute (#2235)
This patch adds:
- `page.innerText()` / `frame.innerText()`
- `page.innerHTML()` / `frame.innerHTML()`
- `page.textContent()` / `frame.textContent()`
- `page.getAttribute()` / `frame.getAttribute()`

Fixes #2143
2020-05-18 17:58:23 -07:00
Dmitry Gozman 359cb3a740
fix(oopif): adopt main requests into oopifs (#2284)
Main request for an OOPIF starts in the parent session, and the oopif
session is create only after the response has been received. Therefore,
we should adopt the request after oopif session is created.
2020-05-18 17:13:51 -07:00
Pavel Feldman 2bd427ad1d
feat(exposeBinding): a more powerful exposeFunction with source attribution (#2263) 2020-05-18 14:28:06 -07:00
Dmitry Gozman 4bf5742d47
fix(chromium): abort fetch requests that lack networkId (#2254)
These requests are usually internal ones, and we can safely abort them.
An example would be DevTools loading cached resources to show the content.
There will never be a matching Network.requestWillBeSent event, so we do not
report them to the user.
2020-05-15 15:22:29 -07:00
Pavel Feldman 99b7aaace8
chore: refactor injected script harness (#2259) 2020-05-15 15:21:49 -07:00
Andrey Lushnikov a38ac3fb62
fix: report hash in page.url() (#2252)
Fixes #2247
2020-05-14 17:23:19 -07:00
Andrey Lushnikov e035bf3b33
fix: update webkit version (#2250)
Fix #2245
2020-05-14 16:47:18 -07:00
Dmitry Gozman 63cc126805
fix(webkit): do not swallow init errors (#2242)
This is a speculative fix to the following issue from the bots:

NON-TEST ERROR #0: UNHANDLED ERROR
  TypeError: Cannot read property 'url' of undefined
      at WKPage._onTargetCreated (/Users/runner/runners/2.169.1/work/playwright/playwright/src/webkit/wkPage.ts:274:12)
      at process._tickCallback (internal/process/next_tick.js:68:7)

I assume that _initializeSession did swallow an error, so we erroneously
consider Page to be fully initialized (and having main frame).
2020-05-14 15:43:23 -07:00
Dmitry Gozman e8e761f77f
chore: use internal BrowserOptions to unify browsers (#2230) 2020-05-14 13:22:33 -07:00
Dmitry Gozman 76e106605f
fix(screenshot): use innerW/H instead of offsetW/H to determine viewport size (#2229)
When capturing a screenshot with null viewport, we determine the screenshot size
based on body.offsetHeight. This is a very large number for long pages. We should
use window.innerHeight instead.
2020-05-13 20:53:11 -07:00
Joel Einbinder dbef7de42a
feat(electron): types (#2231) 2020-05-13 20:51:53 -07:00
Dmitry Gozman 650d73445c
fix(actions): do not wait for the created popups (#2219)
Since we are recommending Promise.all pattern anyway, this special
logic just adds to the possibility of timeout if something goes wrong.

For example, Firefox sometimes send Page.willOpenNewWindowAsynchronously
later than the new target arrives and input action just hangs.
2020-05-13 17:20:33 -07:00
Yury Semikhatsky e081ba7256
chore: improve error message (#2222) 2020-05-13 15:57:26 -07:00
Pavel Feldman f63ea3ffd2
feat(downloads): expose suggested filename (#2062) 2020-05-12 19:23:08 -07:00
Dmitry Gozman 072dcba94a
api(viewport): do not allow isMobile and deviceScaleFactor for null viewports (#2190)
Also make sure we do not alter viewport when passed null.
2020-05-12 18:31:17 -07:00
Yury Semikhatsky f10e8c4d47
chore(chromium): nicer error when running as root without --no-sandbox (#2214) 2020-05-12 16:43:15 -07:00
Pavel Feldman 624ca4d85d
chore: restore copyright for SerializedAXNode type 2020-05-12 15:33:51 -07:00
Pavel Feldman 414ae0025e
fix(electron): handle in-event await errors (#2207) 2020-05-12 15:28:37 -07:00
Dmitry Gozman 28845e5ccc
feat(firefox): bump and use context setters (#2194) 2020-05-12 15:13:48 -07:00
Pavel Feldman cb465bc698
fix(abort): abort waiting with error upon disconnect (#2204) 2020-05-12 13:38:24 -07:00
Pavel Feldman 3f8dfed67f
feat(electron): add app.firstWindow convenience method (#2195) 2020-05-12 08:43:41 -07:00
Pavel Feldman ffe7084652
feat(electron): experimental electron support (#2166) 2020-05-11 18:00:33 -07:00
Dmitry Gozman a2bee2ca73
fix(launch): handle timeout and exceptions during launch (#2185) 2020-05-11 15:00:13 -07:00
Pavel Feldman 9895cd0a31
chore: optionally create downloads folder (#2188) 2020-05-11 14:42:13 -07:00
Dmitry Gozman 8c083486a0
fix(launch): handle websocket connect exceptions (#2184) 2020-05-11 13:49:57 -07:00
Dmitry Gozman ae8d97cdf9
feat(persistent context): ensure initial about:blank (#2161)
We declare only the initial about:blank to be a supported usecase, so that
we can support options for the default context in the future.
2020-05-10 15:23:53 -07:00
Pavel Feldman 8e59031078
chore: introduce debugAssert (#2160) 2020-05-08 10:37:54 -07:00
Pavel Feldman 7a8dd2c361
feat(console): allow page.on('console', console.log) (#2145) 2020-05-07 15:34:09 -07:00
Dmitry Gozman 51fe84922c
fix(css selector): support comma-separated selector lists (#2120) 2020-05-07 13:36:54 -07:00
Pavel Feldman 793a2bf7d4
fix(firefox): do not run firefox as a part of the installation process (#2125) 2020-05-06 10:42:27 -07:00
Pavel Feldman d95891ebad
fix(install): only install browsers needed by this revision (#2112) 2020-05-04 22:24:40 -07:00
Dmitry Gozman 33ebe66ad4
fix(webkit): allow contenttype with charset in interception (#2108) 2020-05-04 21:49:54 -07:00
Pavel Feldman 1c17929bd8
chore: add input logging and timeout debugging hints (#2109) 2020-05-04 21:44:33 -07:00
Pavel Feldman f6210ae996
fix(webkit): click moving targets on windows (#2101) 2020-05-04 16:30:19 -07:00
Pavel Feldman 710c156d48
fix(chromium): disable same site by default and improved controls (#2097) 2020-05-04 13:43:44 -07:00
Pavel Feldman bcce48362a
api(waitForSelector): make "state: visible" default, includes rename to state (#2091) 2020-05-04 11:03:44 -07:00
Pavel Feldman 1f0217986e
feat(firefox): cache firefox pre-compiled scripts (#2087) 2020-05-04 09:34:59 -07:00
Yury Semikhatsky 03ca297890
fix(webkit): make click work with cross-process _blank target (#2083) 2020-05-02 10:57:33 -07:00
Pavel Feldman f8bea85c88
feat(webkit): disable pause on click (#2077) 2020-05-01 12:59:18 -07:00
Dmitry Gozman d7a1e013c6
fix(chromium): do not wait forever for navigations that target another tab/download (#2068) 2020-04-30 21:24:03 -07:00
Pavel Feldman 9c67ce5289
test: simplify pausing tests (#2056) 2020-04-30 14:13:47 -07:00
Dmitry Gozman 953dd36d38
feat(api): remove 'mutation' polling option (#2048)
It is not compatible with shadow dom.
2020-04-29 21:34:14 -07:00
Dmitry Gozman 4afd39117a
fix(waitForSelector): use raf polling instead of mutation (#2047)
MutationObserver does not work with mutations in the shadow, so we cannot use it for selectors that pierce shadows.
2020-04-29 20:46:42 -07:00
Pavel Feldman 9f62f29946
feat(install): use shared installation folder by default (#2044) 2020-04-29 18:59:20 -07:00
Pavel Feldman c55db6d315
browser(webkit): roll webkit to 1213 (#2045) 2020-04-29 18:40:18 -07:00
Yury Semikhatsky 78b44ed2a0
fix: report new window downloads (#2019) 2020-04-29 18:36:24 -07:00
Yury Semikhatsky 5993a6a0e0
fix: throw from eval methods if >1 argument is passed (#2043) 2020-04-29 18:35:04 -07:00
Pavel Feldman 0228ba4992
feat(registry): implement download registry (#1979) 2020-04-29 17:19:21 -07:00
Pavel cccf3f7248 chore: bringing back paused=true 2020-04-29 17:02:24 -07:00
Pavel Feldman c01e554edd
test: add more pausing tests (#2040) 2020-04-29 16:17:03 -07:00
Pavel Feldman 534857269b
fix(console): respect repeat count in webkit (#2032) 2020-04-29 12:13:57 -07:00
Dmitry Gozman b11d7f15bb
feat(input): retry when hit target check fails, prepare for page pause (#2020) 2020-04-29 11:05:23 -07:00
Pavel Feldman 6c94f604d8
feat(chromium): roll to r763809 (#2028) 2020-04-29 08:44:09 -07:00
Pavel Feldman 2cdf297245
chore: remove uncompiled download-browser (#2018) 2020-04-28 17:06:01 -07:00
Dmitry Gozman 7f5d89009c
test(click): add a test for 'Element has moved' exception (#2017) 2020-04-28 11:58:22 -07:00
Pavel Feldman d52bd92983
chore: read browser revisions off browsers.json (#2009) 2020-04-28 10:37:23 -07:00
Dmitry Gozman f662686fcd
chore(css selector): temporarily remove light dom shortcut (#2008) 2020-04-27 20:23:31 -07:00
Dmitry Gozman 8aab725813
fix(css selector): properly parse quoted attributes when querying in shadow (#2007) 2020-04-27 19:50:11 -07:00
Dmitry Gozman 031587a9cf
fix(visibility): unify visibilty checks (#1998)
This applies a common definition of visibility to clicks and waitfors:
- non-empty bounding box - implies non-empty content and no display:none;
- no visibility:hidden.
2020-04-27 15:40:46 -07:00
Pavel Feldman 7f8aa703dd
api(waitFor): remove waitFor, use specialized wait functions (#1995) 2020-04-27 12:08:29 -07:00
Dmitry Gozman f9f5fd03b0
feat(selectors): allow to capture intermediate result (#1978)
This introduces the `*name=body` syntax to capture intermediate result.
For example, `*css=section >> "Title"` will capture a section that contains "Title".
2020-04-27 10:14:09 -07:00
Dmitry Gozman 7ecf252dd6
feat(text selector): concat sibling text nodes when calculating text (#1969)
Text that is split into multiple text nodes now matches.
2020-04-24 20:49:29 -07:00
Pavel Feldman b60c006c63
chore: simplify and restructure downloads (#1974) 2020-04-24 19:14:10 -07:00
Yury Semikhatsky 7c9762fae9
fix: support blob downloads (#1954) 2020-04-23 20:04:19 -07:00
Dmitry Gozman 5ac7f0e4ec
fix(text selector): allow single quoted text (#1952) 2020-04-23 18:48:53 -07:00
Pavel Feldman c1c0237d4e
api(dispatchEvent): page, frame and handle versions added (#1932) 2020-04-23 14:58:37 -07:00
Joel Einbinder 671cfa0a54
fix(types): support objects with typed keys and values (#1752)
There are a few places in the API where we use objects as maps. This patch adds them to docs and the types.

For `env`, we accept booleans and numbers as well because they are often used for their string values.
2020-04-23 14:45:57 -07:00
Dmitry Gozman 793586e42c
fix(click): throw instead of timing out when the element has moved (#1942) 2020-04-23 14:44:06 -07:00
Pavel Feldman 2fcc2b5552
chore(chromium): resize browser frame when emulating viewport (#1924) 2020-04-23 10:38:58 -07:00
Ross Wollman 53c78a8a29
fix(downloads): fix acceptDownloads complaint (#1777) (#1923) 2020-04-22 17:02:15 -07:00
Yury Semikhatsky 00e8d88777
fix: do not auto wait for downloads (#1921) 2020-04-22 15:08:39 -07:00