cherry-pick(#29909): docs: mark addLocatorHandler as experimental

This commit is contained in:
Dmitry Gozman 2024-03-12 12:02:25 -07:00
Родитель 87a6f9cb77
Коммит dd8a1193fc
2 изменённых файлов: 26 добавлений и 20 удалений

Просмотреть файл

@ -3146,7 +3146,11 @@ return value resolves to `[]`.
## async method: Page.addLocatorHandler ## async method: Page.addLocatorHandler
* since: v1.42 * since: v1.42
When testing a web page, sometimes unexpected overlays like a coookie consent dialog appear and block actions you want to automate, e.g. clicking a button. These overlays don't always show up in the same way or at the same time, making them tricky to handle in automated tests. :::warning Experimental
This method is experimental and its behavior may change in the upcoming releases.
:::
When testing a web page, sometimes unexpected overlays like a "Sign up" dialog appear and block actions you want to automate, e.g. clicking a button. These overlays don't always show up in the same way or at the same time, making them tricky to handle in automated tests.
This method lets you set up a special function, called a handler, that activates when it detects that overlay is visible. The handler's job is to remove the overlay, allowing your test to continue as if the overlay wasn't there. This method lets you set up a special function, called a handler, that activates when it detects that overlay is visible. The handler's job is to remove the overlay, allowing your test to continue as if the overlay wasn't there.
@ -3168,12 +3172,12 @@ Another example is a series of mouse actions, where [`method: Mouse.move`] is fo
**Usage** **Usage**
An example that closes a cookie consent dialog when it appears: An example that closes a "Sign up to the newsletter" dialog when it appears:
```js ```js
// Setup the handler. // Setup the handler.
await page.addLocatorHandler(page.getByRole('button', { name: 'Accept all cookies' }), async () => { await page.addLocatorHandler(page.getByText('Sign up to the newsletter'), async () => {
await page.getByRole('button', { name: 'Reject all cookies' }).click(); await page.getByRole('button', { name: 'No thanks' }).click();
}); });
// Write the test as usual. // Write the test as usual.
@ -3183,8 +3187,8 @@ await page.getByRole('button', { name: 'Start here' }).click();
```java ```java
// Setup the handler. // Setup the handler.
page.addLocatorHandler(page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Accept all cookies")), () => { page.addLocatorHandler(page.getByText("Sign up to the newsletter"), () => {
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Reject all cookies")).click(); page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("No thanks")).click();
}); });
// Write the test as usual. // Write the test as usual.
@ -3195,8 +3199,8 @@ page.getByRole("button", Page.GetByRoleOptions().setName("Start here")).click();
```python sync ```python sync
# Setup the handler. # Setup the handler.
def handler(): def handler():
page.get_by_role("button", name="Reject all cookies").click() page.get_by_role("button", name="No thanks").click()
page.add_locator_handler(page.get_by_role("button", name="Accept all cookies"), handler) page.add_locator_handler(page.get_by_text("Sign up to the newsletter"), handler)
# Write the test as usual. # Write the test as usual.
page.goto("https://example.com") page.goto("https://example.com")
@ -3206,8 +3210,8 @@ page.get_by_role("button", name="Start here").click()
```python async ```python async
# Setup the handler. # Setup the handler.
def handler(): def handler():
await page.get_by_role("button", name="Reject all cookies").click() await page.get_by_role("button", name="No thanks").click()
await page.add_locator_handler(page.get_by_role("button", name="Accept all cookies"), handler) await page.add_locator_handler(page.get_by_text("Sign up to the newsletter"), handler)
# Write the test as usual. # Write the test as usual.
await page.goto("https://example.com") await page.goto("https://example.com")
@ -3216,8 +3220,8 @@ await page.get_by_role("button", name="Start here").click()
```csharp ```csharp
// Setup the handler. // Setup the handler.
await page.AddLocatorHandlerAsync(page.GetByRole(AriaRole.Button, new() { Name = "Accept all cookies" }), async () => { await page.AddLocatorHandlerAsync(page.GetByText("Sign up to the newsletter"), async () => {
await page.GetByRole(AriaRole.Button, new() { Name = "Reject all cookies" }).ClickAsync(); await page.GetByRole(AriaRole.Button, new() { Name = "No thanks" }).ClickAsync();
}); });
// Write the test as usual. // Write the test as usual.
@ -3230,7 +3234,7 @@ An example that skips the "Confirm your security details" page when it is shown:
```js ```js
// Setup the handler. // Setup the handler.
await page.addLocatorHandler(page.getByText('Confirm your security details'), async () => { await page.addLocatorHandler(page.getByText('Confirm your security details'), async () => {
await page.getByRole('button', 'Remind me later').click(); await page.getByRole('button', { name: 'Remind me later' }).click();
}); });
// Write the test as usual. // Write the test as usual.

16
packages/playwright-core/types/types.d.ts поставляемый
Просмотреть файл

@ -1781,9 +1781,11 @@ export interface Page {
prependListener(event: 'worker', listener: (worker: Worker) => void): this; prependListener(event: 'worker', listener: (worker: Worker) => void): this;
/** /**
* When testing a web page, sometimes unexpected overlays like a coookie consent dialog appear and block actions you * **NOTE** This method is experimental and its behavior may change in the upcoming releases.
* want to automate, e.g. clicking a button. These overlays don't always show up in the same way or at the same time, *
* making them tricky to handle in automated tests. * When testing a web page, sometimes unexpected overlays like a "Sign up" dialog appear and block actions you want to
* automate, e.g. clicking a button. These overlays don't always show up in the same way or at the same time, making
* them tricky to handle in automated tests.
* *
* This method lets you set up a special function, called a handler, that activates when it detects that overlay is * This method lets you set up a special function, called a handler, that activates when it detects that overlay is
* visible. The handler's job is to remove the overlay, allowing your test to continue as if the overlay wasn't there. * visible. The handler's job is to remove the overlay, allowing your test to continue as if the overlay wasn't there.
@ -1817,12 +1819,12 @@ export interface Page {
* *
* **Usage** * **Usage**
* *
* An example that closes a cookie consent dialog when it appears: * An example that closes a "Sign up to the newsletter" dialog when it appears:
* *
* ```js * ```js
* // Setup the handler. * // Setup the handler.
* await page.addLocatorHandler(page.getByRole('button', { name: 'Accept all cookies' }), async () => { * await page.addLocatorHandler(page.getByText('Sign up to the newsletter'), async () => {
* await page.getByRole('button', { name: 'Reject all cookies' }).click(); * await page.getByRole('button', { name: 'No thanks' }).click();
* }); * });
* *
* // Write the test as usual. * // Write the test as usual.
@ -1835,7 +1837,7 @@ export interface Page {
* ```js * ```js
* // Setup the handler. * // Setup the handler.
* await page.addLocatorHandler(page.getByText('Confirm your security details'), async () => { * await page.addLocatorHandler(page.getByText('Confirm your security details'), async () => {
* await page.getByRole('button', 'Remind me later').click(); * await page.getByRole('button', { name: 'Remind me later' }).click();
* }); * });
* *
* // Write the test as usual. * // Write the test as usual.