summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2015-08-19 20:43:27 -0400
committerTim Graham <timograham@gmail.com>2015-08-28 13:54:03 -0400
commit7ac0cd445e056cac9bfc1fed11026ab6c74b8818 (patch)
tree59094a75d49e1319d29daa38211b1e14717fb416
parent01b2b0b6543afdaf30623b7a779b7fe4514a9c7b (diff)
Fixed #25323 -- Fixed selenium test failures with chromedriver 2.18.
-rw-r--r--django/contrib/admin/tests.py7
-rw-r--r--tests/admin_views/tests.py10
-rw-r--r--tests/admin_widgets/tests.py19
3 files changed, 22 insertions, 14 deletions
diff --git a/django/contrib/admin/tests.py b/django/contrib/admin/tests.py
index d7780da210..5415d5fcaa 100644
--- a/django/contrib/admin/tests.py
+++ b/django/contrib/admin/tests.py
@@ -45,6 +45,13 @@ class AdminSeleniumWebDriverTestCase(StaticLiveServerTestCase):
from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait(self.selenium, timeout).until(callback)
+ def wait_for_popup(self, num_windows=2, timeout=10):
+ """
+ Block until `num_windows` are present (usually 2, but can be
+ overridden in the case of pop-ups opening other pop-ups).
+ """
+ self.wait_until(lambda d: len(d.window_handles) == num_windows, timeout)
+
def wait_loaded_tag(self, tag_name, timeout=10):
"""
Helper function that blocks until the element with the given tag name
diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py
index acdd8bf1f3..12241ecb97 100644
--- a/tests/admin_views/tests.py
+++ b/tests/admin_views/tests.py
@@ -4607,8 +4607,11 @@ class SeleniumAdminViewsFirefoxTests(AdminSeleniumWebDriverTestCase):
self.admin_login(username='super', password='secret', login_url=reverse('admin:index'))
self.selenium.get(full_url)
self.selenium.find_element_by_class_name('deletelink').click()
+ # Wait until we're on the delete page.
+ self.wait_for('.cancel-link')
self.selenium.find_element_by_class_name('cancel-link').click()
- self.wait_page_loaded()
+ # Wait until we're back on the change page.
+ self.wait_for_text('#content h1', 'Change pizza')
self.assertEqual(self.selenium.current_url, full_url)
self.assertEqual(Pizza.objects.count(), 1)
@@ -4626,8 +4629,11 @@ class SeleniumAdminViewsFirefoxTests(AdminSeleniumWebDriverTestCase):
self.admin_login(username='super', password='secret', login_url=reverse('admin:index'))
self.selenium.get(full_url)
self.selenium.find_element_by_class_name('deletelink').click()
+ # Wait until we're on the delete page.
+ self.wait_for('.cancel-link')
self.selenium.find_element_by_class_name('cancel-link').click()
- self.wait_page_loaded()
+ # Wait until we're back on the change page.
+ self.wait_for_text('#content h1', 'Change pizza')
self.assertEqual(self.selenium.current_url, full_url)
self.assertEqual(Pizza.objects.count(), 1)
self.assertEqual(Topping.objects.count(), 2)
diff --git a/tests/admin_widgets/tests.py b/tests/admin_widgets/tests.py
index f34ecc659e..efdc7eab93 100644
--- a/tests/admin_widgets/tests.py
+++ b/tests/admin_widgets/tests.py
@@ -766,13 +766,8 @@ class DateTimePickerSeleniumFirefoxTests(SeleniumDataMixin, AdminSeleniumWebDriv
# Click on the calendar icon
self.selenium.find_element_by_id('calendarlink0').click()
-
- # Get the calendar caption
- calendar0 = self.selenium.find_element_by_id('calendarin0')
- caption = calendar0.find_element_by_tag_name('caption')
-
# Make sure that the right month and year are displayed
- self.assertEqual(caption.text, expected_caption)
+ self.wait_for_text('#calendarin0 caption', expected_caption)
class DateTimePickerSeleniumChromeTests(DateTimePickerSeleniumFirefoxTests):
@@ -1130,8 +1125,8 @@ class AdminRawIdWidgetSeleniumFirefoxTests(SeleniumDataMixin, AdminSeleniumWebDr
# Open the popup window and click on a band
self.selenium.find_element_by_id('lookup_id_main_band').click()
+ self.wait_for_popup()
self.selenium.switch_to.window('id_main_band')
- self.wait_page_loaded()
link = self.selenium.find_element_by_link_text('Bogey Blues')
self.assertIn('/band/42/', link.get_attribute('href'))
link.click()
@@ -1142,8 +1137,8 @@ class AdminRawIdWidgetSeleniumFirefoxTests(SeleniumDataMixin, AdminSeleniumWebDr
# Reopen the popup window and click on another band
self.selenium.find_element_by_id('lookup_id_main_band').click()
+ self.wait_for_popup()
self.selenium.switch_to.window('id_main_band')
- self.wait_page_loaded()
link = self.selenium.find_element_by_link_text('Green Potatoes')
self.assertIn('/band/98/', link.get_attribute('href'))
link.click()
@@ -1165,8 +1160,8 @@ class AdminRawIdWidgetSeleniumFirefoxTests(SeleniumDataMixin, AdminSeleniumWebDr
# Open the popup window and click on a band
self.selenium.find_element_by_id('lookup_id_supporting_bands').click()
+ self.wait_for_popup()
self.selenium.switch_to.window('id_supporting_bands')
- self.wait_page_loaded()
link = self.selenium.find_element_by_link_text('Bogey Blues')
self.assertIn('/band/42/', link.get_attribute('href'))
link.click()
@@ -1177,8 +1172,8 @@ class AdminRawIdWidgetSeleniumFirefoxTests(SeleniumDataMixin, AdminSeleniumWebDr
# Reopen the popup window and click on another band
self.selenium.find_element_by_id('lookup_id_supporting_bands').click()
+ self.wait_for_popup()
self.selenium.switch_to.window('id_supporting_bands')
- self.wait_page_loaded()
link = self.selenium.find_element_by_link_text('Green Potatoes')
self.assertIn('/band/98/', link.get_attribute('href'))
link.click()
@@ -1211,8 +1206,8 @@ class RelatedFieldWidgetSeleniumFirefoxTests(SeleniumDataMixin, AdminSeleniumWeb
main_window = self.selenium.current_window_handle
# Click the Add User button to add new
self.selenium.find_element_by_id('add_id_user').click()
+ self.wait_for_popup()
self.selenium.switch_to.window('id_user')
- self.wait_for('#id_password')
password_field = self.selenium.find_element_by_id('id_password')
password_field.send_keys('password')
@@ -1228,8 +1223,8 @@ class RelatedFieldWidgetSeleniumFirefoxTests(SeleniumDataMixin, AdminSeleniumWeb
# Click the Change User button to change it
self.selenium.find_element_by_id('change_id_user').click()
+ self.wait_for_popup()
self.selenium.switch_to.window('id_user')
- self.wait_page_loaded()
username_field = self.selenium.find_element_by_id('id_username')
username_value = 'changednewuser'