diff --git a/README.md b/README.md index 1dd36df73..f76c89a14 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,9 @@ Playwright is a Python library to automate [Chromium](https://www.chromium.org/H | | Linux | macOS | Windows | | :--- | :---: | :---: | :---: | -| Chromium 93.0.4543.0 | ✅ | ✅ | ✅ | +| Chromium 93.0.4576.0 | ✅ | ✅ | ✅ | | WebKit 14.2 | ✅ | ✅ | ✅ | -| Firefox 89.0 | ✅ | ✅ | ✅ | +| Firefox 90.0 | ✅ | ✅ | ✅ | ## Documentation diff --git a/playwright/_impl/_browser_type.py b/playwright/_impl/_browser_type.py index dff830f76..08aafc1f9 100644 --- a/playwright/_impl/_browser_type.py +++ b/playwright/_impl/_browser_type.py @@ -85,7 +85,7 @@ async def launch( try: return from_channel(await self._channel.send("launch", params)) except Exception as e: - if "because executable doesn't exist" in str(e): + if "npx playwright install" in str(e): raise not_installed_error(f'"{self.name}" browser was not found.') raise e @@ -145,7 +145,7 @@ async def launch_persistent_context( context._options = params return context except Exception as e: - if "because executable doesn't exist" in str(e): + if "npx playwright install" in str(e): raise not_installed_error(f'"{self.name}" browser was not found.') raise e diff --git a/playwright/_impl/_frame.py b/playwright/_impl/_frame.py index 268beb110..4e1047a8b 100644 --- a/playwright/_impl/_frame.py +++ b/playwright/_impl/_frame.py @@ -466,6 +466,17 @@ async def hover( ) -> None: await self._channel.send("hover", locals_to_params(locals())) + async def drag_and_drop( + self, + source: str, + target: str, + force: bool = None, + noWaitAfter: bool = None, + timeout: float = None, + trial: bool = None, + ) -> None: + await self._channel.send("dragAndDrop", locals_to_params(locals())) + async def select_option( self, selector: str, diff --git a/playwright/_impl/_page.py b/playwright/_impl/_page.py index e230d43ed..ed756bf38 100644 --- a/playwright/_impl/_page.py +++ b/playwright/_impl/_page.py @@ -649,6 +649,17 @@ async def hover( ) -> None: return await self._main_frame.hover(**locals_to_params(locals())) + async def drag_and_drop( + self, + source: str, + target: str, + force: bool = None, + noWaitAfter: bool = None, + timeout: float = None, + trial: bool = None, + ) -> None: + return await self._main_frame.drag_and_drop(**locals_to_params(locals())) + async def select_option( self, selector: str, diff --git a/playwright/async_api/_generated.py b/playwright/async_api/_generated.py index c8d0b8f3e..295396e5d 100644 --- a/playwright/async_api/_generated.py +++ b/playwright/async_api/_generated.py @@ -3187,7 +3187,7 @@ async def is_checked(self, selector: str, *, timeout: float = None) -> bool: Parameters ---------- selector : str - A selector to search for element. If there are multiple elements satisfying the selector, the first will be used. See + A selector to search for an element. If there are multiple elements satisfying the selector, the first will be used. See [working with selectors](./selectors.md) for more details. timeout : Union[float, NoneType] Maximum time in milliseconds, defaults to 30 seconds, pass `0` to disable timeout. The default value can be changed by @@ -3213,7 +3213,7 @@ async def is_disabled(self, selector: str, *, timeout: float = None) -> bool: Parameters ---------- selector : str - A selector to search for element. If there are multiple elements satisfying the selector, the first will be used. See + A selector to search for an element. If there are multiple elements satisfying the selector, the first will be used. See [working with selectors](./selectors.md) for more details. timeout : Union[float, NoneType] Maximum time in milliseconds, defaults to 30 seconds, pass `0` to disable timeout. The default value can be changed by @@ -3239,7 +3239,7 @@ async def is_editable(self, selector: str, *, timeout: float = None) -> bool: Parameters ---------- selector : str - A selector to search for element. If there are multiple elements satisfying the selector, the first will be used. See + A selector to search for an element. If there are multiple elements satisfying the selector, the first will be used. See [working with selectors](./selectors.md) for more details. timeout : Union[float, NoneType] Maximum time in milliseconds, defaults to 30 seconds, pass `0` to disable timeout. The default value can be changed by @@ -3265,7 +3265,7 @@ async def is_enabled(self, selector: str, *, timeout: float = None) -> bool: Parameters ---------- selector : str - A selector to search for element. If there are multiple elements satisfying the selector, the first will be used. See + A selector to search for an element. If there are multiple elements satisfying the selector, the first will be used. See [working with selectors](./selectors.md) for more details. timeout : Union[float, NoneType] Maximum time in milliseconds, defaults to 30 seconds, pass `0` to disable timeout. The default value can be changed by @@ -3292,7 +3292,7 @@ async def is_hidden(self, selector: str, *, timeout: float = None) -> bool: Parameters ---------- selector : str - A selector to search for element. If there are multiple elements satisfying the selector, the first will be used. See + A selector to search for an element. If there are multiple elements satisfying the selector, the first will be used. See [working with selectors](./selectors.md) for more details. timeout : Union[float, NoneType] Maximum time in milliseconds, defaults to 30 seconds, pass `0` to disable timeout. The default value can be changed by @@ -3319,7 +3319,7 @@ async def is_visible(self, selector: str, *, timeout: float = None) -> bool: Parameters ---------- selector : str - A selector to search for element. If there are multiple elements satisfying the selector, the first will be used. See + A selector to search for an element. If there are multiple elements satisfying the selector, the first will be used. See [working with selectors](./selectors.md) for more details. timeout : Union[float, NoneType] Maximum time in milliseconds, defaults to 30 seconds, pass `0` to disable timeout. The default value can be changed by @@ -3378,7 +3378,7 @@ async def dispatch_event( Parameters ---------- selector : str - A selector to search for element. If there are multiple elements satisfying the selector, the first will be used. See + A selector to search for an element. If there are multiple elements satisfying the selector, the first will be used. See [working with selectors](./selectors.md) for more details. type : str DOM event type: `"click"`, `"dragstart"`, etc. @@ -3659,7 +3659,7 @@ async def click( Parameters ---------- selector : str - A selector to search for element. If there are multiple elements satisfying the selector, the first will be used. See + A selector to search for an element. If there are multiple elements satisfying the selector, the first will be used. See [working with selectors](./selectors.md) for more details. modifiers : Union[List[Union["Alt", "Control", "Meta", "Shift"]], NoneType] Modifier keys to press. Ensures that only these modifiers are pressed during the operation, and then restores current @@ -3739,7 +3739,7 @@ async def dblclick( Parameters ---------- selector : str - A selector to search for element. If there are multiple elements satisfying the selector, the first will be used. See + A selector to search for an element. If there are multiple elements satisfying the selector, the first will be used. See [working with selectors](./selectors.md) for more details. modifiers : Union[List[Union["Alt", "Control", "Meta", "Shift"]], NoneType] Modifier keys to press. Ensures that only these modifiers are pressed during the operation, and then restores current @@ -3813,7 +3813,7 @@ async def tap( Parameters ---------- selector : str - A selector to search for element. If there are multiple elements satisfying the selector, the first will be used. See + A selector to search for an element. If there are multiple elements satisfying the selector, the first will be used. See [working with selectors](./selectors.md) for more details. modifiers : Union[List[Union["Alt", "Control", "Meta", "Shift"]], NoneType] Modifier keys to press. Ensures that only these modifiers are pressed during the operation, and then restores current @@ -3875,7 +3875,7 @@ async def fill( Parameters ---------- selector : str - A selector to search for element. If there are multiple elements satisfying the selector, the first will be used. See + A selector to search for an element. If there are multiple elements satisfying the selector, the first will be used. See [working with selectors](./selectors.md) for more details. value : str Value to fill for the ``, `