Browse Source

Fixed SeleniumTestCase.set_emulated_media() when using selenium_hub.

The .execute_cdp_cmd() method doesn't exist on selenium.webdriver.Remote.
Nick Pope 10 months ago
parent
commit
ceaf1e2848
1 changed files with 12 additions and 3 deletions
  1. 12 3
      django/test/selenium.py

+ 12 - 3
django/test/selenium.py

@@ -193,15 +193,24 @@ class SeleniumTestCase(LiveServerTestCase, metaclass=SeleniumTestCaseBase):
             finally:
                 self.selenium.execute_script("localStorage.removeItem('theme');")
 
-    def set_emulated_media(self, features, media=""):
+    def set_emulated_media(self, *, media=None, features=None):
         if self.browser not in {"chrome", "edge"}:
             self.skipTest(
                 "Emulation.setEmulatedMedia is only supported on Chromium and "
                 "Chrome-based browsers. See https://chromedevtools.github.io/devtools-"
                 "protocol/1-3/Emulation/#method-setEmulatedMedia for more details."
             )
-        self.selenium.execute_cdp_cmd(
-            "Emulation.setEmulatedMedia", {"media": media, "features": features}
+        params = {}
+        if media is not None:
+            params["media"] = media
+        if features is not None:
+            params["features"] = features
+
+        # Not using .execute_cdp_cmd() as it isn't supported by the remote web driver
+        # when using --selenium-hub.
+        self.selenium.execute(
+            driver_command="executeCdpCommand",
+            params={"cmd": "Emulation.setEmulatedMedia", "params": params},
         )
 
     @contextmanager