Skip to content

Commit

Permalink
Merge commit '0b339fa4f9c3951c655bedbcc357566c44ebf19d' into release-…
Browse files Browse the repository at this point in the history
…0.4.1
  • Loading branch information
ruifigueira committed Mar 3, 2024
2 parents 098e4e2 + 0b339fa commit 5182ee6
Show file tree
Hide file tree
Showing 38 changed files with 246 additions and 209 deletions.
18 changes: 10 additions & 8 deletions playwright/docs/src/api/class-page.md
Original file line number Diff line number Diff line change
Expand Up @@ -3146,27 +3146,29 @@ return value resolves to `[]`.
## async method: Page.addLocatorHandler
* since: v1.42

Sometimes, the web page can show an overlay that obstructs elements behind it and prevents certain actions, like click, from completing. When such an overlay is shown predictably, we recommend dismissing it as a part of your test flow. However, sometimes such an overlay may appear non-deterministically, for example certain cookies consent dialogs behave this way. In this case, [`method: Page.addLocatorHandler`] allows handling an overlay during an action that it would block.
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.
This method registers a handler for an overlay that is executed once the locator is visible on the page. The handler should get rid of the overlay so that actions blocked by it can proceed. This is useful for nondeterministic interstitial pages or dialogs, like a cookie consent dialog.
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.
Note that execution time of the handler counts towards the timeout of the action/assertion that executed the handler.

You can register multiple handlers. However, only a single handler will be running at a time. Any actions inside a handler must not require another handler to run.
Things to keep in mind:
* When an overlay is shown predictably, we recommend explicitly waiting for it in your test and dismissing it as a part of your normal test flow, instead of using [`method: Page.addLocatorHandler`].
* Playwright checks for the overlay every time before executing or retrying an action that requires an [actionability check](../actionability.md), or before performing an auto-waiting assertion check. When overlay is visible, Playwright calls the handler first, and then proceeds with the action/assertion.
* The execution time of the handler counts towards the timeout of the action/assertion that executed the handler. If your handler takes too long, it might cause timeouts.
* You can register multiple handlers. However, only a single handler will be running at a time. Make sure the actions within a handler don't depend on another handler.

:::warning
Running the interceptor will alter your page state mid-test. For example it will change the currently focused element and move the mouse. Make sure that the actions that run after the interceptor are self-contained and do not rely on the focus and mouse state.
Running the handler will alter your page state mid-test. For example it will change the currently focused element and move the mouse. Make sure that actions that run after the handler are self-contained and do not rely on the focus and mouse state being unchanged.
<br />
<br />
For example, consider a test that calls [`method: Locator.focus`] followed by [`method: Keyboard.press`]. If your handler clicks a button between these two actions, the focused element most likely will be wrong, and key press will happen on the unexpected element. Use [`method: Locator.press`] instead to avoid this problem.
<br />
<br />
Another example is a series of mouse actions, where [`method: Mouse.move`] is followed by [`method: Mouse.down`]. Again, when the handler runs between these two actions, the mouse position will be wrong during the mouse down. Prefer methods like [`method: Locator.click`] that are self-contained.
Another example is a series of mouse actions, where [`method: Mouse.move`] is followed by [`method: Mouse.down`]. Again, when the handler runs between these two actions, the mouse position will be wrong during the mouse down. Prefer self-contained actions like [`method: Locator.click`] that do not rely on the state being unchanged by a handler.
:::

**Usage**

An example that closes a cookie dialog when it appears:
An example that closes a cookie consent dialog when it appears:

```js
// Setup the handler.
Expand Down
86 changes: 40 additions & 46 deletions playwright/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion playwright/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "playwright-internal",
"private": true,
"version": "1.42.0",
"version": "1.42.1",
"description": "A high-level API to automate web browsers",
"repository": {
"type": "git",
Expand Down
4 changes: 2 additions & 2 deletions playwright/packages/playwright-browser-chromium/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@playwright/browser-chromium",
"version": "1.42.0",
"version": "1.42.1",
"description": "Playwright package that automatically installs Chromium",
"repository": {
"type": "git",
Expand All @@ -27,6 +27,6 @@
"install": "node install.js"
},
"dependencies": {
"playwright-core": "1.42.0"
"playwright-core": "1.42.1"
}
}
4 changes: 2 additions & 2 deletions playwright/packages/playwright-browser-firefox/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@playwright/browser-firefox",
"version": "1.42.0",
"version": "1.42.1",
"description": "Playwright package that automatically installs Firefox",
"repository": {
"type": "git",
Expand All @@ -27,6 +27,6 @@
"install": "node install.js"
},
"dependencies": {
"playwright-core": "1.42.0"
"playwright-core": "1.42.1"
}
}
4 changes: 2 additions & 2 deletions playwright/packages/playwright-browser-webkit/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@playwright/browser-webkit",
"version": "1.42.0",
"version": "1.42.1",
"description": "Playwright package that automatically installs WebKit",
"repository": {
"type": "git",
Expand All @@ -27,6 +27,6 @@
"install": "node install.js"
},
"dependencies": {
"playwright-core": "1.42.0"
"playwright-core": "1.42.1"
}
}
2 changes: 1 addition & 1 deletion playwright/packages/playwright-chromium/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,5 @@
* limitations under the License.
*/

const { program } = require('playwright-core/lib/program');
const { program } = require('playwright-core/lib/cli/program');
program.parse(process.argv);
4 changes: 2 additions & 2 deletions playwright/packages/playwright-chromium/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "playwright-chromium",
"version": "1.42.0",
"version": "1.42.1",
"description": "A high-level API to automate Chromium",
"repository": {
"type": "git",
Expand Down Expand Up @@ -30,6 +30,6 @@
"install": "node install.js"
},
"dependencies": {
"playwright-core": "1.42.0"
"playwright-core": "1.42.1"
}
}
2 changes: 1 addition & 1 deletion playwright/packages/playwright-core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "playwright-core",
"version": "1.42.0",
"version": "1.42.1",
"description": "A high-level API to automate web browsers",
"repository": {
"type": "git",
Expand Down
Loading

0 comments on commit 5182ee6

Please sign in to comment.