Selenium: Inconsistent log path parameters for webdrivers

Created on 3 Apr 2018  路  5Comments  路  Source: SeleniumHQ/selenium

OS: OSX
Selenium Version: 3.11.0
Browser: FireFox 58.0.2, Chrome 65, Safari, Opera, Edge
Browser Version: See above

Accepted Webdriver parameters for logging should be consistent. Right now, some webdriver declaration requires log_path and some require service_log_path. Because of this I need to create If/Else blocks for each type of logging parameters. See below:

Example (Using Splinter and Behave)

@fixture
def splinter_browser(context):
    if context.default_browser == 'firefox':
        if context.headless:
            context.browser = Browser(context.default_browser, headless=True, log_path=os.devnull)
        else:
            context.browser = Browser(context.default_browser, headless=False, log_path=os.devnull)
    elif context.default_browser == 'chrome':
        if context.headless:
            context.browser = Browser(context.default_browser, headless=True, service_log_path=os.devnull)
        else:
            context.browser = Browser(context.default_browser, headless=False, service_log_path=os.devnull)
    yield context.browser
    context.browser.quit()

Affected webdriver files

webkitgtk/webdriver.py

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

    def __init__(self, executable_path="WebKitWebDriver", port=0, options=None,
                 desired_capabilities=DesiredCapabilities.WEBKITGTK,
                 service_log_path=None):

chrome/webdriver.py

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

    You will need to download the ChromeDriver executable from
    http://chromedriver.storage.googleapis.com/index.html
    """

    def __init__(self, executable_path="chromedriver", port=0,
                 options=None, service_args=None,
                 desired_capabilities=None, service_log_path=None,
                 chrome_options=None):

opera/webdriver.py

class OperaDriver(ChromiumDriver):
    """Controls the new OperaDriver and allows you
    to drive the Opera browser based on Chromium."""

    def __init__(self, executable_path=None, port=0,
                 options=None, service_args=None,
                 desired_capabilities=None, service_log_path=None,
                 opera_options=None):

firefox/webdriver.py

class WebDriver(RemoteWebDriver):

    # There is no native event support on Mac
    NATIVE_EVENTS_ALLOWED = sys.platform != "darwin"

    CONTEXT_CHROME = "chrome"
    CONTEXT_CONTENT = "content"

    _web_element_cls = FirefoxWebElement

    def __init__(self, firefox_profile=None, firefox_binary=None,
                 timeout=30, capabilities=None, proxy=None,
                 executable_path="geckodriver", options=None,
                 log_path="geckodriver.log", firefox_options=None,
                 service_args=None):

edge/webdriver.py

class WebDriver(RemoteWebDriver):

    def __init__(self, executable_path='MicrosoftWebDriver.exe',
                 capabilities=None, port=0, verbose=False, log_path=None):
C-py

Most helpful comment

Yes, we should. 馃槃

All 5 comments

I agree we should make these consistent. @Dude-X ? :smile:

Yes, we should. 馃槃

@lmtierney @Dude-X I could perhaps take this one if you can clarify the specs a bit.

  • log_path is the desired arg name?
  • Is it ok to make backwards compatibility breaking change directly or do you prefer going through some deprecation warning phase?

@jerry-git service_log_path would make more sense as it's the log path for the service and we're passing this to the webdriver. We need to preserve backward compatibility with a warning similar to when we normalized the options parameter https://github.com/SeleniumHQ/selenium/commit/fa164f6dfbb7ad70dca5191cfac6a50432e342a0

Thanks for the clarifications @lmtierney! There's a trial in #5979.

Was this page helpful?
0 / 5 - 0 ratings