Completed
Pull Request — master (#153)
by
unknown
01:15
created

SeleniumTestCase.setUp()   A

Complexity

Conditions 1

Size

Total Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 14
rs 9.4285
cc 1
1
# -*- coding: utf-8 -*-
2
"""Django page CMS selemium test module"""
3
from pages.models import Page
4
from pages.tests.testcase import TestCase
5
from pages import settings
6
from django.core.urlresolvers import reverse
7
from django.test import LiveServerTestCase
8
from django.contrib import auth
9
10
from selenium import webdriver
11
from selenium.common.exceptions import TimeoutException
12
from selenium.webdriver.common.by import By
13
from selenium.webdriver.support.ui import WebDriverWait
14
from selenium.webdriver.support import expected_conditions as EC
15
16
from unittest import SkipTest
17
18
19
screenshot_nb = 1
20
timeout = 10
21
22
class SeleniumTestCase(TestCase, LiveServerTestCase):
23
24
    def setUp(self):
25
        self.browser = webdriver.PhantomJS()
26
        self.get_admin_client()
27
28
        # setUp is where you instantiate the selenium webdriver and loads the browser.
29
        auth.models.User.objects.create_superuser(
30
            username='admin_s',
31
            password='admin',
32
            email='[email protected]'
33
        )
34
35
        self.browser.get('%s%s' % (self.live_server_url,  reverse("admin:index")))
36
37
        super(SeleniumTestCase, self).setUp()
38
39
    def screenshot(self):
40
        global screenshot_nb
41
        if settings.PAGE_TESTS_SAVE_SCREENSHOTS:
42
            self.browser.save_screenshot('screenshot_%d.png' % screenshot_nb)
43
            screenshot_nb += 1
44
45
    def select_option(self, select, option_id):
46
        for option in select.find_elements_by_tag_name('option'):
47
            if option.get_attribute('value') == str(option_id):
48
                option.click()
49
50
    def visit(self, url):
51
        # Open the django admin page.
52
        # DjangoLiveServerTestCase provides a live server url attribute
53
        # to access the base url in tests
54
        url = '%s%s' % (self.live_server_url,  url)
55
        return self.timeout('get', url)
56
57
    def find_element_by_css_selector(self, selector):
58
        return self.timeout('find_element_by_css_selector', selector)
59
60
    def find_element_by_id(self, id_):
61
        return self.timeout('find_element_by_id', id_)
62
63
    def timeout(self, command, param, timeout=timeout):
64
        wait = WebDriverWait(self.browser, timeout)
65
        cmd = lambda b: getattr(b, 'command')(param)
66
        try:
67
            return wait.until(cmd)
68
        except TimeoutException as e:
69
            raise SkipTest(e)
70
71
    def click(self, selector):
72
        return self.browser.find_element_by_css_selector(selector).click()
73
74
    def wait(self, id):
75
        return WebDriverWait(self.browser, 3).until(
76
            EC.presence_of_element_located((By.ID, id)))
77
78
    def login(self):
79
        self.visit(reverse("admin:index"))
80
        # Fill login information of admin
81
        username = self.find_element_by_id("id_username")
82
        username.send_keys("admin_s")
83
        password = self.find_element_by_id("id_password")
84
        password.send_keys("admin")
85
        self.click("input[type='submit']")
86
87
    def tearDown(self):
88
        self.browser.quit()
89
        super(SeleniumTestCase, self).tearDown()
90
91
    def url_change(self, id):
92
        return reverse('admin:pages_page_change', args=[id])
93
94
    def test_admin_select(self):
95
        self.login()
96
        page = self.new_page()
97
        self.visit(self.url_change(page.id))
98
        status = self.find_element_by_id('id_status')
99
        self.assertEqual(status.get_attribute('value'), str(page.status))
100
101
        self.select_option(status, str(Page.DRAFT))
102
        self.assertEqual(status.get_attribute('value'), str(Page.DRAFT))
103
104
        src = self.find_element_by_css_selector('.field-status'
105
            ).find_element_by_tag_name('img'
106
            ).get_attribute('src')
107
108
        self.assertTrue(src.endswith('draft.gif'))
109
110
    def test_admin_move_page(self):
111
        self.login()
112
        page_1 = self.new_page({'slug':'p1'})
113
        page_2 = self.new_page({'slug':'p2'})
114
        self.visit(reverse('admin:pages_page_changelist'))
115
116
        h1 = self.find_element_by_css_selector('#content h1')
117
        self.assertEqual(h1.text, 'Select page to change')
118
119
        rows = self.find_elements_by_css_selector('#page-list tbody tr')
120
        row_1 = rows[0]
121
        row_2 = rows[1]
122
123
        self.assertEqual(row_1.get_attribute('id'), 'page-row-%d' % page_1.id)
124
        self.assertEqual(row_2.get_attribute('id'), 'page-row-%d' % page_2.id)
125
126
        page_3 = self.new_page({'slug':'p3'})
127
128
        self.click('#move-link-%d' % page_2.id)
129
        self.click('#move-target-%d .move-target.left' % page_1.id)
130
131
        self.wait('page-row-%d' % page_3.id)
132
133
        rows = self.find_elements_by_css_selector('#page-list tbody tr')
134
        row_1 = rows[0]
135
        row_2 = rows[1]
136
        row_3 = rows[2]
137
138
        self.screenshot()
139
140
        self.assertEqual(row_1.get_attribute('id'), 'page-row-%d' % page_2.id)
141
        self.assertEqual(row_2.get_attribute('id'), 'page-row-%d' % page_1.id)
142
        self.assertEqual(row_3.get_attribute('id'), 'page-row-%d' % page_3.id)
143