From 6b14e012b7adca220c65a5f98d75491cee6a5713 Mon Sep 17 00:00:00 2001 From: Henrik Skupin Date: Fri, 29 Apr 2022 21:02:23 +0000 Subject: [PATCH] [wdspec] Improvements for WebDriver BiDi Python client. The "session.new" command currently doesn't work because the transport is started after sending the command. This needed to be flipped. Also it is helpful to have the event loop of the current transport available as property on the BiDi session directly. Differential Revision: https://phabricator.services.mozilla.com/D144979 bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1719505 gecko-commit: 7ac82aff1852eaf89acc99714a7359596b093d2a gecko-reviewers: webdriver-reviewers, jgraham --- tools/webdriver/webdriver/bidi/client.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/tools/webdriver/webdriver/bidi/client.py b/tools/webdriver/webdriver/bidi/client.py index a5162a22d9c458..b2b641d195bb97 100644 --- a/tools/webdriver/webdriver/bidi/client.py +++ b/tools/webdriver/webdriver/bidi/client.py @@ -91,6 +91,13 @@ def __init__(self, self.session = modules.Session(self) self.browsing_context = modules.BrowsingContext(self) + @property + def event_loop(self): + if self.transport: + return self.transport.loop + + return None + @classmethod def from_http(cls, session_id: str, @@ -109,7 +116,7 @@ def from_http(cls, @classmethod def bidi_only(cls, websocket_url: str, - requested_capabilities: Optional[Mapping[str, Any]]) -> "BidiSession": + requested_capabilities: Optional[Mapping[str, Any]] = None) -> "BidiSession": """Create a BiDi session where there is no existing HTTP session :param webdocket_url: URL to the WebSocket server listening for BiDi connections @@ -129,13 +136,13 @@ async def start(self, if loop is None: loop = get_running_loop() + self.transport = Transport(self.websocket_url, self.on_message, loop=loop) + await self.transport.start() if self.session_id is None: self.session_id, self.capabilities = await self.session.new( - self.requested_capabilities) - - await self.transport.start() + capabilities=self.requested_capabilities) async def send_command( self,