Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion playwright/_impl/_accessibility.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,5 +65,5 @@ async def snapshot(
params = locals_to_params(locals())
if root:
params["root"] = root._channel
result = await self._channel.send("accessibilitySnapshot", params)
result = await self._channel.send("accessibilitySnapshot", None, params)
return _ax_node_from_protocol(result) if result else None
40 changes: 34 additions & 6 deletions playwright/_impl/_artifact.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,27 +33,55 @@ async def path_after_finished(self) -> pathlib.Path:
raise Error(
"Path is not available when using browser_type.connect(). Use save_as() to save a local copy."
)
path = await self._channel.send("pathAfterFinished")
path = await self._channel.send(
"pathAfterFinished",
None,
)
return pathlib.Path(path)

async def save_as(self, path: Union[str, Path]) -> None:
stream = cast(Stream, from_channel(await self._channel.send("saveAsStream")))
stream = cast(
Stream,
from_channel(
await self._channel.send(
"saveAsStream",
None,
)
),
)
make_dirs_for_file(path)
await stream.save_as(path)

async def failure(self) -> Optional[str]:
reason = await self._channel.send("failure")
reason = await self._channel.send(
"failure",
None,
)
if reason is None:
return None
return patch_error_message(reason)

async def delete(self) -> None:
await self._channel.send("delete")
await self._channel.send(
"delete",
None,
)

async def read_info_buffer(self) -> bytes:
stream = cast(Stream, from_channel(await self._channel.send("stream")))
stream = cast(
Stream,
from_channel(
await self._channel.send(
"stream",
None,
)
),
)
buffer = await stream.read_all()
return buffer

async def cancel(self) -> None: # pyright: ignore[reportIncompatibleMethodOverride]
await self._channel.send("cancel")
await self._channel.send(
"cancel",
None,
)
12 changes: 7 additions & 5 deletions playwright/_impl/_browser.py
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ async def new_context(
assert self._browser_type is not None
await self._browser_type._prepare_browser_context_params(params)

channel = await self._channel.send("newContext", params)
channel = await self._channel.send("newContext", None, params)
context = cast(BrowserContext, from_channel(channel))
await context._initialize_har_from_options(
record_har_content=recordHarContent,
Expand Down Expand Up @@ -235,7 +235,7 @@ async def close(self, reason: str = None) -> None:
if self._should_close_connection_on_close:
await self._connection.stop_async()
else:
await self._channel.send("close", {"reason": reason})
await self._channel.send("close", None, {"reason": reason})
except Exception as e:
if not is_target_closed_error(e):
raise e
Expand All @@ -245,7 +245,7 @@ def version(self) -> str:
return self._initializer["version"]

async def new_browser_cdp_session(self) -> CDPSession:
return from_channel(await self._channel.send("newBrowserCDPSession"))
return from_channel(await self._channel.send("newBrowserCDPSession", None))

async def start_tracing(
self,
Expand All @@ -260,10 +260,12 @@ async def start_tracing(
if path:
self._cr_tracing_path = str(path)
params["path"] = str(path)
await self._channel.send("startTracing", params)
await self._channel.send("startTracing", None, params)

async def stop_tracing(self) -> bytes:
artifact = cast(Artifact, from_channel(await self._channel.send("stopTracing")))
artifact = cast(
Artifact, from_channel(await self._channel.send("stopTracing", None))
)
buffer = await artifact.read_info_buffer()
await artifact.delete()
if self._cr_tracing_path:
Expand Down
35 changes: 18 additions & 17 deletions playwright/_impl/_browser_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -330,17 +330,17 @@ async def _initialize_har_from_options(
async def new_page(self) -> Page:
if self._owner_page:
raise Error("Please use browser.new_context()")
return from_channel(await self._channel.send("newPage"))
return from_channel(await self._channel.send("newPage", None))

async def cookies(self, urls: Union[str, Sequence[str]] = None) -> List[Cookie]:
if urls is None:
urls = []
if isinstance(urls, str):
urls = [urls]
return await self._channel.send("cookies", dict(urls=urls))
return await self._channel.send("cookies", None, dict(urls=urls))

async def add_cookies(self, cookies: Sequence[SetCookieParam]) -> None:
await self._channel.send("addCookies", dict(cookies=cookies))
await self._channel.send("addCookies", None, dict(cookies=cookies))

async def clear_cookies(
self,
Expand All @@ -350,6 +350,7 @@ async def clear_cookies(
) -> None:
await self._channel.send(
"clearCookies",
None,
{
"name": name if isinstance(name, str) else None,
"nameRegexSource": name.pattern if isinstance(name, Pattern) else None,
Expand All @@ -374,21 +375,21 @@ async def clear_cookies(
async def grant_permissions(
self, permissions: Sequence[str], origin: str = None
) -> None:
await self._channel.send("grantPermissions", locals_to_params(locals()))
await self._channel.send("grantPermissions", None, locals_to_params(locals()))

async def clear_permissions(self) -> None:
await self._channel.send("clearPermissions")
await self._channel.send("clearPermissions", None)

async def set_geolocation(self, geolocation: Geolocation = None) -> None:
await self._channel.send("setGeolocation", locals_to_params(locals()))
await self._channel.send("setGeolocation", None, locals_to_params(locals()))

async def set_extra_http_headers(self, headers: Dict[str, str]) -> None:
await self._channel.send(
"setExtraHTTPHeaders", dict(headers=serialize_headers(headers))
"setExtraHTTPHeaders", None, dict(headers=serialize_headers(headers))
)

async def set_offline(self, offline: bool) -> None:
await self._channel.send("setOffline", dict(offline=offline))
await self._channel.send("setOffline", None, dict(offline=offline))

async def add_init_script(
self, script: str = None, path: Union[str, Path] = None
Expand All @@ -397,7 +398,7 @@ async def add_init_script(
script = (await async_readfile(path)).decode()
if not isinstance(script, str):
raise Error("Either path or script parameter must be specified")
await self._channel.send("addInitScript", dict(source=script))
await self._channel.send("addInitScript", None, dict(source=script))

async def expose_binding(
self, name: str, callback: Callable, handle: bool = None
Expand All @@ -411,7 +412,7 @@ async def expose_binding(
raise Error(f'Function "{name}" has been already registered')
self._bindings[name] = callback
await self._channel.send(
"exposeBinding", dict(name=name, needsHandle=handle or False)
"exposeBinding", None, dict(name=name, needsHandle=handle or False)
)

async def expose_function(self, name: str, callback: Callable) -> None:
Expand Down Expand Up @@ -499,7 +500,7 @@ async def _record_into_har(
}
if page:
params["page"] = page._channel
har_id = await self._channel.send("harStart", params)
har_id = await self._channel.send("harStart", None, params)
self._har_recorders[har_id] = {
"path": str(har),
"content": update_content,
Expand Down Expand Up @@ -535,15 +536,15 @@ async def route_from_har(
async def _update_interception_patterns(self) -> None:
patterns = RouteHandler.prepare_interception_patterns(self._routes)
await self._channel.send(
"setNetworkInterceptionPatterns", {"patterns": patterns}
"setNetworkInterceptionPatterns", None, {"patterns": patterns}
)

async def _update_web_socket_interception_patterns(self) -> None:
patterns = WebSocketRouteHandler.prepare_interception_patterns(
self._web_socket_routes
)
await self._channel.send(
"setWebSocketInterceptionPatterns", {"patterns": patterns}
"setWebSocketInterceptionPatterns", None, {"patterns": patterns}
)

def expect_event(
Expand Down Expand Up @@ -596,7 +597,7 @@ async def _inner_close() -> None:
har = cast(
Artifact,
from_channel(
await self._channel.send("harExport", {"harId": har_id})
await self._channel.send("harExport", None, {"harId": har_id})
),
)
# Server side will compress artifact if content is attach or if file is .zip.
Expand All @@ -615,14 +616,14 @@ async def _inner_close() -> None:
await har.delete()

await self._channel._connection.wrap_api_call(_inner_close, True)
await self._channel.send("close", {"reason": reason})
await self._channel.send("close", None, {"reason": reason})
await self._closed_future

async def storage_state(
self, path: Union[str, Path] = None, indexedDB: bool = None
) -> StorageState:
result = await self._channel.send_return_as_dict(
"storageState", {"indexedDB": indexedDB}
"storageState", None, {"indexedDB": indexedDB}
)
if path:
await async_writefile(path, json.dumps(result))
Expand Down Expand Up @@ -749,7 +750,7 @@ async def new_cdp_session(self, page: Union[Page, Frame]) -> CDPSession:
params["frame"] = page._channel
else:
raise Error("page: expected Page or Frame")
return from_channel(await self._channel.send("newCDPSession", params))
return from_channel(await self._channel.send("newCDPSession", None, params))

@property
def tracing(self) -> Tracing:
Expand Down
16 changes: 11 additions & 5 deletions playwright/_impl/_browser_type.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,12 @@ async def launch(
params = locals_to_params(locals())
normalize_launch_params(params)
browser = cast(
Browser, from_channel(await self._channel.send("launch", params))
Browser,
from_channel(
await self._channel.send(
"launch", TimeoutSettings.launch_timeout, params
)
),
)
browser._connect_to_browser_type(
self, str(tracesDir) if tracesDir is not None else None
Expand Down Expand Up @@ -159,7 +164,7 @@ async def launch_persistent_context(
await self._prepare_browser_context_params(params)
normalize_launch_params(params)
result = await self._channel.send_return_as_dict(
"launchPersistentContext", params
"launchPersistentContext", TimeoutSettings.launch_timeout, params
)
browser = cast(
Browser,
Expand Down Expand Up @@ -197,10 +202,11 @@ async def connect_over_cdp(
headers: Dict[str, str] = None,
) -> Browser:
params = locals_to_params(locals())
params["timeout"] = TimeoutSettings.launch_timeout(timeout)
if params.get("headers"):
params["headers"] = serialize_headers(params["headers"])
response = await self._channel.send_return_as_dict("connectOverCDP", params)
response = await self._channel.send_return_as_dict(
"connectOverCDP", TimeoutSettings.launch_timeout, params
)
browser = cast(Browser, from_channel(response["browser"]))
browser._connect_to_browser_type(self, None)

Expand All @@ -222,6 +228,7 @@ async def connect(
pipe_channel = (
await local_utils._channel.send_return_as_dict(
"connect",
None,
{
"wsEndpoint": wsEndpoint,
"headers": headers,
Expand Down Expand Up @@ -355,4 +362,3 @@ def normalize_launch_params(params: Dict) -> None:
params["downloadsPath"] = str(Path(params["downloadsPath"]))
if "tracesDir" in params:
params["tracesDir"] = str(Path(params["tracesDir"]))
params["timeout"] = TimeoutSettings.launch_timeout(params.get("timeout"))
7 changes: 5 additions & 2 deletions playwright/_impl/_cdp_session.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ def _on_event(self, params: Any) -> None:
self.emit(params["method"], params.get("params"))

async def send(self, method: str, params: Dict = None) -> Dict:
return await self._channel.send("send", locals_to_params(locals()))
return await self._channel.send("send", None, locals_to_params(locals()))

async def detach(self) -> None:
await self._channel.send("detach")
await self._channel.send(
"detach",
None,
)
32 changes: 25 additions & 7 deletions playwright/_impl/_clock.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,46 +27,64 @@ def __init__(self, browser_context: "BrowserContext") -> None:

async def install(self, time: Union[float, str, datetime.datetime] = None) -> None:
await self._browser_context._channel.send(
"clockInstall", parse_time(time) if time is not None else {}
"clockInstall",
None,
parse_time(time) if time is not None else {},
)

async def fast_forward(
self,
ticks: Union[int, str],
) -> None:
await self._browser_context._channel.send(
"clockFastForward", parse_ticks(ticks)
"clockFastForward",
None,
parse_ticks(ticks),
)

async def pause_at(
self,
time: Union[float, str, datetime.datetime],
) -> None:
await self._browser_context._channel.send("clockPauseAt", parse_time(time))
await self._browser_context._channel.send(
"clockPauseAt",
None,
parse_time(time),
)

async def resume(
self,
) -> None:
await self._browser_context._channel.send("clockResume")
await self._browser_context._channel.send("clockResume", None)

async def run_for(
self,
ticks: Union[int, str],
) -> None:
await self._browser_context._channel.send("clockRunFor", parse_ticks(ticks))
await self._browser_context._channel.send(
"clockRunFor",
None,
parse_ticks(ticks),
)

async def set_fixed_time(
self,
time: Union[float, str, datetime.datetime],
) -> None:
await self._browser_context._channel.send("clockSetFixedTime", parse_time(time))
await self._browser_context._channel.send(
"clockSetFixedTime",
None,
parse_time(time),
)

async def set_system_time(
self,
time: Union[float, str, datetime.datetime],
) -> None:
await self._browser_context._channel.send(
"clockSetSystemTime", parse_time(time)
"clockSetSystemTime",
None,
parse_time(time),
)


Expand Down
Loading
Loading