Fakultas Ilmu Komputer UI

Commit c264d8e2 authored by emil farisan's avatar emil farisan
Browse files

Finish Chapter 6

parent 0ea0536b
from django.test import LiveServerTestCase 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
MAX_WAIT = 10
class NewVisitorTest(LiveServerTestCase): class NewVisitorTest(LiveServerTestCase):
def setUp(self): def setUp(self):
...@@ -12,10 +15,18 @@ class NewVisitorTest(LiveServerTestCase): ...@@ -12,10 +15,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):
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_nothing')
rows = table.find_elements_by_tag_name('tr')
self.assertIn(row_text, [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
...@@ -41,8 +52,7 @@ class NewVisitorTest(LiveServerTestCase): ...@@ -41,8 +52,7 @@ class NewVisitorTest(LiveServerTestCase):
# 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" # enters "Use peacock feathers to make a fly"
...@@ -50,11 +60,10 @@ class NewVisitorTest(LiveServerTestCase): ...@@ -50,11 +60,10 @@ class NewVisitorTest(LiveServerTestCase):
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
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment