From dbaf7af91132ff93718678f2a5b42fee3d1b6acd Mon Sep 17 00:00:00 2001 From: kinitrupti Date: Mon, 21 Nov 2016 12:16:09 +0530 Subject: Admin css fixed --- tbc/static/admin/tests.py | 163 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 tbc/static/admin/tests.py (limited to 'tbc/static/admin/tests.py') 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