Skip to content
Closed
4 changes: 1 addition & 3 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion py/python.iml
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,4 @@
<option name="useAlternativeWorkingDir" value="false" />
<option name="workingDirSelection" value="&lt;MODULE&gt;" />
</component>
</module>
</module>
20 changes: 16 additions & 4 deletions py/selenium/webdriver/chromium/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -56,5 +58,15 @@ def __init__(
**kwargs,
)

@property
def service_args(self):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

be nice to add typing to things we are adding, feel free to ignore tho as theres plenty of general typing work to do

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@symonk thanks for your review comments. I have updated the code.

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
21 changes: 16 additions & 5 deletions py/selenium/webdriver/edge/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,25 +40,36 @@ 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(
"verbose=True is deprecated. Use `service_args=['--verbose', ...]` instead.",
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
29 changes: 20 additions & 9 deletions py/selenium/webdriver/firefox/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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,
Expand All @@ -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
28 changes: 20 additions & 8 deletions py/selenium/webdriver/ie/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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,
Expand All @@ -45,18 +44,31 @@ 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,
log_output=log_output,
**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
23 changes: 18 additions & 5 deletions py/selenium/webdriver/safari/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,25 +37,35 @@ 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,
env=env,
**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:
Expand All @@ -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
19 changes: 16 additions & 3 deletions py/selenium/webdriver/webkitgtk/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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
19 changes: 16 additions & 3 deletions py/selenium/webdriver/wpewebkit/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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