Dmitry Gozman
697d7a40b1
fix(routeWebSocket): make it work with http(s) baseURL ( #33457 )
2024-11-05 11:46:05 -08:00
Pavel Feldman
135ed28740
chore: more yaml escaping tests ( #33387 )
2024-10-31 17:14:11 -07:00
Pavel Feldman
9ce401d44a
chore: suggest aria snapshots w/ regex ( #33334 )
2024-10-29 16:19:08 -07:00
Yury Semikhatsky
c66af9c525
chore: make expect timeout field required in the protocol ( #33309 )
2024-10-25 15:26:41 -07:00
Simon Knott
69f56b9f63
fix(locator generator): handle frameLocator()
and locator().contentFrame()
( #33208 )
2024-10-24 10:52:54 +02:00
Max Schmitt
b275c19612
chore: update eslintignore to lint files in utils/ folders ( #33218 )
2024-10-22 11:52:20 +02:00
Pavel Feldman
4b1fbde2ad
chore: generate match snapshot ( #33105 )
2024-10-15 13:38:55 -07:00
Pavel Feldman
908b0de5d4
chore: style action list in tv mode ( #32845 )
2024-09-27 17:52:03 -07:00
Pavel Feldman
2f4acbb001
chore: use contentFrame() as a canonical locator representation ( #32697 )
2024-09-18 20:15:01 -07:00
Dmitry Gozman
f8eef3897c
chore: move urlMatch to isomorphic ( #32142 )
...
To be reused in injected code.
2024-08-13 12:47:02 -07:00
Max Schmitt
613ccb8d5b
chore(client-certificates): rewrite error for unsupported PFX errors ( #32008 )
2024-08-05 14:42:29 +02:00
Álvaro Martínez
00131c1e3f
feat(trace-viewer): display text attachments in ui mode ( #31215 )
2024-07-08 11:16:14 -07:00
Yury Semikhatsky
9e6772818e
chore: cache normalized whitespaces in recorder ( #31349 )
...
Reference: https://github.com/microsoft/playwright/issues/31254
On the web page from the bug it reduces time to compute selectors by 8x:
**Before:**
<img width="549" alt="before"
src="https://github.com/microsoft/playwright/assets/9798949/f4482860-29d5-4643-92ab-b360a702f232 ">
**After:**
<img width="580" alt="after"
src="https://github.com/microsoft/playwright/assets/9798949/b6aca6a1-9306-4041-9042-d504dce1c33a ">
2024-06-17 18:20:15 -07:00
Darío Kondratiuk
76b25e84cc
docs: Improve clock doc ( #31147 )
2024-06-04 18:48:56 +02:00
Pavel Feldman
9d0430fa26
chore: strengthen linting ( #29669 )
2024-02-26 16:52:28 -08:00
Yury Semikhatsky
f3fde992eb
chore: remove --project-grep, add wildcard support ( #29537 )
...
Reference #15128
2024-02-16 19:18:00 -08:00
Dmitry Gozman
d023829dd5
fix(locator parser): allow escaped quotes in the digest function ( #29012 )
...
This supports mixed quotes locators in JavaScript where we are not sure
what quote is the correct one, so we normalize to unescaped single quote
when comparing with the original.
Drive-by: we were allowing single quotes in Python, Java and .NET, but
these are actually not allowed.
Regressed in #27718 .
Fixes #28630 .
2024-01-16 16:06:02 -08:00
Dmitry Gozman
5488c03d7f
chore: make asLocator()
always safe ( #28207 )
2023-11-16 16:31:34 -08:00
Max Schmitt
5f527fedb1
fix: JSHandle preview text for non-ascii attributes/children ( #28038 )
...
This surfaced in .NET that the string in the driver got incorrectly cut,
then transferred to .NET as an invalid UTF8 character
[`\ud835`](https://charbase.com/d835-unicode-invalid-character ) which
.NET wasn't able to parse and threw an error.
Drive-by: Move similar function from
`packages/playwright-core/src/client/page.ts` into isomorphic
`stringUtils`.
https://github.com/microsoft/playwright-dotnet/issues/2748
2023-11-09 00:11:01 +01:00
Max Schmitt
59b8cf008e
fix(codegen): don't generate page.frame() calls anymore ( #27820 )
...
Fixes https://github.com/microsoft/playwright/issues/27650
2023-10-30 21:56:45 +01:00
Dmitry Gozman
100d3b2601
fix(css parser): support nested builtin functions ( #27841 )
...
Things like `:nth-child(1 of :has(span:nth-last-child(3)))`.
Fixes #27743 .
2023-10-27 13:16:12 -07:00
Max Schmitt
f48861ddee
fix(inspector): highlight xpath/css locators without engine prefix ( #27742 )
...
Motivation: As of today when a user inspects a Locator which is a xpath,
it won't work if the user has not prefixed it with `xpath=` because we
internally compare the given with the generated locator.
Works: `locator('xpath=//div[contains(@class, "foo")]')`
Does not work: `locator('//div[contains(@class, "foo")]')`
Relates
https://github.com/microsoft/playwright/issues/27707#issue-1952360264
Fixes
https://github.com/microsoft/playwright-dotnet/issues/2718#issuecomment-1771073816
---------
Signed-off-by: Max Schmitt <max@schmitt.mx>
2023-10-23 18:23:28 +02:00
Dmitry Gozman
6fe31ab52c
feat: support alternative quotes in js parseLocator() ( #27718 )
...
Fixes #27707 .
2023-10-20 08:42:29 -07:00
Jim Hays
dcc8dcca73
Fix various typos ( Fixes #27396 ) ( #27391 )
...
Fixes https://github.com/microsoft/playwright/issues/27396
2023-10-04 19:56:42 -07:00
Dmitry Gozman
bb4268d165
fix(locators): do not escape regular expressions with u or v flag ( #27188 )
...
Fixes #27163 .
2023-09-19 13:16:50 -07:00
Dmitry Gozman
d9eabda09d
fix(locators): escape quotes in regular expressions ( #27002 )
...
Fixes #26974 .
2023-09-11 15:49:04 -07:00
Dmitry Gozman
97d55e275d
fix(locator): locator(locator)
method uses internal:chain
instead of >>
( #24235 )
...
Usually, we can just chain two locators with `>>` to implement
`Locator.locator(locator)`. However, this does not play nicely with more
advanced inner locators like `or` and `and`:
```ts
const child = page.locator('input').or(page.locator('button'));
page.locator('parent').locator(child);
```
One would expect the above to locate "input or button" inside a
"parent". However, currently it locates "input inside a parent" or
"button", because it's translated to `parent >> input >>
internal:or="button"`.
To fix this, we have to wrap inner locator into `internal:chain` and
query it separately from the parent.
Fixes #23724 .
2023-07-14 12:21:45 -07:00
Dmitry Gozman
fe5c9dad4d
fix(locators): allow identical frameLocators inside and/or/has ( #23740 )
...
So, the following will work:
```
page.frameLocator('iframe').locator('span').or(page.frameLoactor('iframe').locator('div'))
```
The following will not work, because frame locators are not exactly the
same:
```
page.frameLocator('#iframe1').locator('span').or(page.frameLoactor('#iframe2').locator('div'))
```
Also improve the error message to be more readable and include the
locator.
Fixes #23697 .
2023-06-19 15:22:26 -07:00
Dmitry Gozman
c80a23842b
fix(css): relative-to-scope selectors work ( #23665 )
...
Chained selectors where the second part starts with a scope did not work
before:
```ts
page.locator('div').locator(':scope + span')
page.locator('div >> +span')
```
2023-06-13 10:27:25 -07:00
Dmitry Gozman
dd417d83d9
fix(locators): escape >>
inside a regular expression ( #23631 )
...
To avoid selector being parsed as a chain.
Fixes #23540 .
2023-06-12 10:34:37 -07:00
Max Schmitt
9e75b95153
fix: display testId as regex in trace-viewer ( #23361 )
...
Fixes https://github.com/microsoft/playwright/issues/23298
2023-05-30 17:45:48 +02:00
Pavel Feldman
631edc9744
chore(internal): generate code in jsonl ( #23124 )
2023-05-20 10:15:33 -07:00
Dmitry Gozman
73f9f81db4
feat(locators): allow ambiguous locators when parsing ( #23034 )
...
This supports locators like `nth(0)` and `locator('div', { hasText:
'foo' })` that are not canonical, but still work.
Fixes #22990 , #22965 .
2023-05-15 19:42:51 -07:00
Pavel Feldman
efad19b332
chore: render test steps in the trace ( #22837 )
2023-05-05 15:12:18 -07:00
Dmitry Gozman
160888df99
feat(locators): reland locator.and(locator)
( #22850 )
...
Removed in #22223 .
Fixes #22585 .
2023-05-05 11:14:01 -07:00
Dmitry Gozman
08cef43e82
feat(locator): remove locator.and and locator.not ( #22223 )
...
Not shipping for now, after API review.
2023-04-05 16:28:13 -07:00
Dmitry Gozman
35afb056ea
feat(locator): filter({ hasNotText }) ( #22222 )
...
The opposite of `filter({ hasText })`.
2023-04-05 14:13:28 -07:00
Dmitry Gozman
bc1de5f28d
feat(locator): filter({ hasNot }) ( #22219 )
...
This is the opposite of `filter({ has })`.
2023-04-05 12:45:46 -07:00
Dmitry Gozman
539d9873c2
feat: rename Locator.filter(locator) to Locator.and ( #22101 )
2023-03-30 14:41:30 -07:00
Dmitry Gozman
e6148bb725
feat: Locator.not(locator) ( #22066 )
2023-03-30 08:52:30 -07:00
Dmitry Gozman
525097d465
feat: Locator.filter(locator) ( #21975 )
...
Produces a locator that matches both locators.
Implemented through `internal:and` selector.
Fixes #19551 .
2023-03-27 14:29:30 -07:00
Dmitry Gozman
d10fac4f6a
feat: Locator.or(locator) ( #21884 )
2023-03-22 15:28:59 -07:00
Dmitry Gozman
bde2e90973
fix(selector generator): do not produce has-text="foo"s
( #21679 )
...
There is no locator counterpart for it. Instead, produce a regex.
Also fix locator generator to not produce incorrect locator in this
case.
Fixes #21649 .
2023-03-15 13:43:42 -07:00
Pavel Feldman
27048adebe
chore: introduce testInfo.testId ( #21670 )
2023-03-14 15:58:55 -07:00
Pavel Feldman
cffb6ac269
chore: move sever/isomorphic to utils/ to use it in client ( #21445 )
2023-03-06 18:49:14 -08:00
Dmitry Gozman
c27ad35299
fix(locators): properly escape slash inside attributes ( #20510 )
...
Fixes #20471 .
2023-01-30 13:27:41 -08:00
Pavel Feldman
6cadc56ea3
feat(api): allow getByTestId(regex) ( #19419 )
2022-12-13 08:43:13 -08:00
Dmitry Gozman
48182a4eb2
chore: refactor code around text selectors ( #19278 )
2022-12-05 14:08:54 -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
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