from django.test import LiveServerTestCase from selenium import webdriver from selenium.webdriver.common.by import By from pyvirtualdisplay import Display from django.conf import settings from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from project.utils.selenium_utils import SeleniumExtensions as SE from apps.auth.models import TempToken class SeleniumTestCase(LiveServerTestCase): @classmethod def setUpClass(cls): super().setUpClass() cls.display = Display(visible=0, size=(1280, 1024)) cls.display.start() cls.driver = webdriver.Firefox() @classmethod def tearDownClass(cls): cls.driver.quit() cls.display.stop() super().tearDownClass() def get_url(self, url=''): return '%s%s' % (self.live_server_url, url) def wait_elem_xpath(self, xpath, inside_el=None, wait_time=10): return SE.wait_elem(self.driver, (By.XPATH, xpath), inside_el, wait_time) def wait_elems_xpath(self, xpath, inside_el=None, wait_time=10): return SE.wait_elems(self.driver, (By.XPATH, xpath), inside_el, wait_time) def wait_elem_css(self, selector, inside_el=None, wait_time=10): return SE.wait_elem(self.driver, (By.CSS_SELECTOR, selector), inside_el, wait_time) def wait_elems_css(self, selector, inside_el=None, wait_time=10): return SE.wait_elems(self.driver, (By.CSS_SELECTOR, selector), inside_el, wait_time) def wait_elem_name(self, name, inside_el=None, wait_time=10): return SE.wait_elem(self.driver, (By.NAME, name), inside_el, wait_time) def wait_elem_id(self, id, inside_el=None, wait_time=10): return SE.wait_elem(self.driver, (By.ID, id), inside_el, wait_time) def wait_elems_name(self, name, inside_el=None, wait_time=10): return SE.wait_elems(self.driver, (By.NAME, name), inside_el, wait_time) def login(self, user): TempToken.objects.all().delete() tt = TempToken.objects.create(user=user) self.driver.get('%s?temp-token=%s' % (self.get_url(), tt.key)) def add_requests_log(self): SE.add_requests_log(self.driver) def get_requests(self): return SE.get_requests(self.driver) def wait_for_request(self, path, wait_time=10): return SE.wait_for_request(self.driver, path, wait_time)