parent
14ddc2b28c
commit
15954fc66a
5 changed files with 212 additions and 86 deletions
@ -0,0 +1,44 @@ |
||||
from django.test import TestCase |
||||
from selenium import webdriver |
||||
from selenium.webdriver.common.by import By |
||||
from pyvirtualdisplay import Display |
||||
|
||||
from project.utils.selenium_utils import SeleniumExtensions as SE |
||||
from django.conf import settings |
||||
|
||||
|
||||
class SeleniumTestCase(TestCase): |
||||
|
||||
@classmethod |
||||
def setUpClass(cls): |
||||
super().setUpClass() |
||||
cls.display = Display(visible=0, size=(1280, 1024)) |
||||
cls.display.start() |
||||
cls.driver = webdriver.Chrome() |
||||
|
||||
@classmethod |
||||
def tearDownClass(cls): |
||||
cls.driver.close() |
||||
cls.display.stop() |
||||
super().tearDownClass() |
||||
|
||||
def get_url(self, url): |
||||
return 'http://%s%s' % (settings.MAIN_HOST, 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_elems_name(self, name, inside_el=None, wait_time=10): |
||||
return SE.wait_elems(self.driver, (By.NAME, name), inside_el, wait_time) |
||||
@ -1,50 +1,46 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
from selenium import webdriver |
||||
from selenium.webdriver.common.by import By |
||||
from selenium.webdriver.support.ui import WebDriverWait |
||||
from selenium.webdriver.support import expected_conditions as EC |
||||
|
||||
|
||||
class elem_in(object): |
||||
default_find_fn = 'find_element_by_xpath' |
||||
def __init__(self, element, xpath, find_fn=None): |
||||
self.element = element |
||||
self.xpath = xpath |
||||
self.find_fn = self.default_find_fn if find_fn is None else find_fn |
||||
|
||||
def __call__(self, driver): |
||||
try: |
||||
return getattr(self.element, self.find_fn)(self.xpath) |
||||
except: |
||||
return False |
||||
|
||||
class elems_in(elem_in): |
||||
default_find_fn = 'find_elements_by_xpath' |
||||
|
||||
|
||||
class SeleniumExtensions(object): |
||||
|
||||
@classmethod |
||||
def wait_elem(cls, driver, xpath, inside_el=None, wait_time=10): |
||||
if inside_el: |
||||
return WebDriverWait(driver, wait_time).until(elem_in(inside_el, xpath)) |
||||
if xpath[:2] != '//': |
||||
raise Exception('XPath in wait_elem must start with //') |
||||
return WebDriverWait(driver, wait_time).until( |
||||
EC.presence_of_element_located( |
||||
(By.XPATH, xpath) |
||||
) |
||||
) |
||||
|
||||
@classmethod |
||||
def wait_elems(cls, driver, xpath, inside_el=None, wait_time=10): |
||||
if inside_el: |
||||
return WebDriverWait(driver, wait_time).until(elems_in(inside_el, xpath)) |
||||
if xpath[:2] != '//': |
||||
raise Exception('XPath in wait_elems must start with //') |
||||
return WebDriverWait(driver, wait_time).until( |
||||
EC.presence_of_all_elements_located( |
||||
(By.XPATH, xpath) |
||||
) |
||||
) |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
from selenium import webdriver |
||||
from selenium.webdriver.common.by import By |
||||
from selenium.webdriver.support.ui import WebDriverWait |
||||
from selenium.webdriver.support import expected_conditions as EC |
||||
|
||||
|
||||
class ElementIn(object): |
||||
|
||||
default_find_fn = 'find_element' |
||||
|
||||
def __init__(self, element, locator, find_fn=None): |
||||
self.element = element |
||||
self.locator = locator |
||||
self.find_fn = self.default_find_fn if find_fn is None else find_fn |
||||
|
||||
def __call__(self, driver): |
||||
try: |
||||
return getattr(self.element, self.find_fn)(self.locator) |
||||
except: |
||||
return False |
||||
|
||||
|
||||
class ElementsIn(ElementIn): |
||||
|
||||
default_find_fn = 'find_elements' |
||||
|
||||
|
||||
class SeleniumExtensions(object): |
||||
|
||||
@classmethod |
||||
def wait_elem(cls, driver, locator, inside_el=None, wait_time=10): |
||||
if inside_el: |
||||
return WebDriverWait(driver, wait_time).until(ElementIn(inside_el, locator)) |
||||
return WebDriverWait(driver, wait_time).until( |
||||
EC.presence_of_element_located(locator) |
||||
) |
||||
|
||||
@classmethod |
||||
def wait_elems(cls, driver, locator, inside_el=None, wait_time=10): |
||||
if inside_el: |
||||
return WebDriverWait(driver, wait_time).until(ElementsIn(inside_el, locator)) |
||||
return WebDriverWait(driver, wait_time).until( |
||||
EC.presence_of_all_elements_located(locator) |
||||
) |
||||
|
||||
Loading…
Reference in new issue