Adds parameters to chromedriver wrapper.
Adds url base parameter so that the wrapper can start an instance of
chromedriver serving a nondefault url base (e.g. /wd/hub).
Adds parameter for extra arguments to be forwarded to the chromedriver
binary.
BUG=chromium:501600
TEST=run locally
Change-Id: I18b2669fc88d6692608f6ff17b70a0df61730e7b
Reviewed-on: https://chromium-review.googlesource.com/278214
Reviewed-by: Dan Shi <dshi@chromium.org>
Reviewed-by: David Abrahams <resetswitch@chromium.org>
Reviewed-by: Payton Turnage <turnage@chromium.org>
Commit-Queue: Payton Turnage <turnage@chromium.org>
Tested-by: Payton Turnage <turnage@chromium.org>
diff --git a/client/common_lib/cros/chromedriver.py b/client/common_lib/cros/chromedriver.py
index 0ed832d..a43453c 100644
--- a/client/common_lib/cros/chromedriver.py
+++ b/client/common_lib/cros/chromedriver.py
@@ -6,6 +6,7 @@
import logging
import os
import urllib2
+import urlparse
try:
from selenium import webdriver
@@ -28,8 +29,8 @@
def __init__(self, extra_chrome_flags=[], subtract_extra_chrome_flags=[],
extension_paths=[], is_component=True, username=None,
- password=None, server_port=None, skip_cleanup=False, *args,
- **kwargs):
+ password=None, server_port=None, skip_cleanup=False,
+ url_base=None, extra_chromedriver_args=None, *args, **kwargs):
"""Initialize.
@param extra_chrome_flags: Extra chrome flags to pass to chrome, if any.
@@ -45,6 +46,9 @@
@param skip_cleanup: If True, leave the server and browser running
so that remote tests can run after this script
ends. Default is False.
+ @param url_base: Optional base url for chromedriver.
+ @param extra_chromedriver_args: List of extra arguments to forward to
+ the chromedriver binary, if any.
"""
self._cleanup = not skip_cleanup
assert os.geteuid() == 0, 'Need superuser privileges'
@@ -63,7 +67,9 @@
# Start ChromeDriver server
self._server = chromedriver_server(CHROMEDRIVER_EXE_PATH,
port=server_port,
- skip_cleanup=skip_cleanup)
+ skip_cleanup=skip_cleanup,
+ url_base=url_base,
+ extra_args=extra_chromedriver_args)
# Open a new tab using Chrome remote debugging. ChromeDriver expects
# a tab opened for remote to work. Tabs opened using Telemetry will be
@@ -123,7 +129,8 @@
src/chrome/test/chromedriver/server/server.py
"""
- def __init__(self, exe_path, port=None, skip_cleanup=False):
+ def __init__(self, exe_path, port=None, skip_cleanup=False,
+ url_base=None, extra_args=None):
"""Starts the ChromeDriver server and waits for it to be ready.
Args:
@@ -132,6 +139,9 @@
skip_cleanup: If True, leave the server running so that remote
tests can run after this script ends. Default is
False.
+ url_base: Optional base url for chromedriver.
+ extra_args: List of extra arguments to forward to the chromedriver
+ binary, if any.
Raises:
RuntimeError if ChromeDriver fails to start
"""
@@ -146,6 +156,14 @@
port = utils.get_unused_port()
chromedriver_args.append('--port=%d' % port)
+ self.url = 'http://localhost:%d' % port
+ if url_base:
+ chromedriver_args.append('--url-base=%s' % url_base)
+ self.url = urlparse.urljoin(self.url, url_base)
+
+ if extra_args:
+ chromedriver_args.extend(extra_args)
+
# TODO(ihf): Remove references to X after M45.
# Chromedriver will look for an X server running on the display
# specified through the DISPLAY environment variable.
@@ -153,7 +171,6 @@
os.environ['XAUTHORITY'] = X_AUTHORITY
self.bg_job = utils.BgJob(chromedriver_args, stderr_level=logging.DEBUG)
- self.url = 'http://localhost:%d' % port
if self.bg_job is None:
raise RuntimeError('ChromeDriver server cannot be started')