44 Commits

Author SHA1 Message Date
Dmitry Gozman
530523cb67
feat(setInputFiles): support label retargeting (#7364)
This way `page.setInputFiles('label')` works, similarly to other input actions.
2021-06-28 14:18:01 -07:00
Pavel Feldman
e6bf0a07fe
feat(force): add fill, selectOption, selectText ({force}) (#7286) 2021-06-24 08:18:09 -07:00
Pavel Feldman
5732307280
feat(inputValue): implement *.inputValue() (#7285) 2021-06-23 22:19:20 -07:00
Dmitry Gozman
837ee08a53
fix(waitForSelector): retry when context is gone during node adoption (#6851)
There is a small window after finishing the "rerunnable task" where
we adopt the node to the main world and navigation could destroy the context.
2021-06-02 20:17:24 -07:00
Yury Semikhatsky
475a417dfc
fix: compute payload mime type on server (#6647) 2021-05-18 18:30:20 -07:00
Pavel Feldman
434f474ce8
chore(evaluate): implement non-stalling evaluate (#6354) 2021-04-29 09:28:19 -07:00
Dmitry Gozman
6bdc67ac6a
feat(actions): trial option that only performs the checks (#6246)
Available for check, click, dblclick, hover, tap, uncheck.
2021-04-21 12:22:19 -07:00
Dmitry Gozman
e81a3c5901
api: add option position to check/uncheck (#6153)
Since check/uncheck does click under the hood, sometimes it might
need to click at a different position. One example would be a long
label that contains links inside, and clicking in the center happens
to hit the link instead of the label itself.
2021-04-12 12:41:25 -07:00
Dmitry Gozman
bd8433ba49
test: cleanup various testing env variables (#6155) 2021-04-09 07:59:09 -07:00
Pavel Feldman
0dfde2e975
fix(screenshot): never throw page is navigating (#6103) 2021-04-06 16:01:38 -07:00
Pavel Feldman
5ae731a3fb
chore(evaluate): respect signals when evaluating on handle (#5847) 2021-03-17 12:03:21 -07:00
Pavel Feldman
7011e5737a
chore(evaluate): explicitly annotate methods that wait for signals (#5859) 2021-03-17 10:47:07 -07:00
Pavel Feldman
d81ebff414
fix(inspector): do not collect action signals while on pause (#5843) 2021-03-16 12:06:12 -07:00
Pavel Feldman
fea6669473
feat(trace): highlight action target (#5776) 2021-03-10 11:43:26 -08:00
Andrey Lushnikov
6b40d75d03
fix: allow setting input files for detached <input> elements (#5467)
Fixes #5403
2021-02-16 10:22:46 -08:00
Pavel Feldman
aef052aecc
chore: pause on input in pwdebug mode (#5427) 2021-02-12 10:11:30 -08:00
Pavel Feldman
6576bd8b31
chore: move before/after action instrumentation into dispatcher (#5416) 2021-02-10 21:55:46 -08:00
Dmitry Gozman
b4b14eab69
chore: refactor actionability checks (#5368) 2021-02-10 12:36:26 -08:00
Pavel Feldman
2e01fbdbec
chore: introduce instrumentation api (#5385) 2021-02-09 14:44:48 -08:00
Pavel Feldman
0652f3251f
chore: introduce sdk object base class (#5370) 2021-02-09 09:00:00 -08:00
Pavel Feldman
3d253c4e5c
feat: auto-detect expression/function in js server (#5284) 2021-02-03 13:49:25 -08:00
Dmitry Gozman
5033261d27
feat(trace): streaming snapshots (#5133)
- Instead of capturing snapshots on demand, we now stream them
  from each frame every 100ms.
- Certain actions can also force snapshots at particular moment using
  "checkpoints".
- Trace viewer is able to show the page snapshot at a particular
  timestamp, or using a "checkpoint" snapshot.
- Small optimization to not process stylesheets if CSSOM was not used.
  There still is a lot of room for improvement.
2021-01-25 18:44:46 -08:00
Yury Semikhatsky
615954b285
fix(dom): make selectOption wait for options (#5036) 2021-01-19 11:27:05 -08:00
Dmitry Gozman
5a2cfdbd47
api: add isChecked method (#4953)
This adds `{Page,Frame}.isChecked(selector)` and `ElementHandle.isChecked()` methods.

Useful to do assertions in tests:
```js
await page.click('text="Add TODO"');
expect(await page.isChecked('.item-done')).toBe(false);
```
2021-01-08 17:36:17 -08:00
Joel Einbinder
31d980fc92
chore(webpack): minify injected sources (#4946) 2021-01-08 16:15:05 -08:00
Dmitry Gozman
3f904056ee
api: add isVisible, isHidden, isEnabled, isDisabled and isEditable (#4915)
These methods are useful for verification in tests, e.g.
```js
expect(await page.isEnabled(':text("Remove All")')).toBe(false);
await page.click(':text("Add Item")');
expect(await page.isVisible('.item:text("new item")')).toBe(true);
expect(await page.isEnabled(':text("Remove All")')).toBe(true);
```
2021-01-08 12:27:54 -08:00
Dmitry Gozman
35533b15c1
fix(scroll): scroll from under the sticky header (#4641)
When element with position:sticky covers some part of
the scroll container, we could fail to scroll from under it
to perform an action. To fight this, we can try different
scroll alignments and scroll to the top/bottom/center
in the attempt to scroll away from sticky header/footer/sidebar.
2020-12-16 15:29:42 -08:00
Joel Einbinder
ea833daa89
chore: fix internal binding (#4598) 2020-12-08 08:38:29 -08:00
Joel Einbinder
3624e3e315
chore: add internal method for utility context bindings (#4566)
* internal binding extracted from dnd patch

* refactor it into the page

* dgozman comments 1
2020-12-02 13:43:16 -08:00
Pavel Feldman
f5fbea94bb
feat(debug): allow using timeout for rafs for throttling debugging 2020-10-23 16:06:51 -07:00
Joel Einbinder
92dda698f8
feat: tap (#4097) 2020-10-19 10:07:33 -07:00
Dmitry Gozman
b3497b333e
fix(actions): wait for some time before retrying the action (#4001)
This saves some CPU cycles while waiting for the page to
change the state, e.g. for animations to complete.

Note that retrying logic is only applicable in rare
circumstances like unexpected scroll in the middle of an
action, or some overlay blocking the click. Usually,
action times out in this cases while retrying.
2020-09-29 10:28:19 -07:00
Dmitry Gozman
01a4060665
chore: move action instrumentation per-context (#3908)
This allows tracing to expose plugin-like api.

This also remove Progress -> ActionMetadata dependency, leaving
Progress a low-level utility.
2020-09-17 09:32:54 -07:00
Dmitry Gozman
36f2420b0f
chore(trace): remove dependency on handle._previewPromise (#3906)
We now mark the target with '__playwright_target__' attribute and
let the trace viewer do whatever it wants.
2020-09-16 15:26:59 -07:00
Dmitry Gozman
01198f8eef
fix($$): use utility context when possible (#3870)
This avoids the typical issue of overridden bulitins,
trading it for performance of one by one node adoptions.
2020-09-14 10:38:14 -07:00
Dmitry Gozman
5314512cbc
chore: inline page._runAbortableTask (#3861)
It does not do anything nowadays.
2020-09-11 23:33:38 -07:00
Dmitry Gozman
263aa06fa4
feat(trace): trace more actions (#3853) 2020-09-11 13:28:24 -07:00
Dmitry Gozman
38ed8de23d
feat(tracing): trace actions (#3825)
- Fill and click actions pass metadata to Progress.
- Progress reports success/failure through instrumentation.
- Tracer consumes ActionResult and ActionMetadata and records them.

Currently, only click and fill actions pass metadata to
contain the size of the change. Everything else should follow.
2020-09-10 21:42:09 -07:00
Pavel Feldman
74f1a64e36
fix(debug): do not generate source urls for anonymous scripts (#3787) 2020-09-07 15:50:25 -07:00
Pavel Feldman
fea3ceb36c
chore: expose injectedScript.extend (#3784) 2020-09-06 18:19:32 -07:00
Dmitry Gozman
675ce00432
chore: introduce "instrumentation" that is used for debug and trace (#3775) 2020-09-04 16:31:52 -07:00
Dmitry Gozman
de547d7d65
fix(connect): make selectors.register work in connected browser (#3664)
This is a large rework of selectors:
- Each BrowserContext now has a separate Selectors instance that has its own registrations.
  Most of them share a single sharedSelectors instance, but contexts created for a connected
  browser have their own instance.
- Connected browser now gets a RemoteBrowser object that encapsulates Selectors and Browser.
  This Selectors object is registered with the api selectors.
- Public selectors.register api iterates over all registered Selectors channels
  and registers in each of them.
- createSelector testing method migrated to ElementHandle._createSelectorForTest.
2020-09-02 16:15:43 -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
cd220daa83
chore: move src files to server (#3593) 2020-08-24 06:51:51 -07:00