diff --git a/test/galaxy_selenium/cli.py b/test/galaxy_selenium/cli.py index 93048dc26dc..e46a6f3a32a 100644 --- a/test/galaxy_selenium/cli.py +++ b/test/galaxy_selenium/cli.py @@ -3,7 +3,7 @@ BROWSER_DESCRIPTION = "Use specific browser for selenium (e.g. firefox or chrome REMOTE_HOST_DESCRIPTION = "Selenium hub remote host to use (if remote driver in use)." REMOTE_PORT_DESCRIPTION = "Selenium hub remote port to use (if remote driver in use)." GALAXY_URL_DESCRIPTION = "URL of Galaxy instance to target." -HEADLESS_DESCRIPTION = "Use local selenium headlessly (requires pyvirtualdisplay)." +HEADLESS_DESCRIPTION = "Use local selenium headlessly (native in chrome, otherwise this requires pyvirtualdisplay)." from six.moves.urllib.parse import urljoin diff --git a/test/galaxy_selenium/driver_factory.py b/test/galaxy_selenium/driver_factory.py index 1e9b729225c..8ddb0cd4953 100644 --- a/test/galaxy_selenium/driver_factory.py +++ b/test/galaxy_selenium/driver_factory.py @@ -6,6 +6,7 @@ except ImportError: Display = None from selenium import webdriver +from selenium.webdriver.chrome.options import Options as ChromeOptions from selenium.webdriver.common.desired_capabilities import DesiredCapabilities @@ -15,15 +16,18 @@ LOGGING_PREFS = { } -def get_local_driver(browser=DEFAULT_BROWSER): +def get_local_browser(browser): if browser == "auto": if _which("chromedriver"): - browser = "CHROME" + return "CHROME" elif _which("geckodriver"): - browser = "FIREFOX" + return "FIREFOX" else: raise Exception("Selenium browser is 'auto' but neither geckodriver or chromedriver are found on PATH.") + +def get_local_driver(browser=DEFAULT_BROWSER, headless=False): + browser = get_local_browser(browser) assert browser in ["CHROME", "FIREFOX", "OPERA", "PHANTOMJS"] driver_to_class = { "CHROME": webdriver.Chrome, @@ -32,7 +36,12 @@ def get_local_driver(browser=DEFAULT_BROWSER): "PHANTOMJS": webdriver.PhantomJS, } driver_class = driver_to_class[browser] - return driver_class(desired_capabilities={"loggingPrefs": LOGGING_PREFS}) + if browser == 'CHROME' and headless: + options = ChromeOptions() + options.add_argument('--headless') + return driver_class(desired_capabilities={"loggingPrefs": LOGGING_PREFS}, chrome_options=options) + else: + return driver_class(desired_capabilities={"loggingPrefs": LOGGING_PREFS}) def get_remote_driver( diff --git a/test/galaxy_selenium/navigates_galaxy.py b/test/galaxy_selenium/navigates_galaxy.py index 3856880a246..f3bc993bf91 100644 --- a/test/galaxy_selenium/navigates_galaxy.py +++ b/test/galaxy_selenium/navigates_galaxy.py @@ -1257,7 +1257,7 @@ class NavigatesGalaxy(HasDriver): self.home() self.click_masthead_user() self.wait_for_and_click(self.navigation.masthead.labels.logout) - self.click_label('go to the home page') + self.sleep_for(WAIT_TYPES.UX_TRANSITION) assert not self.is_logged_in() def run_tour(self, path, skip_steps=None, sleep_on_steps=None, tour_callback=None): diff --git a/test/selenium_tests/framework.py b/test/selenium_tests/framework.py index d0166dcd846..480b9e801d8 100644 --- a/test/selenium_tests/framework.py +++ b/test/selenium_tests/framework.py @@ -287,7 +287,7 @@ class SeleniumTestCase(FunctionalTestCase, NavigatesGalaxy, UsesApiTestCaseMixin self._try_setup_with_driver() def setup_driver_and_session(self): - self.display = driver_factory.virtual_display_if_enabled(headless_selenium()) + self.display = driver_factory.virtual_display_if_enabled(use_virtual_display()) self.driver = get_driver() # New workflow index page does not degrade well to smaller sizes, needed # to increase this. @@ -488,7 +488,20 @@ def headless_selenium(): return False if GALAXY_TEST_SELENIUM_HEADLESS == "auto": - if driver_factory.is_virtual_display_available(): + if driver_factory.is_virtual_display_available() or driver_factory.get_local_browser(GALAXY_TEST_SELENIUM_BROWSER) == "CHROME": + return True + else: + return False + else: + return asbool(GALAXY_TEST_SELENIUM_HEADLESS) + + +def use_virtual_display(): + if asbool(GALAXY_TEST_SELENIUM_REMOTE): + return False + + if GALAXY_TEST_SELENIUM_HEADLESS == "auto": + if driver_factory.is_virtual_display_available() and not driver_factory.get_local_browser(GALAXY_TEST_SELENIUM_BROWSER) == "CHROME": return True else: return False @@ -497,7 +510,10 @@ def headless_selenium(): def get_local_driver(): - return driver_factory.get_local_driver(GALAXY_TEST_SELENIUM_BROWSER) + return driver_factory.get_local_driver( + GALAXY_TEST_SELENIUM_BROWSER, + headless_selenium() + ) def get_remote_driver():