Unverified Commit a5ab850a authored by Marius van den Beek's avatar Marius van den Beek Committed by GitHub
Browse files

Merge pull request #16215 from mvdbeek/avoid_deprecated_selenium_options

[23.0] Port selenium setup to non-deprecated selenium options
parents b2138ea3 370a90d0
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,8 +9,8 @@ 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
from selenium.webdriver.safari.options import Options as SafariOptions

logger = logging.getLogger("selenium.webdriver.remote.remote_connection")
logger.setLevel(logging.WARNING)
@@ -90,36 +91,41 @@ 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, SafariOptions]
    if browser == "auto" or browser == "CHROME":
        options = webdriver.ChromeOptions()
        options.set_capability("goog:loggingPrefs", LOGGING_PREFS)
    elif browser == "FIREFOX":
        options = webdriver.FirefoxOptions()
    elif browser == "EDGE":
        options = webdriver.EdgeOptions()
    elif browser == "SAFARI":
        options = SafariOptions()
    else:
        raise Exception(f"Browser '{browser}' not supported.")
    executor = f"http://{host}:{port}/wd/hub"
    driver = webdriver.Remote(
        command_executor=executor,
        desired_capabilities=desired_capabilities,
        options=options,
    )
    return driver