Skip to content

Commit

Permalink
[py]: start of bringing firefox.service inline with other services
Browse files Browse the repository at this point in the history
  • Loading branch information
symonk committed Oct 5, 2022
1 parent f442a7e commit 7dbd3a3
Showing 1 changed file with 19 additions and 34 deletions.
53 changes: 19 additions & 34 deletions py/selenium/webdriver/firefox/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

import typing
from typing import List

from selenium.webdriver.common import service
Expand All @@ -24,50 +24,35 @@


class Service(service.Service):
"""Object that manages the starting and stopping of the
GeckoDriver."""
"""A Service class that is responsible for the starting and stopping
of `geckodriver`.
:param executable_path: install path of the geckodriver executable, defaults to `geckodriver`.
:param port: Port for the service to run on, defaults to 0 where the operating system will decide.
:param service_args: (Optional) Sequence of args to be passed to the subprocess when launching the executable.
:param log_path: (Optional) File path for the file to be opened and passed as the subprocess stdout/stderr handler,
defaults to `geckodriver.log`.
:param env: (Optional) Mapping of environment variables for the new process, defaults to `os.environ`.
"""

def __init__(
self,
executable_path: str = DEFAULT_EXECUTABLE_PATH,
port: int = 0,
service_args: List[str] = None,
log_path: str = "geckodriver.log",
env: dict = None,
service_args: typing.Optional[typing.List[str]] = None,
log_path: typing.Optional[str] = None,
env: typing.Optional[typing.Mapping[str, str]] = None,
):
"""Creates a new instance of the GeckoDriver remote service proxy.
GeckoDriver provides a HTTP interface speaking the W3C WebDriver
protocol to Marionette.
:param executable_path: Path to the GeckoDriver binary.
:param port: Run the remote service on a specified port.
Defaults to 0, which binds to a random open port of the
system's choosing.
:param service_args: Optional list of arguments to pass to the
GeckoDriver binary.
:param log_path: Optional path for the GeckoDriver to log to.
Defaults to _geckodriver.log_ in the current working directory.
:param env: Optional dictionary of output variables to expose
in the services' environment.
"""
log_file = open(log_path, "a+", encoding="utf-8") if log_path else None

super().__init__(executable_path, port=port, log_file=log_file, env=env)
# Todo: This is vastly inconsistent, requires a follow up to standardise.
file = log_path or "geckodriver.log"
log_file = open(file, "a+", encoding="utf-8")
self.service_args = service_args or []
super().__init__(executable_path, port=port, log_file=log_file, env=env)

# 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()}")

# Set the webdriver port
self.service_args.append("--port")
self.service_args.append(f"{self.port}")

def command_line_args(self) -> List[str]:
return self.service_args

def send_remote_shutdown_command(self):
pass
return ["--port", f"{self.port}"] + self.service_args

0 comments on commit 7dbd3a3

Please sign in to comment.