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