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):
response = self.client.get('/')
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):
# Given/Arrange

View File

@@ -1,10 +1,13 @@
from django.test import LiveServerTestCase
from selenium import webdriver
from selenium.common.exceptions import WebDriverException
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import unittest
MAX_WAIT = 5
class NewVisitorTest(LiveServerTestCase):
# Helper methods
def setUp(self):
@@ -13,10 +16,18 @@ class NewVisitorTest(LiveServerTestCase):
def tearDown(self):
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')
rows = table.find_elements(By.TAG_NAME, 'tr')
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
def test_can_start_a_todo_list(self):
@@ -32,12 +43,11 @@ class NewVisitorTest(LiveServerTestCase):
inputbox.send_keys('Buy peacock feathers')
inputbox.send_keys(Keys.ENTER)
time.sleep(1)
self.check_for_row_in_list_table('1: Buy peacock feathers')
self.wait_for_row_in_list_table('1: Buy peacock feathers')
inputbox = self.browser.find_element(By.ID, 'id-new-item')
inputbox.send_keys('Use peacock feathers to make a fly')
inputbox.send_keys(Keys.ENTER)
time.sleep(1)
self.check_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('2: Use peacock feathers to make a fly')
self.wait_for_row_in_list_table('1: Buy peacock feathers')