Unverified Commit 5b5f224b authored by mvdbeek's avatar mvdbeek
Browse files

Port to non-deprecated selenium options

Should be compatible with new and old selenium package.
The last release on PyPI removed some deprecated interfaces,
which fails our packaging tests.
parent 9fcfedac
Loading
Loading
Loading
Loading
+27 −21
Original line number Diff line number Diff line
import logging
import os
from typing import Union

try:
    from pyvirtualdisplay import Display
@@ -8,7 +9,6 @@ except ImportError:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options as ChromeOptions
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.remote.webdriver import WebDriver

logger = logging.getLogger("selenium.webdriver.remote.remote_connection")
@@ -90,36 +90,42 @@ def get_local_driver(browser=DEFAULT_BROWSER, headless=False) -> WebDriver:
    }
    driver_class = driver_to_class[browser]
    if browser == "CHROME":
        options = ChromeOptions()
        chrome_options = ChromeOptions()
        if headless:
            options.add_argument("--headless")
            chrome_options.add_argument("--headless")
        prefs = {"download.default_directory": DEFAULT_DOWNLOAD_PATH}
        options.add_experimental_option("prefs", prefs)
        return driver_class(desired_capabilities={"loggingPrefs": LOGGING_PREFS}, chrome_options=options)
    elif browser == "FIREFOX":
        fp = webdriver.FirefoxProfile()
        fp.set_preference("network.proxy.type", 2)
        fp.set_preference("network.proxy.autoconfig_url", "http://127.0.0.1:9675")
        fp.set_preference("browser.download.folderList", 2)
        fp.set_preference("browser.download.dir", DEFAULT_DOWNLOAD_PATH)
        fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream")
        return driver_class(firefox_profile=fp)

        chrome_options.add_experimental_option("prefs", prefs)
        chrome_options.set_capability("goog:loggingPrefs", LOGGING_PREFS)
        return driver_class(options=chrome_options)
    else:
        return driver_class(desired_capabilities={"loggingPrefs": LOGGING_PREFS})
        firefox_options = webdriver.FirefoxOptions()
        firefox_options.set_preference("network.proxy.type", 2)
        firefox_options.set_preference("network.proxy.autoconfig_url", "http://127.0.0.1:9675")
        firefox_options.set_preference("browser.download.folderList", 2)
        firefox_options.set_preference("browser.download.dir", DEFAULT_DOWNLOAD_PATH)
        firefox_options.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream")
        return driver_class(options=firefox_options)


def get_remote_driver(host, port, browser=DEFAULT_BROWSER) -> WebDriver:
    # docker run -d -p 4444:4444 -v /dev/shm:/dev/shm selenium/standalone-chrome:3.0.1-aluminum
    if browser == "auto":
        browser = "CHROME"
    assert browser in ["CHROME", "EDGE", "ANDROID", "FIREFOX", "INTERNETEXPLORER", "IPAD", "IPHONE", "SAFARI"]
    desired_capabilities = getattr(DesiredCapabilities, browser)
    desired_capabilities["loggingPrefs"] = LOGGING_PREFS
    options: Union[webdriver.ChromeOptions, webdriver.FirefoxOptions, webdriver.EdgeOptions, None] = None
    if browser == "auto" or browser == "CHROME":
        options = webdriver.ChromeOptions()
    elif browser == "FIREFOX":
        options = webdriver.FirefoxOptions()
    elif browser == "EDGE":
        options = webdriver.EdgeOptions()
    elif browser == "SAFARI":
        pass
    else:
        raise Exception(f"Browser '{browser}' not supported.")
    if options:
        options.set_capability("goog:loggingPrefs", LOGGING_PREFS)
    executor = f"http://{host}:{port}/wd/hub"
    driver = webdriver.Remote(
        command_executor=executor,
        desired_capabilities=desired_capabilities,
        options=options,
    )
    return driver