From aff181f817640585c6442698a05d770932fc3891 Mon Sep 17 00:00:00 2001 From: Johnson Date: Sat, 31 Dec 2022 18:04:12 +0800 Subject: [PATCH] [py] Expose browser specific functionalities for remote webdrivers --- py/selenium/webdriver/chromium/remote_connection.py | 8 +++++--- py/selenium/webdriver/chromium/webdriver.py | 3 +++ py/selenium/webdriver/firefox/webdriver.py | 10 +++++----- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/py/selenium/webdriver/chromium/remote_connection.py b/py/selenium/webdriver/chromium/remote_connection.py index c2e7c9a614d46..c6369d411632e 100644 --- a/py/selenium/webdriver/chromium/remote_connection.py +++ b/py/selenium/webdriver/chromium/remote_connection.py @@ -32,9 +32,6 @@ def __init__( self.browser_name = browser_name self._commands["launchApp"] = ("POST", "/session/$sessionId/chromium/launch_app") self._commands["setPermissions"] = ("POST", "/session/$sessionId/permissions") - self._commands["setNetworkConditions"] = ("POST", "/session/$sessionId/chromium/network_conditions") - self._commands["getNetworkConditions"] = ("GET", "/session/$sessionId/chromium/network_conditions") - self._commands["deleteNetworkConditions"] = ("DELETE", "/session/$sessionId/chromium/network_conditions") self._commands["executeCdpCommand"] = ("POST", f"/session/$sessionId/{vendor_prefix}/cdp/execute") self._commands["getSinks"] = ("GET", f"/session/$sessionId/{vendor_prefix}/cast/get_sinks") self._commands["getIssueMessage"] = ("GET", f"/session/$sessionId/{vendor_prefix}/cast/get_issue_message") @@ -45,3 +42,8 @@ def __init__( ) self._commands["startTabMirroring"] = ("POST", f"/session/$sessionId/{vendor_prefix}/cast/start_tab_mirroring") self._commands["stopCasting"] = ("POST", f"/session/$sessionId/{vendor_prefix}/cast/stop_casting") + + def add_network_commands(self) -> None: + self._commands["setNetworkConditions"] = ("POST", "/session/$sessionId/chromium/network_conditions") + self._commands["getNetworkConditions"] = ("GET", "/session/$sessionId/chromium/network_conditions") + self._commands["deleteNetworkConditions"] = ("DELETE", "/session/$sessionId/chromium/network_conditions") diff --git a/py/selenium/webdriver/chromium/webdriver.py b/py/selenium/webdriver/chromium/webdriver.py index 935b782f6dcc5..c6cf96eb071ca 100644 --- a/py/selenium/webdriver/chromium/webdriver.py +++ b/py/selenium/webdriver/chromium/webdriver.py @@ -128,6 +128,7 @@ def get_network_conditions(self): {'latency': 4, 'download_throughput': 2, 'upload_throughput': 2, 'offline': False} """ + ChromiumRemoteConnection.add_network_commands(self.command_executor) return self.execute("getNetworkConditions")["value"] def set_network_conditions(self, **network_conditions) -> None: @@ -147,10 +148,12 @@ def set_network_conditions(self, **network_conditions) -> None: Note: 'throughput' can be used to set both (for download and upload). """ + ChromiumRemoteConnection.add_network_commands(self.command_executor) self.execute("setNetworkConditions", {"network_conditions": network_conditions}) def delete_network_conditions(self) -> None: """Resets Chromium network emulation settings.""" + ChromiumRemoteConnection.add_network_commands(self.command_executor) self.execute("deleteNetworkConditions") def set_permissions(self, name: str, value: str) -> None: diff --git a/py/selenium/webdriver/firefox/webdriver.py b/py/selenium/webdriver/firefox/webdriver.py index 0aa46b0557a49..77519d14b8bf4 100644 --- a/py/selenium/webdriver/firefox/webdriver.py +++ b/py/selenium/webdriver/firefox/webdriver.py @@ -241,11 +241,11 @@ def context(self, context): ... do stuff ... """ initial_context = self.execute("GET_CONTEXT").pop("value") - self.set_context(context) + WebDriver.set_context(self, context) try: yield finally: - self.set_context(initial_context) + WebDriver.set_context(self, initial_context) def install_addon(self, path, temporary=False) -> str: """Installs Firefox addon. @@ -306,7 +306,7 @@ def get_full_page_screenshot_as_file(self, filename) -> bool: "name used for saved screenshot does not match file " "type. It should end with a `.png` extension", UserWarning, ) - png = self.get_full_page_screenshot_as_png() + png = WebDriver.get_full_page_screenshot_as_png(self) try: with open(filename, "wb") as f: f.write(png) @@ -330,7 +330,7 @@ def save_full_page_screenshot(self, filename) -> bool: driver.save_full_page_screenshot('/Screenshots/foo.png') """ - return self.get_full_page_screenshot_as_file(filename) + return WebDriver.get_full_page_screenshot_as_file(self, filename) def get_full_page_screenshot_as_png(self) -> bytes: """Gets the full document screenshot of the current window as a binary @@ -341,7 +341,7 @@ def get_full_page_screenshot_as_png(self) -> bytes: driver.get_full_page_screenshot_as_png() """ - return base64.b64decode(self.get_full_page_screenshot_as_base64().encode("ascii")) + return base64.b64decode(WebDriver.get_full_page_screenshot_as_base64(self).encode("ascii")) def get_full_page_screenshot_as_base64(self) -> str: """Gets the full document screenshot of the current window as a base64