diff --git a/.idea/misc.xml b/.idea/misc.xml
index c052579f90a0f..4ef08341dc293 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,7 +3,5 @@
-
-
-
+
\ No newline at end of file
diff --git a/py/python.iml b/py/python.iml
index 7e39384d0a360..238e0029909b4 100644
--- a/py/python.iml
+++ b/py/python.iml
@@ -25,4 +25,4 @@
-
\ No newline at end of file
+
diff --git a/py/selenium/webdriver/chromium/service.py b/py/selenium/webdriver/chromium/service.py
index ae7262d2fcc32..3330a84e4337b 100644
--- a/py/selenium/webdriver/chromium/service.py
+++ b/py/selenium/webdriver/chromium/service.py
@@ -35,15 +35,17 @@ def __init__(
self,
executable_path: str = None,
port: int = 0,
- service_args: typing.Optional[typing.List[str]] = None,
+ service_args: typing.Optional[typing.Sequence[str]] = None,
log_output: SubprocessStdAlias = None,
env: typing.Optional[typing.Mapping[str, str]] = None,
**kwargs,
) -> None:
- self.service_args = service_args or []
+ if service_args is None:
+ service_args = []
+ self.service_args = service_args
if isinstance(log_output, str):
- self.service_args.append(f"--log-path={log_output}")
+ self._service_args.append(f"--log-path={log_output}")
self.log_output = None
else:
self.log_output = log_output
@@ -56,5 +58,15 @@ def __init__(
**kwargs,
)
+ @property
+ def service_args(self):
+ return self._service_args
+
+ @service_args.setter
+ def service_args(self, value):
+ if not isinstance(value, typing.Sequence):
+ raise TypeError("service args must be a sequence")
+ self._service_args = value
+
def command_line_args(self) -> typing.List[str]:
- return [f"--port={self.port}"] + self.service_args
+ return [f"--port={self.port}"] + self._service_args
diff --git a/py/selenium/webdriver/edge/service.py b/py/selenium/webdriver/edge/service.py
index 881fc622784a3..30fd690113eb7 100644
--- a/py/selenium/webdriver/edge/service.py
+++ b/py/selenium/webdriver/edge/service.py
@@ -40,11 +40,13 @@ def __init__(
port: int = 0,
verbose: bool = False,
log_output: SubprocessStdAlias = None,
- service_args: typing.Optional[typing.List[str]] = None,
+ service_args: typing.Optional[typing.Sequence[str]] = None,
env: typing.Optional[typing.Mapping[str, str]] = None,
**kwargs,
) -> None:
- self.service_args = service_args or []
+ if service_args is None:
+ service_args = []
+ self.service_args = service_args
if verbose:
warnings.warn(
@@ -52,13 +54,22 @@ def __init__(
DeprecationWarning,
stacklevel=2,
)
- self.service_args.append("--verbose")
-
+ self._service_args.append("--verbose")
super().__init__(
executable_path=executable_path,
port=port,
- service_args=service_args,
+ service_args=self.service_args,
log_output=log_output,
env=env,
**kwargs,
)
+
+ @property
+ def service_args(self):
+ return self._service_args
+
+ @service_args.setter
+ def service_args(self, value):
+ if not isinstance(value, typing.Sequence):
+ raise TypeError("service args must be a sequence")
+ self._service_args = value
diff --git a/py/selenium/webdriver/firefox/service.py b/py/selenium/webdriver/firefox/service.py
index 506876aa908a1..732c986de9200 100644
--- a/py/selenium/webdriver/firefox/service.py
+++ b/py/selenium/webdriver/firefox/service.py
@@ -15,7 +15,6 @@
# specific language governing permissions and limitations
# under the License.
import typing
-from typing import List
from selenium.types import SubprocessStdAlias
from selenium.webdriver.common import service
@@ -37,12 +36,19 @@ def __init__(
self,
executable_path: str = None,
port: int = 0,
- service_args: typing.Optional[typing.List[str]] = None,
+ service_args: typing.Optional[typing.Sequence[str]] = None,
log_output: SubprocessStdAlias = None,
env: typing.Optional[typing.Mapping[str, str]] = None,
**kwargs,
) -> None:
- self.service_args = service_args or []
+ if service_args is None:
+ service_args = []
+ self.service_args = service_args
+
+ # Set a port for CDP
+ if "--connect-existing" not in self._service_args:
+ self._service_args.append("--websocket-port")
+ self._service_args.append(f"{utils.free_port()}")
super().__init__(
executable=executable_path,
@@ -52,10 +58,15 @@ def __init__(
**kwargs,
)
- # Set a port for CDP
- if "--connect-existing" not in self.service_args:
- self.service_args.append("--websocket-port")
- self.service_args.append(f"{utils.free_port()}")
+ @property
+ def service_args(self):
+ return self._service_args
+
+ @service_args.setter
+ def service_args(self, value):
+ if not isinstance(value, typing.Sequence):
+ raise TypeError("service args must be a sequence")
+ self._service_args = value
- def command_line_args(self) -> List[str]:
- return ["--port", f"{self.port}"] + self.service_args
+ def command_line_args(self) -> typing.List[str]:
+ return ["--port", f"{self.port}"] + self._service_args
diff --git a/py/selenium/webdriver/ie/service.py b/py/selenium/webdriver/ie/service.py
index 3713517d30ff3..da06d9658e905 100644
--- a/py/selenium/webdriver/ie/service.py
+++ b/py/selenium/webdriver/ie/service.py
@@ -15,7 +15,6 @@
# specific language governing permissions and limitations
# under the License.
import typing
-from typing import List
from selenium.types import SubprocessStdAlias
from selenium.webdriver.common import service
@@ -29,7 +28,7 @@ def __init__(
executable_path: str = None,
port: int = 0,
host: typing.Optional[str] = None,
- service_args: typing.Optional[typing.List[str]] = None,
+ service_args: typing.Optional[typing.Sequence[str]] = None,
log_level: typing.Optional[str] = None,
log_output: SubprocessStdAlias = None,
**kwargs,
@@ -45,12 +44,15 @@ def __init__(
- log_output: (Optional) int representation of STDOUT/DEVNULL, any IO instance or String path to file.
Default is "stdout".
"""
- self.service_args = service_args or []
+ if service_args is None:
+ service_args = []
+ self.service_args = service_args
+
if host:
- self.service_args.append(f"--host={host}")
- if log_level:
- self.service_args.append(f"--log-level={log_level}")
+ self._service_args.append(f"--host={host}")
+ if log_level:
+ self._service_args.append(f"--log-level={log_level}")
super().__init__(
executable_path,
port=port,
@@ -58,5 +60,15 @@ def __init__(
**kwargs,
)
- def command_line_args(self) -> List[str]:
- return [f"--port={self.port}"] + self.service_args
+ @property
+ def service_args(self):
+ return self._service_args
+
+ @service_args.setter
+ def service_args(self, value):
+ if not isinstance(value, typing.Sequence):
+ raise TypeError("Service args must be a sequence")
+ self._service_args = value
+
+ def command_line_args(self) -> typing.List[str]:
+ return [f"--port={self.port}"] + self._service_args
diff --git a/py/selenium/webdriver/safari/service.py b/py/selenium/webdriver/safari/service.py
index be6427960f37e..65a8625915f0b 100644
--- a/py/selenium/webdriver/safari/service.py
+++ b/py/selenium/webdriver/safari/service.py
@@ -37,16 +37,19 @@ def __init__(
executable_path: str = None,
port: int = 0,
quiet: bool = None,
- service_args: typing.Optional[typing.List[str]] = None,
+ service_args: typing.Optional[typing.Sequence[str]] = None,
env: typing.Optional[typing.Mapping[str, str]] = None,
reuse_service=False,
**kwargs,
) -> None:
- self.service_args = service_args or []
+ if service_args is None:
+ service_args = []
+ self.service_args = service_args
+
if quiet is not None:
warnings.warn("quiet is no longer needed to supress output", DeprecationWarning, stacklevel=2)
+ self.reuse_service = reuse_service
- self._reuse_service = reuse_service
super().__init__(
executable=executable_path,
port=port,
@@ -54,8 +57,15 @@ def __init__(
**kwargs,
)
- def command_line_args(self) -> typing.List[str]:
- return ["-p", f"{self.port}"] + self.service_args
+ @property
+ def service_args(self):
+ return self._service_args
+
+ @service_args.setter
+ def service_args(self, value):
+ if not isinstance(value, typing.Sequence):
+ raise TypeError("service args must be a sequence")
+ self._service_args = value
@property
def service_url(self) -> str:
@@ -71,3 +81,6 @@ def reuse_service(self, reuse: bool) -> None:
if not isinstance(reuse, bool):
raise TypeError("reuse must be a boolean")
self._reuse_service = reuse
+
+ def command_line_args(self) -> typing.List[str]:
+ return ["-p", f"{self.port}"] + self._service_args
diff --git a/py/selenium/webdriver/webkitgtk/service.py b/py/selenium/webdriver/webkitgtk/service.py
index 883fc0681b488..c96d363dbd51d 100644
--- a/py/selenium/webdriver/webkitgtk/service.py
+++ b/py/selenium/webdriver/webkitgtk/service.py
@@ -37,11 +37,14 @@ def __init__(
executable_path: str = DEFAULT_EXECUTABLE_PATH,
port: int = 0,
log_path: typing.Optional[str] = None,
- service_args: typing.Optional[typing.List[str]] = None,
+ service_args: typing.Optional[typing.Sequence[str]] = None,
env: typing.Optional[typing.Mapping[str, str]] = None,
**kwargs,
):
- self.service_args = service_args or []
+ if service_args is None:
+ service_args = []
+ self.service_args = service_args
+
log_file = open(log_path, "wb") if log_path else None
super().__init__(
executable=executable_path,
@@ -51,5 +54,15 @@ def __init__(
**kwargs,
) # type: ignore
+ @property
+ def service_args(self):
+ return self._service_args
+
+ @service_args.setter
+ def service_args(self, value):
+ if not isinstance(value, typing.Sequence):
+ raise TypeError("service args must be a sequence")
+ self._service_args = value
+
def command_line_args(self) -> typing.List[str]:
- return ["-p", f"{self.port}"] + self.service_args
+ return ["-p", f"{self.port}"] + self._service_args
diff --git a/py/selenium/webdriver/wpewebkit/service.py b/py/selenium/webdriver/wpewebkit/service.py
index 4dbb35a490e75..484dfcfd4a8a0 100644
--- a/py/selenium/webdriver/wpewebkit/service.py
+++ b/py/selenium/webdriver/wpewebkit/service.py
@@ -37,11 +37,14 @@ def __init__(
executable_path: str = DEFAULT_EXECUTABLE_PATH,
port: int = 0,
log_path: typing.Optional[str] = None,
- service_args: typing.Optional[typing.List[str]] = None,
+ service_args: typing.Optional[typing.Sequence[str]] = None,
env: typing.Optional[typing.Mapping[str, str]] = None,
**kwargs,
):
- self.service_args = service_args or []
+ if service_args is None:
+ service_args = []
+ self.service_args = service_args
+
log_file = open(log_path, "wb") if log_path else None
super().__init__(
executable=executable_path,
@@ -51,5 +54,15 @@ def __init__(
**kwargs,
) # type: ignore
+ @property
+ def service_args(self):
+ return self._service_args
+
+ @service_args.setter
+ def service_args(self, value):
+ if not isinstance(value, typing.Sequence):
+ raise TypeError("service args must be a sequence")
+ self._service_args = value
+
def command_line_args(self) -> typing.List[str]:
- return ["-p", f"{self.port}"] + self.service_args
+ return ["-p", f"{self.port}"] + self._service_args