Commit graph

1365 commits

Author SHA1 Message Date
Andrey Lushnikov 6139b432fd
fix(ssim-cie94): increase SSIM window radius (#19343)
While migrating Playwright tests from pixelmatch comparator to the
ssim-cie94 comparator, we noticed a rendering artifact that happens
on playwright screenshot tests on WebKit Linux.

This PR adds a set of cropped-down examples and tunes the ssim-cie94
comparator to accept these rendering artifacts.
2022-12-07 16:25:16 -08:00
Dmitry Gozman dd58609a0b
chore: fix lint in types.d.ts (#19346) 2022-12-07 15:29:57 -08:00
Pavel Feldman 7aa3935dcc
chore: match selected options by both value and label (#19316) 2022-12-07 09:04:32 -08:00
Dmitry Gozman fd22d8bde1
feat(tether): support hostname pattern in socks proxy (#19302)
For now, only '*' and 'localhost' are supported.

References #19287.
2022-12-07 08:46:35 -08:00
Andrey Lushnikov cac67fb94f
chore: do not use "threshold" option for the ssim-cie94 comparator (#19314) 2022-12-06 17:03:13 -08:00
Dmitry Gozman d294c5da33
chore: roll stable-test-runner to 1.28.1 (#19310)
This required `allowJs: false` in our `tsconfig.json` due to the
following error:

```

Error: Cannot find module './utilsBundleImpl'
Require stack:
- <playwright>/packages/playwright-core/src/utilsBundle.ts
- <playwright>/packages/playwright-test/lib/reporters/html.js
- <playwright>/tests/playwright-test/reporter-html.spec.ts
- <playwright>/tests/playwright-test/stable-test-runner/node_modules/@playwright/test/lib/loader.js
- <playwright>/tests/playwright-test/stable-test-runner/node_modules/@playwright/test/lib/runner.js
- <playwright>/tests/playwright-test/stable-test-runner/node_modules/@playwright/test/lib/cli.js
- <playwright>/tests/playwright-test/stable-test-runner/node_modules/playwright-core/lib/cli/cli.js
- <playwright>/tests/playwright-test/stable-test-runner/node_modules/playwright-core/cli.js
- <playwright>/tests/playwright-test/stable-test-runner/node_modules/@playwright/test/cli.js

   at ../../packages/playwright-core/src/utilsBundle.ts:20

  18 | import path from 'path';
  19 |
> 20 | export const colors: typeof import('../bundles/utils/node_modules/colors/safe') = require('./utilsBundleImpl').colors;
     |                                                                                   ^
  21 | export const debug: typeof import('../bundles/utils/node_modules/@types/debug') = require('./utilsBundleImpl').debug;
  22 | export const getProxyForUrl: typeof import('../bundles/utils/node_modules/@types/proxy-from-env').getProxyForUrl = require('./utilsBundleImpl').getProxyForUrl;
  23 | export const HttpsProxyAgent: typeof import('../bundles/utils/node_modules/https-proxy-agent').HttpsProxyAgent = require('./utilsBundleImpl').HttpsProxyAgent;

    at Object.<anonymous> (<playwright>/packages/playwright-core/src/utilsBundle.ts:20:83)
    at Object.<anonymous> (<playwright>/packages/playwright-test/src/reporters/html.ts:17:1)

```
2022-12-06 15:46:19 -08:00
Dmitry Gozman 4784dae10f
fix(role): accessibleName computation should walk the flat dom tree (#19301)
- When visiting `<slot>` element, descend into assigned nodes.
- When node has `assignedSlot`, skip it during regular traversal.

Fixes #18989.
2022-12-06 09:31:26 -08:00
Dmitry Gozman 81c8620bfe
chore: upgrade internal types to support TypeScript 4.9.3 (#19280)
Fixes https://github.com/microsoft/TypeScript/issues/51619

Co-authored-by: Max Schmitt <max@schmitt.mx>
2022-12-05 17:22:25 -08:00
Dmitry Gozman 48182a4eb2
chore: refactor code around text selectors (#19278) 2022-12-05 14:08:54 -08:00
Playwright Service 84a0aaaaff
feat(chromium-tip-of-tree): roll to r1065 (#19239)
Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2022-12-05 11:22:03 -08:00
Playwright Service e576bd17df
feat(chromium): roll to r1038 (#19237)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2022-12-03 13:03:43 -08:00
Dmitry Gozman e55a2bdf16
docs: rework Selectors to Other Locators (#19244)
- Replace links to `selectors.md` with `locators.md`.
- Remove sections that are covered by Locators docs.
- Restructure the rest of selectors doc, update them in terms of
locators.

Fixes #18992.
2022-12-02 21:48:37 -08:00
Pavel Feldman 9b35ef3b8d
docs: introduce the concept of details (#19242) 2022-12-02 17:35:21 -08:00
Dmitry Gozman 0be4fa768a
fix(codegen): do not generate Promise.all (#19182)
Drive-by: fix `download`, `dialog` and `popup` signals to use different
variable names in all languages.
2022-12-02 17:33:01 -08:00
Andrey Lushnikov 6d82460a02
feat: implement a new image comparison function (#19166)
This patch implements a new image comparison function, codenamed
"ssim-cie94". The goal of the new comparison function is to cancel out
browser non-determenistic rendering.

To use the new comparison function:

```ts
await expect(page).toHaveScreenshot({
  comparator: 'ssim-cie94',
});
```

As of Nov 30, 2022, we identified the following sources of
non-determenistic rendering for Chromium:
- Anti-aliasing for certain shapes might be different due to the
  way skia rasterizes certain shapes.
- Color blending might be different on `x86` and `aarch64`
architectures.

The new function employs a few heuristics to fight these
differences.

Consider two non-equal image pixels `(r1, g1, b1)` and `(r2, g2, b2)`:
1. If the [CIE94] metric is less then 1.0, then we consider these pixels
   **EQUAL**. (The value `1.0` is the [just-noticeable difference] for
   [CIE94].). Otherwise, proceed to next step.
1. If all the 8 neighbors of the first pixel match its color, or
   if the 8 neighbors of the second pixel match its color, then these
   pixels are **DIFFERENT**. (In case of anti-aliasing, some of the
   direct neighbors have to be blended up or down.) Otherwise, proceed
   to next step.
1. If SSIM in some locality around the different pixels is more than
   0.99, then consider this pixels to be **EQUAL**. Otherwise, mark them
   as **DIFFERENT**. (Local SSIM for anti-aliased pixels turns out to be
   very close to 1.0).

[CIE94]: https://en.wikipedia.org/wiki/Color_difference#CIE94
[just-noticeable difference]:
https://en.wikipedia.org/wiki/Just-noticeable_difference
2022-12-02 15:22:05 -08:00
Andrey Lushnikov 4cb49cb162
fix: remove firefox bandaid preferences (#19217)
These preferences were migrated to those we ship with builds.

Fixes #17442
2022-12-01 12:45:50 -08:00
Max Schmitt 3565d97a36
feat(recorder): make it work with [contenteditable] (#19066)
https://github.com/microsoft/playwright/issues/19029
2022-12-01 12:41:03 -08:00
Max Schmitt 1d3feba578
chore: do not set bypassCSP when inspector is used (#19190)
Fixes https://github.com/microsoft/playwright/issues/19186
2022-12-01 12:39:40 -08:00
Playwright Service b212e99dbb
feat(firefox-beta): roll to r1369 (#19197)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2022-12-01 12:26:17 -08:00
Playwright Service 881097a431
feat(firefox): roll to r1367 (#19195)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2022-12-01 12:25:55 -08:00
Playwright Service dbe4362b9c
feat(firefox): roll to r1366 (#19185)
Fixes https://github.com/microsoft/playwright/issues/18307.

Signed-off-by: Max Schmitt <max@schmitt.mx>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2022-11-30 19:13:11 -08:00
Playwright Service 58c4d1574b
feat(firefox-beta): roll to r1368 (#19191)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2022-11-30 19:09:41 -08:00
Pavel Feldman f0e8d8f074
feat(api): introduce route.fetch and route.fulfill(json) (#19184) 2022-11-30 17:26:19 -08:00
Dmitry Gozman 499324961a
docs: remove Promise.all from examples (#19154)
Replaced with explicit `popupPromise` variable.
2022-11-30 12:36:35 -08:00
Playwright Service f952e1147b
feat(chromium-tip-of-tree): roll to r1063 (#19070)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Max Schmitt <max@schmitt.mx>
2022-11-30 11:11:54 -08:00
Dmitry Gozman 307a0b6ea7
fix(dotnet): codegen/docs use Name instead of NameString (#19156) 2022-11-29 20:56:18 -08:00
Pavel Feldman 5ac426b3d5
chore: expose utility script to inner evaluates (#19147) 2022-11-29 16:57:11 -08:00
Zihua Li 0c6a0f40c6
feat(keyboard): support simple cut-pasting using meta+x/v (#18756) 2022-11-29 12:58:14 -08:00
Dmitry Gozman 43a6bf4d45
fix(inspector): support custom test id attribute (#18996)
Fixes #18959.
2022-11-29 11:43:47 -08:00
Pavel Feldman 85467d1b7d
chore: generate get by title (#19119) 2022-11-28 19:55:34 -08:00
Playwright Service e3d7e080b4
feat(webkit): roll to r1747 (#19080) 2022-11-28 09:50:07 -08:00
Playwright Service 2887a2a883
feat(webkit): roll to r1745 (#19063)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2022-11-24 11:38:12 -10:00
Playwright Service 8ec3de7f41
feat(chromium-tip-of-tree): roll to r1062 (#19037)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2022-11-23 14:49:58 -10:00
Pavel Feldman f9a32e0927
chore: follow up to deprecation changes (#19025) 2022-11-23 12:32:14 -08:00
Playwright Service 0c8d2cf4e0
feat(webkit): roll to r1744 (#19006) 2022-11-23 09:54:47 -08:00
Yury Semikhatsky d3f41eaa47
fix(fetch): cookie with domain=localhost (#18998)
Fixes https://github.com/microsoft/playwright/issues/18362
2022-11-23 09:22:49 -08:00
Pavel Feldman f97dcd4c79
docs: annotate deprecated methods (#19005) 2022-11-23 08:40:47 -08:00
Dmitry Gozman 503f8f51dc
fix(reuse): stop pending operations upon reuse/disconnect (#18997) 2022-11-22 15:21:20 -08:00
Dmitry Gozman 190ed9465f
fix(chromium): detach from shared workers (#18976)
This prevents shared workers from stalling upon restart.

We receive `Inspector.targetCrashed` and
`Inspector.targetReloadedAfterCrash` events that assume
`Runtime.runIfWaitingForDebugger` from any attached client. It is easier
and more stable to just detach from shared workers, because we do not
inspect them.

For service workers, we should actually issue
`Runtime.runIfWaitingForDebugger` in such cases, because we attach to
them.

Fixes #18932.
2022-11-22 15:20:42 -08:00
Pavel Feldman 73e7c0ed3d
fix(electron): tolerate connection closed during quit (#18993) 2022-11-22 11:50:35 -08:00
Pavel Feldman a0ea9b5fba
chore: simplify slowmo implementation (#18990) 2022-11-22 11:06:45 -08:00
Playwright Service a51c48fcb1
feat(chromium): roll to r1035 (#18984)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2022-11-22 07:48:46 -10:00
Pavel Feldman b5d756686d
fix(electron): consistently emit ready event after app is loaded (#18972)
Fixes: https://github.com/microsoft/playwright/issues/18928
2022-11-21 15:13:53 -08:00
Dmitry Gozman 8ad3bc7ff3
fix(role selector): expanded=false does not match elements without aria-expanded (#18929)
Fixes #18920.
2022-11-21 14:13:51 -08:00
Max Schmitt 6a5552ba24
chore: drop Ubuntu 18.04 support (#18924) 2022-11-21 11:23:45 -10:00
Pavel Feldman 620e8547d4
chore: generate usage: sections based on snippets (#18965) 2022-11-21 10:40:21 -08:00
Pavel Feldman 3fb4b3bbf9
chore: normalize api markdown (#18942) 2022-11-21 09:30:32 -08:00
Dmitry Gozman 941090f0c4
fix(click): account for transformed iframes (#18926)
- Properly convert coordinates for iframes with non-zero borders.
- IFrames that have `transform` anywhere in the ancestors skip
`hitPoint`-based check because we cannot reliably translate the viewport
point into frame document's coordinates.

Fixes #18245.
2022-11-18 16:51:39 -08:00
Playwright Service 7c5e4241b1
feat(chromium-tip-of-tree): roll to r1061 (#18899)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2022-11-18 08:01:01 -10:00
Dmitry Gozman 1ec0bb277d
feat(expect): ensure at least one expectation check, no matter the timeout (#18895)
References #18859.
2022-11-17 19:43:10 -08:00
Pavel Feldman b1acc0d0ea
chore: render user-friendly intermediate match values (#18867) 2022-11-16 18:05:36 -08:00
Pavel Feldman 4e58b0c2ea
chore: render timed out error message when expect timeouts (#18863)
Fixes https://github.com/microsoft/playwright/issues/18859
2022-11-16 17:00:42 -08:00
Andrey Lushnikov c47c90cc25
chore: update WebKit browser version to 16.4 (#18830) 2022-11-15 12:46:15 -08:00
Dmitry Gozman f5b4e499fb
fix(locators): frameLocator().nth serialized correctly (#18819)
Fixes #18798.
2022-11-15 10:50:46 -08:00
Pavel Feldman 5c530154f9
chore(electron): filter test args out (#18822) 2022-11-15 10:48:24 -08:00
Pavel Feldman dbf3fc5089
fix(electron): stall node while browser is starting (#18804)
Fixes https://github.com/microsoft/playwright/issues/17765
2022-11-14 22:01:54 -08:00
Pavel Feldman 6258ed53f0
fix: recorder dark theme and strict explore locator parser (#18801) 2022-11-14 16:49:15 -08:00
Pavel Feldman 59418aa6f3
chore: ignore untrusted clicks when recording (#18796)
Fixes https://github.com/microsoft/playwright/issues/18776
2022-11-14 15:16:25 -08:00
Dmitry Gozman bc6617b4ca
chore: verify tab groups in docs during lint (#18768)
This extracts the logic from playwright.dev so that we get early
warnings.
2022-11-14 13:05:05 -08:00
Playwright Service 1e309f375a
feat(webkit): roll to r1736 (#18475)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2022-11-14 10:36:52 -08:00
Pavel Feldman 4bbfcef792 Revert "chore: support narrow terminal windows for messages (#18714)"
This reverts commit 23171c5037.
2022-11-14 08:47:17 -08:00
Pavel Feldman 8e882fdd58
chore: make generated report writable (#18750)
Fixes: https://github.com/microsoft/playwright/issues/18747
2022-11-13 12:46:35 -08:00
Playwright Service 1b13519984
feat(chromium): roll to r1034 (#18736) 2022-11-11 17:11:58 -08:00
Playwright Service 49f6a965c6
feat(chromium-tip-of-tree): roll to r1059 (#18753) 2022-11-11 17:11:17 -08:00
Dmitry Gozman a7b2b04588
fix(getByRole): name and exact (#18719)
Following the `getByText()` and other methods:

- By default, matching is substring and case-insensitive. Before, it was
only case-insensitive, but not substring.
- With new option `exact: true`, matching is full string and
case-sensitive.
- Matching always normalizes whitespace.
- Codegen generates `exact: false` by default.
- `internal:role` treats `[name="foo"i]` as non-exact match.

Various fixes:
- Updated `getByRole` docs to match the reality.
- Locator generator edge cases.
2022-11-11 15:58:36 -08:00
Andrey Lushnikov bc78db07df
chore: cut 1.28 branch (#18746) 2022-11-11 15:30:15 -08:00
Andrey Lushnikov 7685c929bf
chore: use '--disable-component-update' flag to avoid component updates (#18745) 2022-11-11 13:44:09 -08:00
Pavel Feldman d5eb74fa5d
chore: allow toggling recorder/traceviewer color modes (#18718)
Fixes: https://github.com/microsoft/playwright/issues/18700
2022-11-10 17:20:09 -08:00
Andrey Lushnikov dfb4ad388a
feat: support custom png comparator (#18689)
This way we might experiment with different custom PNG comparators
for VRT.
2022-11-10 16:16:05 -08:00
Andrey Lushnikov 23171c5037
chore: support narrow terminal windows for messages (#18714)
This patch starts using a message box that's not really a box and thus
is better behaving on a narrow-width terminals.

Before:
<img width="744" alt="image"
src="https://user-images.githubusercontent.com/746130/201216551-abbac0f8-71b4-413f-9f4e-159c7123ef3d.png">

After:
<img width="745" alt="image"
src="https://user-images.githubusercontent.com/746130/201216504-25257727-06c8-4ae9-8557-a2d937b7ca0b.png">

Signed-off-by: Andrey Lushnikov <aslushnikov@gmail.com>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
2022-11-10 15:50:52 -08:00
Max Schmitt 56d7d47d43
fix(codegen): make select work with size attribute (#18712)
Fixes https://github.com/microsoft/playwright/issues/18711
2022-11-10 15:06:53 -08:00
Yury Semikhatsky 0765182a4d
fix: conversion to snake case (#18707)
Fixes https://github.com/microsoft/playwright/issues/18695
2022-11-10 14:54:07 -08:00
Pavel Feldman ac25fdd74b
chore: fix ff tests with new events mode (#18708) 2022-11-10 12:59:27 -08:00
Dmitry Gozman 7c80b77c57
feat(clear): remove clear() methods from all classes except Locator (#18703)
The preferred way is to use the locator, so we should not encourage the
use of `ElementHandle` or `Page` in the new APIs.
2022-11-10 12:29:14 -08:00
Pavel Feldman ca2e7ef199
chore: report paused signal to the debug controller clients (#18701) 2022-11-10 12:15:29 -08:00
Pavel Feldman c25e67a0e7
chore: conditionally dispatch network events (#18687) 2022-11-09 21:10:57 -08:00
Dmitry Gozman cafa558845
fix(codegen): update priorites in selector generator (#18688)
- prefer `role=checkbox` over `input[type=checkbox]`
- prefer `#id` over `input[type=checkbox]` and `role=checkbox`
- prefer `text=foo` over `internal:has-text=foo`
- ignore `none` and `presentation` roles
- remove non-strict support
2022-11-09 17:22:13 -08:00
Andrey Lushnikov 9bcb28f25a
Revert "feat: send SIGTERM to webserver before SIGKILL'ing it. (#18220)" (#18661)
This reverts commit c63a0b536d.

Reason: https://github.com/microsoft/playwright/pull/18564
2022-11-09 09:18:33 -08:00
Dmitry Gozman a7f1c8cb65
fix(codegen): fix csharp options syntax (#18662) 2022-11-08 21:48:01 -08:00
Dmitry Gozman ef1b68a998
feat(locators): support frame locators in asLocator (#18653)
Drive-by: change `true` to `True` in python.

References #18524.
2022-11-08 17:08:08 -08:00
Playwright Service 54a235284a
feat(chromium-tip-of-tree): roll to r1058 (#18658)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2022-11-08 16:11:42 -08:00
Pavel Feldman 0355d8618f
chore: use provided value for the generated test id (#18631) 2022-11-08 12:04:43 -08:00
Dmitry Gozman 05b623e6b0
feat(locators): asLocator supports internal:has= (#18625)
The following snippet:
```js
rowLocator
    .filter({ hasText: 'John' })
    .filter({ has: page.getByRole('button', { name: 'Say hello' }) })

```

is shown in the logs:

```log
pw:api waiting for getByRole('listitem').filter({ hasText: 'John' }).filter({ has: getByRole('button', { name: 'Say hello' }) })
```
2022-11-08 08:47:02 -08:00
Dmitry Gozman 1cee65722b
fix(inspector): disable highlight during screenshot actions (#18621)
Fixes #18049.
2022-11-07 13:53:15 -08:00
Pavel Feldman 8432d1592f
chore: expose new locator apis on window.playwright (#18595) 2022-11-07 09:06:13 -08:00
Dmitry Gozman 6a65a43e9a
chore: use consistent asLocator() in all logs (#18586)
References #18524.
2022-11-04 15:19:16 -07:00
Dmitry Gozman 7a9f1b5ee4
fix(firefox): force fast shutdown after "xpcom-will-shutdown" phase (#18556) 2022-11-04 09:02:13 -07:00
Dmitry Gozman 227f47effb
feat(firefox): roll to 1364 and 1367, rebase page-drag.spec (#18559) 2022-11-04 08:53:50 -07:00
Playwright Service 7e65b1927a
feat(chromium-tip-of-tree): roll to r1057 (#18566) 2022-11-04 08:27:44 -07:00
Playwright Service ad39e7571d
feat(chromium-tip-of-tree): roll to r1056 (#18500)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2022-11-03 16:54:59 -07:00
Playwright Service ae811774b1
feat(chromium): roll to r1033 (#18558)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2022-11-03 16:21:39 -07:00
Pavel Feldman 3bc9e07daf
chore: parse locators strictly (#18553) 2022-11-03 15:17:08 -07:00
Andrey Lushnikov 8538f61a72
feat(containers): implement global network tethering for playwright server (#17719)
This patch implements a new mode of network tethering for Playwright
server & its clients.
With this patch:
- playwright server could be launched with the
`--browser-proxy-mode=tether` flag to engage in the new mode
- a new type of client, "Network Tethering Client" can connect to the
server to provide network traffic to the browsers
- all clients that connect to the server with the `x-playwright-proxy:
*` header will get traffic from the "Network Tethering Client"

This patch also adds an environment variable
`PW_OWNED_BY_TETHER_CLIENT`. With this env, playwright server will
auto-close when the network tethering client disconnects. It will also
auto-close if the network client does not connect to the server in the
first 10 seconds of the server existence. This way we can ensure that
`npx playwright docker start` blocks terminal & controls the lifetime of
the started container.
2022-11-03 13:47:51 -07:00
Pavel Feldman eac5cc98df
fix: compare selector when validating highlight (#18530) 2022-11-03 09:55:45 -07:00
Pavel Feldman 4d34a1a371
chore: do not generate role= selector, use internal (#18519) 2022-11-02 14:57:19 -07:00
Pavel Feldman b2e4f5652e
chore: do not update highlight on focus outside of the recording mode (#18516) 2022-11-02 14:09:02 -07:00
Dmitry Gozman 8292398692
docs: support custom hrefs for api links (#18514) 2022-11-02 13:35:51 -07:00
Pavel Feldman 67c9624924
chore: send structured codegen info to the debug controller (#18491) 2022-11-01 18:02:14 -07:00
Pavel Feldman 2183d9e9a2
chore: use codemirror for editor (#18482) 2022-11-01 15:04:30 -07:00
Dmitry Gozman c56877032d
fix(persistent): close browser instead of pages (#18485)
Previously, we closed pages one by one before closing the browser when
shutting down the persistent context. This logic was introduced in
https://github.com/microsoft/playwright/pull/4040 to properly finish
video recordings in persistent context.

Such a process makes it unnecessary brittle to close the persistent
context. For example, Chromium headless is sometimes unable to close the
last persistent page for unknown reasons.

Instead, we can just stop video recordings manually and close the
browser right away.

Fixes #18229.
2022-11-01 14:26:38 -07:00