Compare commits

..

2 Commits

2 changed files with 23 additions and 16 deletions

View File

View File

@ -1,9 +1,14 @@
from django.test import LiveServerTestCase
from selenium import webdriver from selenium import webdriver
from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import WebDriverException
import time import time
import unittest import unittest
class NewVisitorTest(unittest.TestCase): MAX_WAIT = 10
class NewVisitorTest(LiveServerTestCase):
def setUp(self): def setUp(self):
self.browser = webdriver.Firefox() self.browser = webdriver.Firefox()
@ -11,15 +16,23 @@ class NewVisitorTest(unittest.TestCase):
def tearDown(self): def tearDown(self):
self.browser.quit() self.browser.quit()
def check_for_row_in_list_table(self, row_text): def wait_for_row_in_list_table(self, row_text):
table = self.browser.find_element_by_id('id_list_table') start_time = time.time()
rows = table.find_elements_by_tag_name('tr') while True:
self.assertIn(row_text, [row.text for row in rows]) try:
table = self.browser.find_element_by_id('id_list_table')
rows = table.find_elements_by_tag_name('tr')
self.assertIn('foo', [row.text for row in rows])
return
except (AssertionError, WebDriverException) as e:
if time.time() - start_time > MAX_WAIT:
raise e
time.sleep(0.5)
def test_can_start_a_list_and_retrieve_it_later(self): def test_can_start_a_list_and_retrieve_it_later(self):
# Edith has heard about a cool new online to-do app. She goes # Edith has heard about a cool new online to-do app. She goes
# to check out its homepage # to check out its homepage
self.browser.get('http://localhost:8000') self.browser.get(self.live_server_url)
# She notices the page title and header mention to-do lists # She notices the page title and header mention to-do lists
self.assertIn('To-Do', self.browser.title) self.assertIn('To-Do', self.browser.title)
@ -40,19 +53,17 @@ class NewVisitorTest(unittest.TestCase):
# When she hits enter, the page updates, and now the page lists # When she hits enter, the page updates, and now the page lists
# "1: Buy peacock feathers" as an item in a to-do list # "1: Buy peacock feathers" as an item in a to-do list
inputbox.send_keys(Keys.ENTER) inputbox.send_keys(Keys.ENTER)
time.sleep(1) self.wait_for_row_in_list_table('1: Buy peacock feathers')
self.check_for_row_in_list_table('1: Buy peacock feathers')
# There is still a text box inviting her to add another item. She # There is still a text box inviting her to add another item. She
# enters "Use peacock feathers to make a fly" (Edith is very methodical) # enters "Use peacock feathers to make a fly" (Edith is very methodical)
inputbox = self.browser.find_element_by_id('id_new_item') inputbox = self.browser.find_element_by_id('id_new_item')
inputbox.send_keys('Use peacock feathers to make a fly') inputbox.send_keys('Use peacock feathers to make a fly')
inputbox.send_keys(Keys.ENTER) inputbox.send_keys(Keys.ENTER)
time.sleep(1)
# The page updates again, and now shows both items on her list # The page updates again, and now shows both items on her list
self.check_for_row_in_list_table('1: Buy peacock feathers') self.wait_for_row_in_list_table('1: Buy peacock feathers')
self.check_for_row_in_list_table('2: Use peacock feathers to make a fly') self.wait_for_row_in_list_table('2: Use peacock feathers to make a fly')
# Edith wonders whether the site will remember her list. Then she sees # Edith wonders whether the site will remember her list. Then she sees
# that the site has generated a unique URL for her -- there is some # that the site has generated a unique URL for her -- there is some
@ -61,7 +72,3 @@ class NewVisitorTest(unittest.TestCase):
# She visits that URL - her to-do list is still there. # She visits that URL - her to-do list is still there.
# Satisfied, she goes back to sleep # Satisfied, she goes back to sleep
if __name__ == '__main__':
unittest.main(warnings='ignore')