refactored tests for less clunky explicit wait times

This commit is contained in:
Disco DeDisco
2026-01-01 17:52:19 -05:00
parent 8b3d82fff5
commit 4af36ca49c
2 changed files with 20 additions and 10 deletions

View File

@@ -9,7 +9,7 @@ class HomePageTest(TestCase):
def test_renders_input_form(self): def test_renders_input_form(self):
response = self.client.get('/') response = self.client.get('/')
self.assertContains(response, '<form method="POST">') self.assertContains(response, '<form method="POST">')
self.assertContains(response, '<input name="item-text"') self.assertContains(response, '<input name="item_text"')
def test_displays_all_list_items(self): def test_displays_all_list_items(self):
# Given/Arrange # Given/Arrange

View File

@@ -1,10 +1,13 @@
from django.test import LiveServerTestCase from django.test import LiveServerTestCase
from selenium import webdriver from selenium import webdriver
from selenium.common.exceptions import WebDriverException
from selenium.webdriver.common.by import By from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.keys import Keys
import time import time
import unittest import unittest
MAX_WAIT = 5
class NewVisitorTest(LiveServerTestCase): class NewVisitorTest(LiveServerTestCase):
# Helper methods # Helper methods
def setUp(self): def setUp(self):
@@ -13,10 +16,18 @@ class NewVisitorTest(LiveServerTestCase):
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):
start_time = time.time()
while True:
try:
table = self.browser.find_element(By.ID, 'id-list-table') table = self.browser.find_element(By.ID, 'id-list-table')
rows = table.find_elements(By.TAG_NAME, 'tr') rows = table.find_elements(By.TAG_NAME, 'tr')
self.assertIn(row_text, [row.text for row in rows]) self.assertIn(row_text, [row.text for row in rows])
return
except (AssertionError, WebDriverException):
if time.time() - start_time > MAX_WAIT:
raise
time.sleep(0.5)
# Test methods # Test methods
def test_can_start_a_todo_list(self): def test_can_start_a_todo_list(self):
@@ -32,12 +43,11 @@ class NewVisitorTest(LiveServerTestCase):
inputbox.send_keys('Buy peacock feathers') inputbox.send_keys('Buy peacock feathers')
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')
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)
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')
self.check_for_row_in_list_table('1: Buy peacock feathers') self.wait_for_row_in_list_table('1: Buy peacock feathers')