Skip to content

Commit 9ee46c7

Browse files
committed
move to chromium/options.py to support Edge
1 parent c88cc84 commit 9ee46c7

File tree

5 files changed

+40
-44
lines changed

5 files changed

+40
-44
lines changed

py/conftest.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,8 +237,8 @@ def get_options(driver_class, config):
237237
options.web_socket_url = True
238238
options.unhandled_prompt_behavior = "ignore"
239239

240-
# Enable webextensions for Chrome when BiDi is enabled
241-
if driver_class == "Chrome" and hasattr(options, "enable_webextensions"):
240+
# Enable webextensions for Chromium-based browsers when BiDi is enabled
241+
if driver_class in ("Chrome", "Edge") and hasattr(options, "enable_webextensions"):
242242
options.enable_webextensions = True
243243

244244
return options

py/selenium/webdriver/chrome/options.py

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -22,47 +22,10 @@
2222

2323

2424
class Options(ChromiumOptions):
25-
def __init__(self) -> None:
26-
super().__init__()
27-
self._enable_webextensions = False
28-
2925
@property
3026
def default_capabilities(self) -> dict:
3127
return DesiredCapabilities.CHROME.copy()
3228

33-
@property
34-
def enable_webextensions(self) -> bool:
35-
"""Returns whether webextension support is enabled for Chrome.
36-
37-
:Returns: True if webextension support is enabled, False otherwise.
38-
"""
39-
return self._enable_webextensions
40-
41-
@enable_webextensions.setter
42-
def enable_webextensions(self, value: bool) -> None:
43-
"""Enables or disables webextension support for Chrome.
44-
45-
When enabled, this automatically adds the required Chrome flags:
46-
- --enable-unsafe-extension-debugging
47-
- --remote-debugging-pipe
48-
49-
:Args:
50-
- value: True to enable webextension support, False to disable.
51-
"""
52-
self._enable_webextensions = value
53-
if value:
54-
# Add required flags for Chrome webextension support
55-
required_flags = ["--enable-unsafe-extension-debugging", "--remote-debugging-pipe"]
56-
for flag in required_flags:
57-
if flag not in self._arguments:
58-
self.add_argument(flag)
59-
else:
60-
# Remove webextension flags if disabling
61-
flags_to_remove = ["--enable-unsafe-extension-debugging", "--remote-debugging-pipe"]
62-
for flag in flags_to_remove:
63-
if flag in self._arguments:
64-
self._arguments.remove(flag)
65-
6629
def enable_mobile(
6730
self,
6831
android_package: Optional[str] = "com.android.chrome",

py/selenium/webdriver/chromium/options.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ def __init__(self) -> None:
3333
self._extensions: List[str] = []
3434
self._experimental_options: Dict[str, Union[str, int, dict, List[str]]] = {}
3535
self._debugger_address: Optional[str] = None
36+
self._enable_webextensions: bool = False
3637

3738
@property
3839
def binary_location(self) -> str:
@@ -126,6 +127,39 @@ def add_experimental_option(self, name: str, value: Union[str, int, dict, List[s
126127
"""
127128
self._experimental_options[name] = value
128129

130+
@property
131+
def enable_webextensions(self) -> bool:
132+
"""Returns whether webextension support is enabled for Chromium-based browsers.
133+
134+
:Returns: True if webextension support is enabled, False otherwise.
135+
"""
136+
return self._enable_webextensions
137+
138+
@enable_webextensions.setter
139+
def enable_webextensions(self, value: bool) -> None:
140+
"""Enables or disables webextension support for Chromium-based browsers.
141+
142+
When enabled, this automatically adds the required Chromium flags:
143+
- --enable-unsafe-extension-debugging
144+
- --remote-debugging-pipe
145+
146+
:Args:
147+
- value: True to enable webextension support, False to disable.
148+
"""
149+
self._enable_webextensions = value
150+
if value:
151+
# Add required flags for Chromium webextension support
152+
required_flags = ["--enable-unsafe-extension-debugging", "--remote-debugging-pipe"]
153+
for flag in required_flags:
154+
if flag not in self._arguments:
155+
self.add_argument(flag)
156+
else:
157+
# Remove webextension flags if disabling
158+
flags_to_remove = ["--enable-unsafe-extension-debugging", "--remote-debugging-pipe"]
159+
for flag in flags_to_remove:
160+
if flag in self._arguments:
161+
self._arguments.remove(flag)
162+
129163
def to_capabilities(self) -> dict:
130164
"""Creates a capabilities with all the options that have been set
131165
:Returns: A dictionary with everything."""

py/selenium/webdriver/common/bidi/webextension.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def install(self, path=None, archive_path=None, base64_value=None) -> Dict:
6262
except WebDriverException as e:
6363
if "Method not available" in str(e):
6464
raise WebDriverException(
65-
f"{str(e)}. If you are using Chrome, add '--enable-unsafe-extension-debugging' "
65+
f"{str(e)}. If you are using Chrome or Edge, add '--enable-unsafe-extension-debugging' "
6666
"and '--remote-debugging-pipe' arguments or set options.enable_webextensions = True"
6767
) from e
6868
raise

py/test/selenium/webdriver/common/bidi_webextension_tests.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,10 @@ def test_webextension_initialized(driver):
6060
assert driver.webextension is not None
6161

6262

63-
@pytest.mark.xfail_edge
6463
def test_install_extension_path(driver, pages):
6564
"""Test installing an extension from a directory path.
6665
67-
Note: For Chrome, webextensions are enabled when BiDi is used from conftest.py for this test.
66+
Note: For Chrome adn Edge, webextensions are enabled when BiDi is used from conftest.py for this test.
6867
You can also manually enable them using:
6968
7069
from selenium.webdriver.chrome.options import Options
@@ -85,8 +84,8 @@ def test_install_extension_path(driver, pages):
8584
"""
8685
path = os.path.join(extensions, EXTENSION_PATH)
8786

88-
if driver.capabilities["browserName"].lower() == "chrome":
89-
# chrome does not uses extension id from manifest.json so we cannot assert the id
87+
if driver.capabilities["browserName"].lower() in ["chrome", "microsoftedge"]:
88+
# chrome/edge does not uses extension id from manifest.json so we cannot assert the id
9089
ext_info = driver.webextension.install(path=path)
9190
else:
9291
ext_info = install_extension(driver, path=path)

0 commit comments

Comments
 (0)