tests.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. from django.contrib.staticfiles.testing import StaticLiveServerTestCase
  2. from selenium import webdriver
  3. from selenium.webdriver.common.keys import Keys
  4. from selenium.common.exceptions import WebDriverException
  5. import time, os
  6. MAX_WAIT = 10
  7. class NewVisitorTest(StaticLiveServerTestCase):
  8. def setUp(self):
  9. #self.browser = webdriver.Firefox()
  10. self.browser = webdriver.Chrome()
  11. staging_server = os.environ.get('STAGING_SERVER')
  12. if staging_server:
  13. self.live_server_url = 'http://' + staging_server
  14. def tearDown(self):
  15. self.browser.quit()
  16. def wait_for_row_in_list_table(self, row_text):
  17. start_time = time.time()
  18. while True:
  19. try:
  20. table = self.browser.find_element_by_id('id_list_table')
  21. rows = table.find_elements_by_tag_name('tr')
  22. self.assertIn(row_text, [row.text for row in rows])
  23. return
  24. except (AssertionError, WebDriverException) as e:
  25. if (time.time() - start_time) > MAX_WAIT:
  26. raise e
  27. time.sleep(0.1)
  28. def test_can_start_a_list_for_one_user(self):
  29. self.browser.get(self.live_server_url)
  30. self.assertIn('To-Do', self.browser.title)
  31. header_text = self.browser.find_element_by_tag_name('h1').text
  32. self.assertIn('To-Do', header_text)
  33. inputbox = self.browser.find_element_by_id('id_new_item')
  34. self.assertEqual(
  35. inputbox.get_attribute('placeholder'),
  36. 'Enter a to-do item'
  37. )
  38. # ITEM 1
  39. inputbox.send_keys('Buy rubber ducks')
  40. inputbox.send_keys(Keys.ENTER)
  41. self.wait_for_row_in_list_table('1: Buy rubber ducks')
  42. # ITEM 2
  43. inputbox = self.browser.find_element_by_id('id_new_item')
  44. inputbox.send_keys('Buy squirrel suits')
  45. inputbox.send_keys(Keys.ENTER)
  46. self.wait_for_row_in_list_table('1: Buy rubber ducks')
  47. self.wait_for_row_in_list_table('2: Buy squirrel suits')
  48. # Done?
  49. #self.fail('Finish the test!')
  50. def test_multi_users_can_start_list_diff_urls(self):
  51. self.browser.get(self.live_server_url)
  52. ib = self.browser.find_element_by_id('id_new_item')
  53. ib.send_keys('Buy super bugz outfit')
  54. ib.send_keys(Keys.ENTER)
  55. self.wait_for_row_in_list_table('1: Buy super bugz outfit')
  56. list_url = self.browser.current_url
  57. self.assertRegex(list_url, '/lists/.+')
  58. # NEW USER
  59. self.browser.quit()
  60. self.browser = webdriver.Chrome()
  61. self.browser.get(self.live_server_url)
  62. page_text = self.browser.find_element_by_tag_name('body').text
  63. self.assertNotIn('Buy super bugz outfit', page_text)
  64. self.assertNotIn('make a fly', page_text)
  65. inputbox = self.browser.find_element_by_id('id_new_item')
  66. inputbox.send_keys('Buy milk')
  67. inputbox.send_keys(Keys.ENTER)
  68. self.wait_for_row_in_list_table('1: Buy milk')
  69. francis_list_url = self.browser.current_url
  70. self.assertRegex(francis_list_url, '/lists/.+')
  71. self.assertNotEqual(francis_list_url, list_url)
  72. page_text = self.browser.find_element_by_tag_name('body').text
  73. self.assertNotIn('Buy peacock feathers', page_text)
  74. self.assertIn('Buy milk', page_text)
  75. def test_layout_and_styling(self):
  76. self.browser.get(self.live_server_url)
  77. self.browser.set_window_size(1024, 768)
  78. inputbox = self.browser.find_element_by_id('id_new_item')
  79. self.assertAlmostEqual(
  80. inputbox.location['x'] + inputbox.size['width'] / 2,
  81. 512,
  82. delta=10
  83. )
  84. inputbox.send_keys('testing')
  85. inputbox.send_keys(Keys.ENTER)
  86. self.wait_for_row_in_list_table('1: testing')
  87. inputbox = self.browser.find_element_by_id('id_new_item')
  88. self.assertAlmostEqual(
  89. inputbox.location['x'] + inputbox.size['width'] / 2,
  90. 512,
  91. delta=10
  92. )