refactored tests for less clunky explicit wait times
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
Reference in New Issue
Block a user