From 701973473ba9b8ef032d8a52f76b236aaca55f86 Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Mon, 29 Nov 2021 01:30:48 -0500 Subject: [PATCH] Add compatibility with Selenoid Selenium grids --- examples/capabilities/selenoid_cap_file.py | 8 ++++++++ seleniumbase/core/browser_launcher.py | 22 ++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100755 examples/capabilities/selenoid_cap_file.py diff --git a/examples/capabilities/selenoid_cap_file.py b/examples/capabilities/selenoid_cap_file.py new file mode 100755 index 00000000..e02cc3f5 --- /dev/null +++ b/examples/capabilities/selenoid_cap_file.py @@ -0,0 +1,8 @@ +# Desired capabilities example file for Selenoid Grid +# +# The same result can be achieved on the command-line with: +# --cap-string='{"selenoid": "true"}' + +capabilities = { + "selenoid": "true", +} diff --git a/seleniumbase/core/browser_launcher.py b/seleniumbase/core/browser_launcher.py index 3e358f58..873be022 100755 --- a/seleniumbase/core/browser_launcher.py +++ b/seleniumbase/core/browser_launcher.py @@ -970,10 +970,17 @@ def get_remote_driver( else: capabilities = chrome_options.to_capabilities() # Set custom desired capabilities + selenoid = False for key in desired_caps.keys(): capabilities[key] = desired_caps[key] + if key == "selenoid" and desired_caps[key]: + selenoid = True if selenium4: chrome_options.set_capability("cloud:options", capabilities) + if selenoid: + chrome_options.set_capability( + "selenoid:options", {"enableVNC": True} + ) return webdriver.Remote( command_executor=address, options=chrome_options, @@ -1007,10 +1014,17 @@ def get_remote_driver( if headless: capabilities["moz:firefoxOptions"] = {"args": ["-headless"]} # Set custom desired capabilities + selenoid = False for key in desired_caps.keys(): capabilities[key] = desired_caps[key] + if key == "selenoid" and desired_caps[key]: + selenoid = True if selenium4: firefox_options.set_capability("cloud:options", capabilities) + if selenoid: + firefox_options.set_capability( + "selenoid:options", {"enableVNC": True} + ) return webdriver.Remote( command_executor=address, options=firefox_options, @@ -1175,9 +1189,17 @@ def get_remote_driver( keep_alive=True, ) elif browser_name == constants.Browser.REMOTE: + selenoid = False + for key in desired_caps.keys(): + if key == "selenoid" and desired_caps[key]: + selenoid = True if selenium4: remote_options = ArgOptions() remote_options.set_capability("cloud:options", desired_caps) + if selenoid: + remote_options.set_capability( + "selenoid:options", {"enableVNC": True} + ) return webdriver.Remote( command_executor=address, options=remote_options,