Skip to content

Commit 7b4ca78

Browse files
authored
Merge pull request #32 from CaioWzy/fix/browser-not-found
fix: resolve issue #29 where browser path was not found on macOS
2 parents 2783dec + 7cb0b67 commit 7b4ca78

File tree

2 files changed

+44
-17
lines changed

2 files changed

+44
-17
lines changed

pydoll/browser/chrome.py

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import os
1+
import platform
22

33
from pydoll.browser.base import Browser
44
from pydoll.browser.managers import BrowserOptionsManager
@@ -13,19 +13,21 @@ def __init__(
1313

1414
@staticmethod
1515
def _get_default_binary_location():
16-
os_name = os.name
17-
match os_name:
18-
case 'nt':
19-
browser_path = (
20-
r'C:\Program Files\Google\Chrome\Application\chrome.exe'
21-
)
22-
return BrowserOptionsManager.validate_browser_path(
23-
browser_path
24-
)
25-
case 'posix':
26-
browser_path = '/usr/bin/google-chrome'
27-
return BrowserOptionsManager.validate_browser_path(
28-
browser_path
29-
)
30-
case _:
31-
raise ValueError('Unsupported OS')
16+
os_name = platform.system()
17+
browser_paths = {
18+
'Windows':
19+
r'C:\Program Files\Google\Chrome\Application\chrome.exe',
20+
'Linux':
21+
'/usr/bin/google-chrome',
22+
'Darwin':
23+
'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
24+
}
25+
26+
browser_path = browser_paths.get(os_name)
27+
28+
if not browser_path:
29+
raise ValueError('Unsupported OS')
30+
31+
return BrowserOptionsManager.validate_browser_path(
32+
browser_path
33+
)

tests/test_chrome.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44
import pytest_asyncio
55

66
from pydoll import exceptions
7+
from pydoll.browser.chrome import Chrome
78
from pydoll.browser.base import Browser
89
from pydoll.browser.managers import (
910
ProxyManager,
11+
BrowserOptionsManager
1012
)
1113
from pydoll.browser.options import Options
1214
from pydoll.browser.page import Page
@@ -357,3 +359,26 @@ async def test__get_valid_page_key_error(mock_browser):
357359
mock_browser._connection_handler.execute_command.assert_called_with(
358360
TargetCommands.create_target(''), timeout=60
359361
)
362+
363+
@pytest.mark.parametrize('os_name, expected_browser_path', [
364+
('Windows', r'C:\Program Files\Google\Chrome\Application\chrome.exe'),
365+
('Linux', '/usr/bin/google-chrome'),
366+
('Darwin', '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome')
367+
])
368+
@patch('platform.system')
369+
@patch.object(BrowserOptionsManager, 'validate_browser_path')
370+
def test__get_default_binary_location(mock_validate_browser_path, mock_platform_system, os_name, expected_browser_path):
371+
mock_platform_system.return_value = os_name
372+
mock_validate_browser_path.return_value = expected_browser_path
373+
374+
path = Chrome._get_default_binary_location()
375+
mock_validate_browser_path.assert_called_once_with(expected_browser_path)
376+
377+
assert path == expected_browser_path
378+
379+
@patch('platform.system')
380+
def test__get_default_binary_location_throws_exception_if_os_not_supported(mock_platform_system):
381+
mock_platform_system.return_value = 'FreeBSD'
382+
383+
with pytest.raises(ValueError, match="Unsupported OS"):
384+
Chrome._get_default_binary_location()

0 commit comments

Comments
 (0)