Skip to content

Commit 78d2bb8

Browse files
committed
[py] Selenium Manager use binary from Browser Options
#11351
1 parent bd24090 commit 78d2bb8

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

py/selenium/webdriver/common/selenium_manager.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,11 @@ def driver_location(self, options: BaseOptions) -> str:
9393
args.append("--browser-version")
9494
args.append(str(options.browser_version))
9595

96+
binary_location = getattr(options, "binary_location", None)
97+
if binary_location:
98+
args.append("--browser-path")
99+
args.append(str(binary_location))
100+
96101
result = self.run(args)
97102
executable = result.split("\t")[-1].strip()
98103
logger.debug(f"Using driver at: {executable}")

py/test/selenium/webdriver/common/selenium_manager_tests.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,25 @@ def test_browser_version_is_used_for_sm(mocker):
5151
assert "110" in args[0]
5252

5353

54+
def test_browser_path_is_used_for_sm(mocker):
55+
import subprocess
56+
57+
mock_run = mocker.patch("subprocess.run")
58+
mocked_result = Mock()
59+
mocked_result.configure_mock(
60+
**{"stdout.decode.return_value": '{"result": {"message": "driver"}, "logs": []}', "returncode": 0}
61+
)
62+
mock_run.return_value = mocked_result
63+
options = Options()
64+
options.capabilities["browserName"] = "chrome"
65+
options.binary_location = "/opt/bin/browser-bin"
66+
67+
_ = SeleniumManager().driver_location(options)
68+
args, kwargs = subprocess.run.call_args
69+
assert "--browser-path" in args[0]
70+
assert "/opt/bin/browser-bin" in args[0]
71+
72+
5473
def test_stderr_is_propagated_to_exception_messages():
5574
msg = r"Selenium Manager failed for:.* --browser foo --output json\.\nInvalid browser name: foo\n"
5675
with pytest.raises(SeleniumManagerException, match=msg):

0 commit comments

Comments
 (0)