Commit graph

45 commits

Author SHA1 Message Date
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
Pavel Feldman 0355d8618f
chore: use provided value for the generated test id (#18631) 2022-11-08 12:04:43 -08:00
Pavel Feldman 8432d1592f
chore: expose new locator apis on window.playwright (#18595) 2022-11-07 09:06:13 -08:00
Pavel Feldman 2c3fa1b1ff
chore: add explore locator parser (#18429) 2022-10-31 12:55:35 -07:00
Pavel Feldman 304a4ee8ec
chore: migrate to the internal:text selector (#18135) 2022-10-18 13:09:54 -07:00
Dmitry Gozman b64457d8ce
fix(locators): make regex escape work when multiple spaces are present (#17893) 2022-10-06 16:23:40 -07:00
Pavel Feldman 8b018f6b41
chore: make role name case-insensitive (#17888) 2022-10-06 14:35:10 -07:00
Pavel Feldman f2685cab95
chore: use api selectors in codegen hover (#17855) 2022-10-05 17:59:34 -07:00
Pavel Feldman 3ecaa36e25
chore: make locators generator isomorphic (#17850) 2022-10-05 13:13:22 -07:00
Dmitry Gozman 2bcd9ce9ae
chore: internal selectors (#17827)
- Rename internal selectors `has`, `control` and `attr` to
`internal:has`, `internal:control` and `internal:attr`.
- Fix `getByLabel()` to respect strictness, by introducing
`internal:label` selector.
- Move tests essential for ports to `selectors-by.spec`.
2022-10-05 08:45:10 -07:00
Dmitry Gozman a9c02b9753
fix(locators): properly escape various locator methods (#17798)
References #17604.
2022-10-04 13:21:38 -07:00
Pavel Feldman 1311767f87
chore: generate api calls (#17794) 2022-10-03 17:14:02 -07:00
Pavel Feldman 845e32cbb8
chore: use utils via index export (6) (#13417) 2022-04-07 21:48:41 -07:00