From f35fed29356d1f55af803f2f24cd2e54634cc8a6 Mon Sep 17 00:00:00 2001 From: John Chilton Date: Wed, 30 Aug 2017 14:05:25 -0400 Subject: [PATCH] Improve setting up Sizzle for Selenium tests. Something releated to AMD broke our way of injecting Sizzle into Galaxy for Selenium tests. This is a much better way that seems to work - just use jQuery ($) as Sizzle if it is available. Avoids an external dependency and another page fetch per test as well as fixing the problem. Add a test case that just tests the sizzle stuff works on its own. It will be a clear indiciation what is broken if there are related regressions in the future. --- test/galaxy_selenium/sizzle.py | 22 ++++++++++++++-------- test/selenium_tests/test_sizzle_loading.py | 10 ++++++++++ 2 files changed, 24 insertions(+), 8 deletions(-) create mode 100644 test/selenium_tests/test_sizzle_loading.py diff --git a/test/galaxy_selenium/sizzle.py b/test/galaxy_selenium/sizzle.py index 2fad57e4dfe..c0adf70aa4b 100644 --- a/test/galaxy_selenium/sizzle.py +++ b/test/galaxy_selenium/sizzle.py @@ -95,12 +95,18 @@ def find_elements_by_sizzle(driver, sizzle_selector): def _inject_sizzle(driver, sizzle_url, timeout): script = """ - var _s = document.createElement("script"); - _s.type = "text/javascript"; - _s.src = "{src}"; - var _h = document.getElementsByTagName("head")[0]; - _h.appendChild(_s); - """.format(src=sizzle_url) + if(typeof(window.$) != "undefined") { + // Just reuse jQuery if it is available, avoids potential amd problems + // that have cropped up with Galaxy for instance. + window.Sizzle = window.$; + } else { + var _s = document.createElement("script"); + _s.type = "text/javascript"; + _s.src = "%s"; + var _h = document.getElementsByTagName("head")[0]; + _h.appendChild(_s); + } + """ % sizzle_url driver.execute_script(script) wait = WebDriverWait(driver, timeout) wait.until(lambda d: _is_sizzle_loaded(d), @@ -121,8 +127,8 @@ def _make_sizzle_string(sizzle_selector): __all__ = ( - "sizzle_selector_clickable", - "sizzle_presence_of_selector", "find_element_by_sizzle", "find_elements_by_sizzle", + "sizzle_selector_clickable", + "sizzle_presence_of_selector", ) diff --git a/test/selenium_tests/test_sizzle_loading.py b/test/selenium_tests/test_sizzle_loading.py new file mode 100644 index 00000000000..022e6fdfb67 --- /dev/null +++ b/test/selenium_tests/test_sizzle_loading.py @@ -0,0 +1,10 @@ +from .framework import SeleniumTestCase +from .framework import selenium_test + + +class SizzleLoadingTestCase(SeleniumTestCase): + + @selenium_test + def test_sizzle_loads(self): + self.home() + self.wait_for_sizzle_selector_clickable("div")