parent
87d123ca56
commit
e0d3caff05
4 changed files with 160 additions and 16 deletions
@ -1,28 +1,50 @@ |
||||
from datetime import timedelta |
||||
from random import randint |
||||
|
||||
from selenium import webdriver |
||||
from django.utils import timezone |
||||
from django.test import TestCase |
||||
from django_faker import Faker |
||||
from django.core.urlresolvers import reverse |
||||
from django.shortcuts import reverse |
||||
|
||||
from apps.course.models import Course |
||||
from project.tests.factories import * |
||||
from project.utils.selenium_utils import SeleniumExtensions as SE |
||||
|
||||
|
||||
class CoursesTestCase(TestCase): |
||||
|
||||
@classmethod |
||||
def setUpTestData(cls): |
||||
for i in range(10): |
||||
CourseFactory() |
||||
create_admin() |
||||
create_batch_unique(CourseFactory, status=Course.STATUS_CHOICES[:3], price=[0, 1000], |
||||
age=Course.AGE_CHOICES[:2], deferred_start_at=[None, timezone.now() + timedelta(days=randint(5, 15))]) |
||||
|
||||
def test_courses_url_accessible(self): |
||||
print('get ', reverse('courses')) |
||||
resp = self.client.get(reverse('courses')) |
||||
self.assertEqual(resp.status_code, 200) |
||||
|
||||
def test_course_url_accessible(self): |
||||
course = Course.objects.all()[:1][0] |
||||
resp = self.client.get(course.url) |
||||
self.assertEqual(resp.status_code, 200) |
||||
for course in Course.objects.filter(status=Course.PUBLISHED): |
||||
print('get ', course.url) |
||||
resp = self.client.get(course.url) |
||||
self.assertEqual(resp.status_code, 200) |
||||
|
||||
@login_admin |
||||
def test_course_edit_url_accessible(self): |
||||
course = Course.objects.all()[:1][0] |
||||
resp = self.client.get(course.url) |
||||
self.assertEqual(resp.status_code, 200) |
||||
for course in Course.objects.all(): |
||||
print('get ', reverse('course_edit', args=[course.id])) |
||||
resp = self.client.get(reverse('course_edit', args=[course.id])) |
||||
self.assertEqual(resp.status_code, 200) |
||||
|
||||
|
||||
class CourseEditTestCase(TestCase): |
||||
|
||||
@classmethod |
||||
def setUpTestData(cls): |
||||
cls.driver = webdriver.Chrome() |
||||
create_admin() |
||||
create_batch_unique(CourseFactory, status=Course.STATUS_CHOICES[:3], price=[0, 1000], |
||||
age=Course.AGE_CHOICES[:2], deferred_start_at=[None, timezone.now() + timedelta(days=randint(5, 15))]) |
||||
|
||||
def test_course_edit(self): |
||||
print('Course.objects.all().count()', Course.objects.all().count()) |
||||
|
||||
@ -0,0 +1,50 @@ |
||||
# -*- 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) |
||||
) |
||||
) |
||||
Loading…
Reference in new issue