Skip to content

Commit 49cea81

Browse files
bbelderbospybites
authored andcommitted
Pcc32 / Selenium testing PyBites' Django app (pybites#98)
* 29 readme * all done
1 parent 9808d1a commit 49cea81

File tree

2 files changed

+102
-0
lines changed

2 files changed

+102
-0
lines changed

32/bbelderbos/requirements.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
nose==1.3.7
2+
selenium==3.5.0
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
import unittest
2+
from selenium import webdriver
3+
4+
BASE_URL = 'http://pybites.pythonanywhere.com/'
5+
PAGE_TITLE = 'PyBites 100 Days of Django'
6+
APP_URL = 'http://pybites.pythonanywhere.com/pyplanet/'
7+
APP_NAME = 'PyPlanet Article Sharer App'
8+
USERNAME, PASSWORD = 'guest', 'changeme'
9+
TABLE_CLASS = 'pure-table' # TODO: use html id/name
10+
11+
12+
class TestPyBitesPyplanet(unittest.TestCase):
13+
14+
def setUp(self):
15+
self.driver = webdriver.PhantomJS()
16+
17+
def tearDown(self):
18+
self.driver.close()
19+
20+
def _get_first_article_title(self, driver):
21+
table = driver.find_element_by_xpath(
22+
"//table[@class='{}']".format(TABLE_CLASS))
23+
return table.find_elements_by_xpath(".//td")[0].text
24+
25+
def test_logged_out_views(self):
26+
driver = self.driver
27+
driver.get(BASE_URL)
28+
29+
self.assertEqual(PAGE_TITLE, driver.title)
30+
h1_text = driver.find_element_by_tag_name('h1').text
31+
self.assertEqual(PAGE_TITLE, h1_text)
32+
33+
first_app_link_name = driver.find_element_by_xpath(
34+
"//main/ul/li[1]/a").text
35+
self.assertEqual(APP_NAME, first_app_link_name)
36+
37+
driver.find_element_by_link_text(APP_NAME).click()
38+
self.assertEqual(self.driver.current_url, APP_URL)
39+
40+
self.assertIn('<th>Title</th>', driver.page_source)
41+
self.assertEqual(driver.page_source.count('<td'), 100)
42+
43+
first_article = self._get_first_article_title(driver)
44+
driver.find_element_by_link_text(first_article).click()
45+
46+
title_article_page = driver.find_element_by_tag_name('h2').text
47+
self.assertEqual(title_article_page, first_article)
48+
self.assertIn('Article:', driver.page_source)
49+
self.assertIn('(published: ', driver.page_source)
50+
51+
self.assertIn('Go back', driver.page_source)
52+
go_back_btn = driver.find_element_by_link_text('Go back')
53+
go_back_link = go_back_btn.get_attribute('href')
54+
self.assertEqual(go_back_link, APP_URL)
55+
self.assertNotIn('Tweet this', driver.page_source)
56+
57+
def test_login_logout_process_and_views(self):
58+
driver = self.driver
59+
driver.get(APP_URL)
60+
61+
self.assertIn('<a href="/">Home</a>', driver.page_source)
62+
self.assertIn('<a href="/login/">Login</a>', driver.page_source)
63+
self.assertNotIn('<a href="/logout/">Logout</a>', driver.page_source)
64+
65+
driver.find_element_by_link_text('Login').click()
66+
67+
username_field = driver.find_element_by_name('username')
68+
username_field.send_keys(USERNAME)
69+
password_field = driver.find_element_by_name('password')
70+
password_field.send_keys(PASSWORD)
71+
72+
# TODO: need html id/name on button
73+
btn_xpath = "//button[contains(@class, 'pure-button-primary')]"
74+
login_btn = driver.find_element_by_xpath(btn_xpath)
75+
login_btn.click()
76+
77+
# TODO: when logging in, need to redirect to previous page
78+
driver.get(APP_URL)
79+
80+
self.assertNotIn('<a href="/login/">Login</a>', driver.page_source)
81+
self.assertIn('Welcome back, guest', driver.page_source)
82+
self.assertIn('<a href="/logout/">Logout</a>', driver.page_source)
83+
84+
first_article = self._get_first_article_title(driver)
85+
driver.find_element_by_link_text(first_article).click()
86+
87+
self.assertIn('Go back', driver.page_source)
88+
self.assertIn('Tweet this', driver.page_source)
89+
tweet_btn = driver.find_element_by_link_text('Tweet this')
90+
tweet_link_text = tweet_btn.get_attribute('href')
91+
regex = r'^https://twitter.com/intent/tweet\?text=.*via=pybites$'
92+
self.assertRegex(tweet_link_text, regex)
93+
94+
driver.find_element_by_link_text('Logout').click()
95+
self.assertIn('logout', self.driver.current_url)
96+
self.assertIn('See you!', driver.page_source)
97+
self.assertIn('successfully logged out.', driver.page_source)
98+
self.assertIn('<a href="/">Home</a>', driver.page_source)
99+
self.assertIn('<a href="/login/">Login</a>', driver.page_source)
100+
self.assertNotIn('<a href="/logout/">Logout</a>', driver.page_source)

0 commit comments

Comments
 (0)