Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 2 additions & 26 deletions py/selenium/webdriver/chromium/webdriver.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@
from selenium.webdriver.chromium.remote_connection import ChromiumRemoteConnection
from selenium.webdriver.chromium.service import ChromiumService
from selenium.webdriver.common.driver_finder import DriverFinder
from selenium.webdriver.common.webdriver import LocalWebDriver
from selenium.webdriver.remote.command import Command
from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver


class ChromiumDriver(RemoteWebDriver):
class ChromiumDriver(LocalWebDriver):
"""Control the WebDriver instance of ChromiumDriver and drive the browser."""

def __init__(
Expand Down Expand Up @@ -69,8 +69,6 @@ def __init__(
self.quit()
raise

self._is_remote = False

def launch_app(self, id):
"""Launches Chromium app specified by id.

Expand Down Expand Up @@ -206,25 +204,3 @@ def stop_casting(self, sink_name: str) -> dict:
sink_name: Name of the sink to stop the Cast session.
"""
return self.execute("stopCasting", {"sinkName": sink_name})

def quit(self) -> None:
"""Closes the browser and shuts down the ChromiumDriver executable."""
try:
super().quit()
except Exception:
# We don't care about the message because something probably has gone wrong
pass
finally:
self.service.stop()

def download_file(self, *args, **kwargs):
"""Download file functionality is not implemented for Chromium driver."""
raise NotImplementedError

def get_downloadable_files(self, *args, **kwargs):
"""Get downloadable files functionality is not implemented for Chromium driver."""
raise NotImplementedError

def delete_downloadable_files(self, *args, **kwargs):
"""Delete downloadable files functionality is not implemented for Chromium driver."""
raise NotImplementedError
54 changes: 54 additions & 0 deletions py/selenium/webdriver/common/webdriver.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Licensed to the Software Freedom Conservancy (SFC) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The SFC licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.


from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver


class LocalWebDriver(RemoteWebDriver):
"""Base class for local WebDrivers."""

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._is_remote = False

def __new__(cls, *args, **kwargs):
if cls is LocalWebDriver:
raise TypeError(f"Only children of '{cls.__name__}' may be instantiated")
return object.__new__(cls)

def quit(self) -> None:
"""Closes the browser and shuts down the driver executable."""
try:
super().quit()
except Exception:
# We don't care about the message because something probably has gone wrong
pass
finally:
self.service.stop()

def download_file(self, *args, **kwargs):
"""Only implemented in RemoteWebDriver."""
raise NotImplementedError

def get_downloadable_files(self, *args, **kwargs):
"""Only implemented in RemoteWebDriver."""
raise NotImplementedError

def delete_downloadable_files(self, *args, **kwargs):
"""Only implemented in RemoteWebDriver."""
raise NotImplementedError
30 changes: 4 additions & 26 deletions py/selenium/webdriver/firefox/webdriver.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.


import base64
import os
import warnings
Expand All @@ -22,13 +24,13 @@
from io import BytesIO

from selenium.webdriver.common.driver_finder import DriverFinder
from selenium.webdriver.common.webdriver import LocalWebDriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.remote_connection import FirefoxRemoteConnection
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver


class WebDriver(RemoteWebDriver):
class WebDriver(LocalWebDriver):
"""Controls the GeckoDriver and allows you to drive the browser."""

CONTEXT_CHROME = "chrome"
Expand Down Expand Up @@ -70,18 +72,6 @@ def __init__(
self.quit()
raise

self._is_remote = False

def quit(self) -> None:
"""Closes the browser and shuts down the GeckoDriver executable."""
try:
super().quit()
except Exception:
# We don't care about the message because something probably has gone wrong
pass
finally:
self.service.stop()

def set_context(self, context) -> None:
"""Sets the context that Selenium commands are running in.

Expand Down Expand Up @@ -223,15 +213,3 @@ def get_full_page_screenshot_as_base64(self) -> str:
driver.get_full_page_screenshot_as_base64()
"""
return self.execute("FULL_PAGE_SCREENSHOT")["value"]

def download_file(self, *args, **kwargs):
"""Download file functionality is not implemented for Firefox driver."""
raise NotImplementedError

def get_downloadable_files(self, *args, **kwargs):
"""Get downloadable files functionality is not implemented for Firefox driver."""
raise NotImplementedError

def delete_downloadable_files(self, *args, **kwargs):
"""Delete downloadable files functionality is not implemented for Firefox driver."""
raise NotImplementedError
25 changes: 2 additions & 23 deletions py/selenium/webdriver/ie/webdriver.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@


from selenium.webdriver.common.driver_finder import DriverFinder
from selenium.webdriver.common.webdriver import LocalWebDriver
from selenium.webdriver.ie.options import Options
from selenium.webdriver.ie.service import Service
from selenium.webdriver.remote.client_config import ClientConfig
from selenium.webdriver.remote.remote_connection import RemoteConnection
from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver


class WebDriver(RemoteWebDriver):
class WebDriver(LocalWebDriver):
"""Control the IEServerDriver and drive Internet Explorer."""

def __init__(
Expand Down Expand Up @@ -59,24 +59,3 @@ def __init__(
except Exception:
self.quit()
raise

self._is_remote = False

def quit(self) -> None:
"""Closes the browser and shuts down the IEServerDriver executable."""
try:
super().quit()
except Exception:
# We don't care about the message because something probably has gone wrong
pass
finally:
self.service.stop()

def download_file(self, *args, **kwargs):
raise NotImplementedError

def get_downloadable_files(self, *args, **kwargs):
raise NotImplementedError

def delete_downloadable_files(self, *args, **kwargs):
raise NotImplementedError
15 changes: 2 additions & 13 deletions py/selenium/webdriver/safari/webdriver.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@

from selenium.common.exceptions import WebDriverException
from selenium.webdriver.common.driver_finder import DriverFinder
from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver
from selenium.webdriver.common.webdriver import LocalWebDriver
from selenium.webdriver.safari.options import Options
from selenium.webdriver.safari.remote_connection import SafariRemoteConnection
from selenium.webdriver.safari.service import Service


class WebDriver(RemoteWebDriver):
class WebDriver(LocalWebDriver):
"""Controls the SafariDriver and allows you to drive the browser."""

def __init__(
Expand Down Expand Up @@ -61,8 +61,6 @@ def __init__(
self.quit()
raise

self._is_remote = False

def quit(self):
"""Closes the browser and shuts down the SafariDriver executable."""
try:
Expand Down Expand Up @@ -105,12 +103,3 @@ def get_permission(self, permission):
def debug(self):
self.execute("ATTACH_DEBUGGER")
self.execute_script("debugger;")

def download_file(self, *args, **kwargs):
raise NotImplementedError

def get_downloadable_files(self, *args, **kwargs):
raise NotImplementedError

def delete_downloadable_files(self, *args, **kwargs):
raise NotImplementedError
24 changes: 2 additions & 22 deletions py/selenium/webdriver/webkitgtk/webdriver.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,14 @@
# specific language governing permissions and limitations
# under the License.

import http.client as http_client

from selenium.webdriver.common.driver_finder import DriverFinder
from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver
from selenium.webdriver.common.webdriver import LocalWebDriver
from selenium.webdriver.webkitgtk.options import Options
from selenium.webdriver.webkitgtk.service import Service


class WebDriver(RemoteWebDriver):
class WebDriver(LocalWebDriver):
"""Controls the WebKitGTKDriver and allows you to drive the browser."""

def __init__(
Expand All @@ -45,22 +44,3 @@ def __init__(
self.service.start()

super().__init__(command_executor=self.service.service_url, options=options)
self._is_remote = False

def quit(self):
"""Close the browser and shut down the WebKitGTK driver executable."""
try:
super().quit()
except http_client.BadStatusLine:
pass
finally:
self.service.stop()

def download_file(self, *args, **kwargs):
raise NotImplementedError

def get_downloadable_files(self, *args, **kwargs):
raise NotImplementedError

def delete_downloadable_files(self, *args, **kwargs):
raise NotImplementedError
24 changes: 2 additions & 22 deletions py/selenium/webdriver/wpewebkit/webdriver.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,14 @@
# specific language governing permissions and limitations
# under the License.

import http.client as http_client

from selenium.webdriver.common.driver_finder import DriverFinder
from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver
from selenium.webdriver.common.webdriver import LocalWebDriver
from selenium.webdriver.wpewebkit.options import Options
from selenium.webdriver.wpewebkit.service import Service


class WebDriver(RemoteWebDriver):
class WebDriver(LocalWebDriver):
"""Controls the WPEWebKitDriver and allows you to drive the browser."""

def __init__(
Expand All @@ -45,22 +44,3 @@ def __init__(
self.service.start()

super().__init__(command_executor=self.service.service_url, options=options)
self._is_remote = False

def quit(self):
"""Close the browser and shut down the WPEWebKit driver executable."""
try:
super().quit()
except http_client.BadStatusLine:
pass
finally:
self.service.stop()

def download_file(self, *args, **kwargs):
raise NotImplementedError

def get_downloadable_files(self, *args, **kwargs):
raise NotImplementedError

def delete_downloadable_files(self, *args, **kwargs):
raise NotImplementedError