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.test import TestCase |
||||||
from django_faker import Faker |
from django.shortcuts import reverse |
||||||
from django.core.urlresolvers import reverse |
|
||||||
|
|
||||||
from apps.course.models import Course |
|
||||||
from project.tests.factories import * |
from project.tests.factories import * |
||||||
|
from project.utils.selenium_utils import SeleniumExtensions as SE |
||||||
|
|
||||||
|
|
||||||
class CoursesTestCase(TestCase): |
class CoursesTestCase(TestCase): |
||||||
|
|
||||||
@classmethod |
@classmethod |
||||||
def setUpTestData(cls): |
def setUpTestData(cls): |
||||||
for i in range(10): |
create_admin() |
||||||
CourseFactory() |
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): |
def test_courses_url_accessible(self): |
||||||
|
print('get ', reverse('courses')) |
||||||
resp = self.client.get(reverse('courses')) |
resp = self.client.get(reverse('courses')) |
||||||
self.assertEqual(resp.status_code, 200) |
self.assertEqual(resp.status_code, 200) |
||||||
|
|
||||||
def test_course_url_accessible(self): |
def test_course_url_accessible(self): |
||||||
course = Course.objects.all()[:1][0] |
for course in Course.objects.filter(status=Course.PUBLISHED): |
||||||
resp = self.client.get(course.url) |
print('get ', course.url) |
||||||
self.assertEqual(resp.status_code, 200) |
resp = self.client.get(course.url) |
||||||
|
self.assertEqual(resp.status_code, 200) |
||||||
|
|
||||||
|
@login_admin |
||||||
def test_course_edit_url_accessible(self): |
def test_course_edit_url_accessible(self): |
||||||
course = Course.objects.all()[:1][0] |
for course in Course.objects.all(): |
||||||
resp = self.client.get(course.url) |
print('get ', reverse('course_edit', args=[course.id])) |
||||||
self.assertEqual(resp.status_code, 200) |
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