Merge pull request #7287 from dannon/slow_selenium_tests

Fix remaining selenium tests and add headless testing option.
This commit is contained in:
Aysam Guerler
2019-02-04 14:29:23 -05:00
committed by GitHub
4 changed files with 34 additions and 9 deletions
+1 -1
View File
@@ -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
+13 -4
View File
@@ -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(
+1 -1
View File
@@ -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):
+19 -3
View File
@@ -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():