summaryrefslogtreecommitdiff
path: root/tbc/static/admin/tests.py
diff options
context:
space:
mode:
authorkinitrupti2016-11-21 12:16:09 +0530
committerkinitrupti2016-11-21 12:16:09 +0530
commitdbaf7af91132ff93718678f2a5b42fee3d1b6acd (patch)
treeaec4d3f94c7423280499ad6264d24f586881b08f /tbc/static/admin/tests.py
parent19793cdf2025bb2a4560a0718ed5d6bce175e7b8 (diff)
downloadPython-TBC-Interface-dbaf7af91132ff93718678f2a5b42fee3d1b6acd.tar.gz
Python-TBC-Interface-dbaf7af91132ff93718678f2a5b42fee3d1b6acd.tar.bz2
Python-TBC-Interface-dbaf7af91132ff93718678f2a5b42fee3d1b6acd.zip
Admin css fixed
Diffstat (limited to 'tbc/static/admin/tests.py')
-rw-r--r--tbc/static/admin/tests.py163
1 files changed, 163 insertions, 0 deletions
diff --git a/tbc/static/admin/tests.py b/tbc/static/admin/tests.py
new file mode 100644
index 0000000..5415d5f
--- /dev/null
+++ b/tbc/static/admin/tests.py
@@ -0,0 +1,163 @@
+import os
+from unittest import SkipTest
+
+from django.contrib.staticfiles.testing import StaticLiveServerTestCase
+from django.utils.module_loading import import_string
+from django.utils.translation import ugettext as _
+
+
+class AdminSeleniumWebDriverTestCase(StaticLiveServerTestCase):
+
+ available_apps = [
+ 'django.contrib.admin',
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.sites',
+ ]
+ webdriver_class = 'selenium.webdriver.firefox.webdriver.WebDriver'
+
+ @classmethod
+ def setUpClass(cls):
+ if not os.environ.get('DJANGO_SELENIUM_TESTS', False):
+ raise SkipTest('Selenium tests not requested')
+ try:
+ cls.selenium = import_string(cls.webdriver_class)()
+ except Exception as e:
+ raise SkipTest('Selenium webdriver "%s" not installed or not '
+ 'operational: %s' % (cls.webdriver_class, str(e)))
+ # This has to be last to ensure that resources are cleaned up properly!
+ super(AdminSeleniumWebDriverTestCase, cls).setUpClass()
+
+ @classmethod
+ def _tearDownClassInternal(cls):
+ if hasattr(cls, 'selenium'):
+ cls.selenium.quit()
+ super(AdminSeleniumWebDriverTestCase, cls)._tearDownClassInternal()
+
+ def wait_until(self, callback, timeout=10):
+ """
+ Helper function that blocks the execution of the tests until the
+ specified callback returns a value that is not falsy. This function can
+ be called, for example, after clicking a link or submitting a form.
+ See the other public methods that call this function for more details.
+ """
+ from selenium.webdriver.support.wait import WebDriverWait
+ WebDriverWait(self.selenium, timeout).until(callback)
+
+ def wait_for_popup(self, num_windows=2, timeout=10):
+ """
+ Block until `num_windows` are present (usually 2, but can be
+ overridden in the case of pop-ups opening other pop-ups).
+ """
+ self.wait_until(lambda d: len(d.window_handles) == num_windows, timeout)
+
+ def wait_loaded_tag(self, tag_name, timeout=10):
+ """
+ Helper function that blocks until the element with the given tag name
+ is found on the page.
+ """
+ self.wait_for(tag_name, timeout)
+
+ def wait_for(self, css_selector, timeout=10):
+ """
+ Helper function that blocks until a CSS selector is found on the page.
+ """
+ from selenium.webdriver.common.by import By
+ from selenium.webdriver.support import expected_conditions as ec
+ self.wait_until(
+ ec.presence_of_element_located((By.CSS_SELECTOR, css_selector)),
+ timeout
+ )
+
+ def wait_for_text(self, css_selector, text, timeout=10):
+ """
+ Helper function that blocks until the text is found in the CSS selector.
+ """
+ from selenium.webdriver.common.by import By
+ from selenium.webdriver.support import expected_conditions as ec
+ self.wait_until(
+ ec.text_to_be_present_in_element(
+ (By.CSS_SELECTOR, css_selector), text),
+ timeout
+ )
+
+ def wait_for_value(self, css_selector, text, timeout=10):
+ """
+ Helper function that blocks until the value is found in the CSS selector.
+ """
+ from selenium.webdriver.common.by import By
+ from selenium.webdriver.support import expected_conditions as ec
+ self.wait_until(
+ ec.text_to_be_present_in_element_value(
+ (By.CSS_SELECTOR, css_selector), text),
+ timeout
+ )
+
+ def wait_page_loaded(self):
+ """
+ Block until page has started to load.
+ """
+ from selenium.common.exceptions import TimeoutException
+ try:
+ # Wait for the next page to be loaded
+ self.wait_loaded_tag('body')
+ except TimeoutException:
+ # IE7 occasionally returns an error "Internet Explorer cannot
+ # display the webpage" and doesn't load the next page. We just
+ # ignore it.
+ pass
+
+ def admin_login(self, username, password, login_url='/admin/'):
+ """
+ Helper function to log into the admin.
+ """
+ self.selenium.get('%s%s' % (self.live_server_url, login_url))
+ username_input = self.selenium.find_element_by_name('username')
+ username_input.send_keys(username)
+ password_input = self.selenium.find_element_by_name('password')
+ password_input.send_keys(password)
+ login_text = _('Log in')
+ self.selenium.find_element_by_xpath(
+ '//input[@value="%s"]' % login_text).click()
+ self.wait_page_loaded()
+
+ def get_css_value(self, selector, attribute):
+ """
+ Helper function that returns the value for the CSS attribute of an
+ DOM element specified by the given selector. Uses the jQuery that ships
+ with Django.
+ """
+ return self.selenium.execute_script(
+ 'return django.jQuery("%s").css("%s")' % (selector, attribute))
+
+ def get_select_option(self, selector, value):
+ """
+ Returns the <OPTION> with the value `value` inside the <SELECT> widget
+ identified by the CSS selector `selector`.
+ """
+ from selenium.common.exceptions import NoSuchElementException
+ options = self.selenium.find_elements_by_css_selector('%s > option' % selector)
+ for option in options:
+ if option.get_attribute('value') == value:
+ return option
+ raise NoSuchElementException('Option "%s" not found in "%s"' % (value, selector))
+
+ def assertSelectOptions(self, selector, values):
+ """
+ Asserts that the <SELECT> widget identified by `selector` has the
+ options with the given `values`.
+ """
+ options = self.selenium.find_elements_by_css_selector('%s > option' % selector)
+ actual_values = []
+ for option in options:
+ actual_values.append(option.get_attribute('value'))
+ self.assertEqual(values, actual_values)
+
+ def has_css_class(self, selector, klass):
+ """
+ Returns True if the element identified by `selector` has the CSS class
+ `klass`.
+ """
+ return (self.selenium.find_element_by_css_selector(selector)
+ .get_attribute('class').find(klass) != -1)