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

SeleniumTestCase.click()   A

Complexity

Conditions 1

Size

Total Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
c 1
b 1
f 0
dl 0
loc 2
rs 10
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
        try:
66
            return wait.until(lambda b: getattr(b, command)(param))
67
        except TimeoutException as e:
68
            raise SkipTest(e)
69
70
    def click(self, selector):
71
        return self.browser.find_element_by_css_selector(selector).click()
72
73
    def wait(self, id):
74
        return WebDriverWait(self.browser, 3).until(
75
            EC.presence_of_element_located((By.ID, id)))
76
77
    def login(self):
78
        self.visit(reverse("admin:index"))
79
        # Fill login information of admin
80
        username = self.find_element_by_id("id_username")
81
        username.send_keys("admin_s")
82
        password = self.find_element_by_id("id_password")
83
        password.send_keys("admin")
84
        self.click("input[type='submit']")
85
86
    def tearDown(self):
87
        self.browser.quit()
88
        super(SeleniumTestCase, self).tearDown()
89
90
    def url_change(self, id):
91
        return reverse('admin:pages_page_change', args=[id])
92
93
    def test_admin_select(self):
94
        self.login()
95
        page = self.new_page()
96
        self.visit(self.url_change(page.id))
97
        status = self.find_element_by_id('id_status')
98
        self.assertEqual(status.get_attribute('value'), str(page.status))
99
100
        self.select_option(status, str(Page.DRAFT))
101
        self.assertEqual(status.get_attribute('value'), str(Page.DRAFT))
102
103
        src = self.find_element_by_css_selector('.field-status'
104
            ).find_element_by_tag_name('img'
105
            ).get_attribute('src')
106
107
        self.assertTrue(src.endswith('draft.gif'))
108
109
    def test_admin_move_page(self):
110
        self.login()
111
        page_1 = self.new_page({'slug':'p1'})
112
        page_2 = self.new_page({'slug':'p2'})
113
        self.visit(reverse('admin:pages_page_changelist'))
114
115
        h1 = self.find_element_by_css_selector('#content h1')
116
        self.assertEqual(h1.text, 'Select page to change')
117
118
        rows = self.find_elements_by_css_selector('#page-list tbody tr')
119
        row_1 = rows[0]
120
        row_2 = rows[1]
121
122
        self.assertEqual(row_1.get_attribute('id'), 'page-row-%d' % page_1.id)
123
        self.assertEqual(row_2.get_attribute('id'), 'page-row-%d' % page_2.id)
124
125
        page_3 = self.new_page({'slug':'p3'})
126
127
        self.click('#move-link-%d' % page_2.id)
128
        self.click('#move-target-%d .move-target.left' % page_1.id)
129
130
        self.wait('page-row-%d' % page_3.id)
131
132
        rows = self.find_elements_by_css_selector('#page-list tbody tr')
133
        row_1 = rows[0]
134
        row_2 = rows[1]
135
        row_3 = rows[2]
136
137
        self.screenshot()
138
139
        self.assertEqual(row_1.get_attribute('id'), 'page-row-%d' % page_2.id)
140
        self.assertEqual(row_2.get_attribute('id'), 'page-row-%d' % page_1.id)
141
        self.assertEqual(row_3.get_attribute('id'), 'page-row-%d' % page_3.id)
142