-
Notifications
You must be signed in to change notification settings - Fork 101
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(roll): roll to ToT Playwright (08-01-25) (#1641)
- Loading branch information
1 parent
0f696c4
commit 7ae14dd
Showing
8 changed files
with
576 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
--- | ||
id: touch-events | ||
title: "Emulating touch events" | ||
--- | ||
import Tabs from '@theme/Tabs'; | ||
import TabItem from '@theme/TabItem'; | ||
import HTMLCard from '@site/src/components/HTMLCard'; | ||
|
||
## Introduction | ||
|
||
Mobile web sites may listen to [touch events](https://developer.mozilla.org/en-US/docs/Web/API/Touch_events) and react to user touch gestures such as swipe, pinch, tap etc. To test this functionality you can manually generate [TouchEvent]s in the page context using [Locator.EvaluateAsync()](/api/class-locator.mdx#locator-evaluate). | ||
|
||
If your web application relies on [pointer events](https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events) instead of touch events, you can use [Locator.ClickAsync()](/api/class-locator.mdx#locator-click) and raw [`Mouse`] events to simulate a single-finger touch, and this will trigger all the same pointer events. | ||
|
||
### Dispatching TouchEvent | ||
|
||
You can dispatch touch events to the page using [Locator.DispatchEventAsync()](/api/class-locator.mdx#locator-dispatch-event). [Touch](https://developer.mozilla.org/en-US/docs/Web/API/Touch) points can be passed as arguments, see examples below. | ||
|
||
:::note | ||
|
||
The examples work only in Chromium and Firefox, as the [`Touch()`](https://developer.mozilla.org/en-US/docs/Web/API/Touch/Touch) constructor is not supported in WebKit. | ||
::: | ||
|
||
#### Emulating pan gesture | ||
|
||
In the example below, we emulate pan gesture that is expected to move the map. The app under test only uses `clientX/clientY` coordinates of the touch point, so we initialize just that. In a more complex scenario you may need to also set `pageX/pageY/screenX/screenY`, if your app needs them. | ||
|
||
#### Emulating pinch gesture | ||
|
||
In the example below, we emulate pinch gesture, i.e. two touch points moving closer to each other. It is expected to zoom out the map. The app under test only uses `clientX/clientY` coordinates of touch points, so we initialize just that. In a more complex scenario you may need to also set `pageX/pageY/screenX/screenY`, if your app needs them. | ||
|
||
|
||
[Accessibility]: /api/class-accessibility.mdx "Accessibility" | ||
[APIRequest]: /api/class-apirequest.mdx "APIRequest" | ||
[APIRequestContext]: /api/class-apirequestcontext.mdx "APIRequestContext" | ||
[APIResponse]: /api/class-apiresponse.mdx "APIResponse" | ||
[APIResponseAssertions]: /api/class-apiresponseassertions.mdx "APIResponseAssertions" | ||
[Browser]: /api/class-browser.mdx "Browser" | ||
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext" | ||
[BrowserType]: /api/class-browsertype.mdx "BrowserType" | ||
[CDPSession]: /api/class-cdpsession.mdx "CDPSession" | ||
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent" | ||
[Clock]: /api/class-clock.mdx "Clock" | ||
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage" | ||
[Dialog]: /api/class-dialog.mdx "Dialog" | ||
[Download]: /api/class-download.mdx "Download" | ||
[ElementHandle]: /api/class-elementhandle.mdx "ElementHandle" | ||
[FileChooser]: /api/class-filechooser.mdx "FileChooser" | ||
[FormData]: /api/class-formdata.mdx "FormData" | ||
[Frame]: /api/class-frame.mdx "Frame" | ||
[FrameLocator]: /api/class-framelocator.mdx "FrameLocator" | ||
[JSHandle]: /api/class-jshandle.mdx "JSHandle" | ||
[Keyboard]: /api/class-keyboard.mdx "Keyboard" | ||
[Locator]: /api/class-locator.mdx "Locator" | ||
[LocatorAssertions]: /api/class-locatorassertions.mdx "LocatorAssertions" | ||
[Mouse]: /api/class-mouse.mdx "Mouse" | ||
[Page]: /api/class-page.mdx "Page" | ||
[PageAssertions]: /api/class-pageassertions.mdx "PageAssertions" | ||
[Playwright]: /api/class-playwright.mdx "Playwright" | ||
[PlaywrightAssertions]: /api/class-playwrightassertions.mdx "PlaywrightAssertions" | ||
[Request]: /api/class-request.mdx "Request" | ||
[Response]: /api/class-response.mdx "Response" | ||
[Route]: /api/class-route.mdx "Route" | ||
[Selectors]: /api/class-selectors.mdx "Selectors" | ||
[TimeoutError]: /api/class-timeouterror.mdx "TimeoutError" | ||
[Touchscreen]: /api/class-touchscreen.mdx "Touchscreen" | ||
[Tracing]: /api/class-tracing.mdx "Tracing" | ||
[Video]: /api/class-video.mdx "Video" | ||
[WebError]: /api/class-weberror.mdx "WebError" | ||
[WebSocket]: /api/class-websocket.mdx "WebSocket" | ||
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame" | ||
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute" | ||
[Worker]: /api/class-worker.mdx "Worker" | ||
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element" | ||
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument" | ||
[Promise]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise "Promise" | ||
[iterator]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols "Iterator" | ||
[origin]: https://developer.mozilla.org/en-US/docs/Glossary/Origin "Origin" | ||
[selector]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors "selector" | ||
[Serializable]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Description "Serializable" | ||
[UIEvent.detail]: https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail "UIEvent.detail" | ||
[UnixTime]: https://en.wikipedia.org/wiki/Unix_time "Unix Time" | ||
[xpath]: https://developer.mozilla.org/en-US/docs/Web/XPath "xpath" | ||
|
||
[bool]: https://docs.microsoft.com/en-us/dotnet/api/system.boolean "bool" | ||
[Date]: https://learn.microsoft.com/en-us/dotnet/api/system.datetime "DateTime" | ||
[double]: https://docs.microsoft.com/en-us/dotnet/api/system.double "double" | ||
[byte]: https://docs.microsoft.com/en-us/dotnet/api/system.byte "byte" | ||
[int]: https://docs.microsoft.com/en-us/dotnet/api/system.int32 "int" | ||
[long]: https://docs.microsoft.com/en-us/dotnet/api/system.int64 "long" | ||
[void]: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/void "void" | ||
[string]: https://docs.microsoft.com/en-us/dotnet/api/system.string "string" | ||
[URL]: https://nodejs.org/api/url.html "URL" | ||
[Regex]: https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.regex "Regex" | ||
|
||
[Action]: https://docs.microsoft.com/en-us/dotnet/api/system.action-1 "Action" | ||
[Func]: https://docs.microsoft.com/en-us/dotnet/api/system.func-2 "Func" | ||
[IEnumerable]: https://docs.microsoft.com/en-us/dotnet/api/system.collections.ienumerable "IEnumerable" | ||
[IDictionary]: https://docs.microsoft.com/en-us/dotnet/api/system.collections.idictionary "IDictionary" | ||
[Task]: https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task?view=net-5.0 "Task" | ||
[IReadOnlyDictionary]: https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlydictionary-2 "IReadOnlyDictionary" | ||
[JsonElement]: https://docs.microsoft.com/en-us/dotnet/api/system.text.json.jsonelement "JsonElement" | ||
|
||
[all available image tags]: https://mcr.microsoft.com/en-us/product/playwright/dotnet/about "all available image tags" | ||
[Microsoft Artifact Registry]: https://mcr.microsoft.com/en-us/product/playwright/dotnet/about "Microsoft Artifact Registry" | ||
[Dockerfile.noble]: https://github.com/microsoft/playwright-dotnet/blob/main/utils/docker/Dockerfile.noble "Dockerfile.noble" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
--- | ||
id: touch-events | ||
title: "Emulating touch events" | ||
--- | ||
import Tabs from '@theme/Tabs'; | ||
import TabItem from '@theme/TabItem'; | ||
import HTMLCard from '@site/src/components/HTMLCard'; | ||
|
||
## Introduction | ||
|
||
Mobile web sites may listen to [touch events](https://developer.mozilla.org/en-US/docs/Web/API/Touch_events) and react to user touch gestures such as swipe, pinch, tap etc. To test this functionality you can manually generate [TouchEvent]s in the page context using [Locator.evaluate()](/api/class-locator.mdx#locator-evaluate). | ||
|
||
If your web application relies on [pointer events](https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events) instead of touch events, you can use [Locator.click()](/api/class-locator.mdx#locator-click) and raw [`Mouse`] events to simulate a single-finger touch, and this will trigger all the same pointer events. | ||
|
||
### Dispatching TouchEvent | ||
|
||
You can dispatch touch events to the page using [Locator.dispatchEvent()](/api/class-locator.mdx#locator-dispatch-event). [Touch](https://developer.mozilla.org/en-US/docs/Web/API/Touch) points can be passed as arguments, see examples below. | ||
|
||
:::note | ||
|
||
The examples work only in Chromium and Firefox, as the [`Touch()`](https://developer.mozilla.org/en-US/docs/Web/API/Touch/Touch) constructor is not supported in WebKit. | ||
::: | ||
|
||
#### Emulating pan gesture | ||
|
||
In the example below, we emulate pan gesture that is expected to move the map. The app under test only uses `clientX/clientY` coordinates of the touch point, so we initialize just that. In a more complex scenario you may need to also set `pageX/pageY/screenX/screenY`, if your app needs them. | ||
|
||
#### Emulating pinch gesture | ||
|
||
In the example below, we emulate pinch gesture, i.e. two touch points moving closer to each other. It is expected to zoom out the map. The app under test only uses `clientX/clientY` coordinates of touch points, so we initialize just that. In a more complex scenario you may need to also set `pageX/pageY/screenX/screenY`, if your app needs them. | ||
|
||
|
||
[APIRequest]: /api/class-apirequest.mdx "APIRequest" | ||
[APIRequestContext]: /api/class-apirequestcontext.mdx "APIRequestContext" | ||
[APIResponse]: /api/class-apiresponse.mdx "APIResponse" | ||
[APIResponseAssertions]: /api/class-apiresponseassertions.mdx "APIResponseAssertions" | ||
[Browser]: /api/class-browser.mdx "Browser" | ||
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext" | ||
[BrowserType]: /api/class-browsertype.mdx "BrowserType" | ||
[CDPSession]: /api/class-cdpsession.mdx "CDPSession" | ||
[Clock]: /api/class-clock.mdx "Clock" | ||
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage" | ||
[Dialog]: /api/class-dialog.mdx "Dialog" | ||
[Download]: /api/class-download.mdx "Download" | ||
[ElementHandle]: /api/class-elementhandle.mdx "ElementHandle" | ||
[FileChooser]: /api/class-filechooser.mdx "FileChooser" | ||
[FormData]: /api/class-formdata.mdx "FormData" | ||
[Frame]: /api/class-frame.mdx "Frame" | ||
[FrameLocator]: /api/class-framelocator.mdx "FrameLocator" | ||
[JSHandle]: /api/class-jshandle.mdx "JSHandle" | ||
[Keyboard]: /api/class-keyboard.mdx "Keyboard" | ||
[Locator]: /api/class-locator.mdx "Locator" | ||
[LocatorAssertions]: /api/class-locatorassertions.mdx "LocatorAssertions" | ||
[Mouse]: /api/class-mouse.mdx "Mouse" | ||
[Page]: /api/class-page.mdx "Page" | ||
[PageAssertions]: /api/class-pageassertions.mdx "PageAssertions" | ||
[Playwright]: /api/class-playwright.mdx "Playwright" | ||
[PlaywrightAssertions]: /api/class-playwrightassertions.mdx "PlaywrightAssertions" | ||
[PlaywrightException]: /api/class-playwrightexception.mdx "PlaywrightException" | ||
[Request]: /api/class-request.mdx "Request" | ||
[RequestOptions]: /api/class-requestoptions.mdx "RequestOptions" | ||
[Response]: /api/class-response.mdx "Response" | ||
[Route]: /api/class-route.mdx "Route" | ||
[Selectors]: /api/class-selectors.mdx "Selectors" | ||
[TimeoutError]: /api/class-timeouterror.mdx "TimeoutError" | ||
[Touchscreen]: /api/class-touchscreen.mdx "Touchscreen" | ||
[Tracing]: /api/class-tracing.mdx "Tracing" | ||
[Video]: /api/class-video.mdx "Video" | ||
[WebError]: /api/class-weberror.mdx "WebError" | ||
[WebSocket]: /api/class-websocket.mdx "WebSocket" | ||
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame" | ||
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute" | ||
[Worker]: /api/class-worker.mdx "Worker" | ||
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element" | ||
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument" | ||
[Promise]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise "Promise" | ||
[iterator]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols "Iterator" | ||
[origin]: https://developer.mozilla.org/en-US/docs/Glossary/Origin "Origin" | ||
[selector]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors "selector" | ||
[Serializable]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Description "Serializable" | ||
[UIEvent.detail]: https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail "UIEvent.detail" | ||
[UnixTime]: https://en.wikipedia.org/wiki/Unix_time "Unix Time" | ||
[xpath]: https://developer.mozilla.org/en-US/docs/Web/XPath "xpath" | ||
|
||
[boolean]: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html "boolean" | ||
[byte[]]: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html "byte[]" | ||
[Consumer]: https://docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html "Consumer" | ||
[Date]: https://docs.oracle.com/javase/8/docs/api/java/util/Date.html "Date" | ||
[double]: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html "double" | ||
[InputStream]: https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html "InputStream" | ||
[int]: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html "int" | ||
[long]: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html "long" | ||
[JsonObject]: https://www.javadoc.io/doc/com.google.code.gson/gson/latest/com.google.gson/com/google/gson/JsonObject.html "JsonObject" | ||
[List]: https://docs.oracle.com/javase/8/docs/api/java/util/List.html "List" | ||
[Map]: https://docs.oracle.com/javase/8/docs/api/java/util/Map.html "Map" | ||
[null]: https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.7 "null" | ||
[Object]: https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html "Object" | ||
[Path]: https://docs.oracle.com/javase/8/docs/api/java/nio/file/Path.html "Path" | ||
[Pattern]: https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html "Pattern" | ||
[Predicate]: https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html "Predicate" | ||
[void]: https://docs.oracle.com/javase/tutorial/java/javaOO/methods.html "void" | ||
[Runnable]: https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html "Runnable" | ||
[RuntimeException]: https://docs.oracle.com/javase/8/docs/api/java/lang/RuntimeException.html "RuntimeException" | ||
[String]: https://docs.oracle.com/javase/8/docs/api/java/lang/String.html "String" | ||
|
||
[all available image tags]: https://mcr.microsoft.com/en-us/product/playwright/java/about "all available image tags" | ||
[Microsoft Artifact Registry]: https://mcr.microsoft.com/en-us/product/playwright/java/about "Microsoft Artifact Registry" | ||
[Dockerfile.noble]: https://github.com/microsoft/playwright-java/blob/main/utils/docker/Dockerfile.noble "Dockerfile.noble" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.