Chromedriver remote test support
My team is writing remote webdriver tests for ChromeOS. This
requires two changes to the local chromedriver server script:
*Allowing remote connections
*Leaving the server running after the script completes
BUG=None
TEST=Started server on vm guest, ran webdriver tests from vm host.
Change-Id: I8d1562ca59ec6ad4fe5916f263630c705cfcfcff
Reviewed-on: https://chromium-review.googlesource.com/272535
Reviewed-by: Dan Shi <dshi@chromium.org>
Reviewed-by: David Abrahams <resetswitch@chromium.org>
Trybot-Ready: David Abrahams <resetswitch@chromium.org>
Commit-Queue: David Abrahams <resetswitch@chromium.org>
Tested-by: David Abrahams <resetswitch@chromium.org>
diff --git a/client/common_lib/cros/chromedriver.py b/client/common_lib/cros/chromedriver.py
index 404c444..2a3808c 100644
--- a/client/common_lib/cros/chromedriver.py
+++ b/client/common_lib/cros/chromedriver.py
@@ -28,7 +28,8 @@
def __init__(self, extra_chrome_flags=[], subtract_extra_chrome_flags=[],
extension_paths=[], is_component=True, username=None,
- password=None, server_port=None, *args, **kwargs):
+ password=None, server_port=None, skip_cleanup=False, *args,
+ **kwargs):
"""Initialize.
@param extra_chrome_flags: Extra chrome flags to pass to chrome, if any.
@@ -41,7 +42,11 @@
@param password: Log in using this password instead of the default.
@param server_port: Port number for the chromedriver server. If None,
an available port is chosen at random.
+ @param skip_cleanup: If True, leave the server and browser running
+ so that remote tests can run after this script
+ ends. Default is False.
"""
+ self._cleanup = not skip_cleanup
assert os.geteuid() == 0, 'Need superuser privileges'
# Log in with telemetry
@@ -57,7 +62,8 @@
# Start ChromeDriver server
self._server = chromedriver_server(CHROMEDRIVER_EXE_PATH,
- port=server_port)
+ port=server_port,
+ skip_cleanup=skip_cleanup)
# Open a new tab using Chrome remote debugging. ChromeDriver expects
# a tab opened for remote to work. Tabs opened using Telemetry will be
@@ -90,13 +96,14 @@
self.driver.close()
del self.driver
- if hasattr(self, '_server') and self._server:
- self._server.close()
- del self._server
+ if not hasattr(self, '_cleanup') or self._cleanup:
+ if hasattr(self, '_server') and self._server:
+ self._server.close()
+ del self._server
- if hasattr(self, '_browser') and self._browser:
- self._browser.Close()
- del self._browser
+ if hasattr(self, '_browser') and self._browser:
+ self._browser.Close()
+ del self._browser
def get_extension(self, extension_path):
@@ -116,21 +123,28 @@
src/chrome/test/chromedriver/server/server.py
"""
- def __init__(self, exe_path, port=None):
+ def __init__(self, exe_path, port=None, skip_cleanup=False):
"""Starts the ChromeDriver server and waits for it to be ready.
Args:
exe_path: path to the ChromeDriver executable
port: server port. If None, an available port is chosen at random.
+ skip_cleanup: If True, leave the server running so that remote
+ tests can run after this script ends. Default is
+ False.
Raises:
RuntimeError if ChromeDriver fails to start
"""
if not os.path.exists(exe_path):
raise RuntimeError('ChromeDriver exe not found at: ' + exe_path)
- if not port:
+ chromedriver_args = [exe_path]
+ if port:
+ # Allow remote connections if a port was specified
+ chromedriver_args.append('--whitelisted-ips')
+ else:
port = utils.get_unused_port()
- chromedriver_args = [exe_path, '--port=%d' % port]
+ chromedriver_args.append('--port=%d' % port)
# Chromedriver will look for an X server running on the display
# specified through the DISPLAY environment variable.
@@ -155,7 +169,8 @@
logging.debug('Chrome Driver server is up and listening at port %d.',
port)
- atexit.register(self.close)
+ if not skip_cleanup:
+ atexit.register(self.close)
def is_running(self):