Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Made a couple of selenium tests wait for page loaded

The admin_widgets tests were issuing click() to the browser but
didn't wait for the effects of those clicks. This caused the resulting
request to be processed concurrently with the test case. When using
in-memory SQLite this caused weird failures.

Also added wait_page_loaded() to admin selenium tests for code
reuse.

Fixed #19856
  • Loading branch information...
commit 50677b29af39ca670274fb45087415c883c78b04 1 parent 4e36e0a
@akaariai akaariai authored
View
17 django/contrib/admin/tests.py
@@ -41,6 +41,20 @@ def wait_loaded_tag(self, tag_name, timeout=10):
timeout
)
+ def wait_page_loaded(self):
+ """
+ Block until page has started to load.
+ """
+ from selenium.common.exceptions import TimeoutException
+ try:
+ # Wait for the next page to be loaded
+ self.wait_loaded_tag('body')
+ except TimeoutException:
+ # IE7 occasionnally returns an error "Internet Explorer cannot
+ # display the webpage" and doesn't load the next page. We just
+ # ignore it.
+ pass
+
def admin_login(self, username, password, login_url='/admin/'):
"""
Helper function to log into the admin.
@@ -53,8 +67,7 @@ def admin_login(self, username, password, login_url='/admin/'):
login_text = _('Log in')
self.selenium.find_element_by_xpath(
'//input[@value="%s"]' % login_text).click()
- # Wait for the next page to be loaded.
- self.wait_loaded_tag('body')
+ self.wait_page_loaded()
def get_css_value(self, selector, attribute):
"""
View
10 tests/regressiontests/admin_inlines/tests.py
@@ -546,15 +546,7 @@ def test_add_inlines(self):
self.selenium.find_element_by_name('profile_set-2-last_name').send_keys('2 last name 2')
self.selenium.find_element_by_xpath('//input[@value="Save"]').click()
-
- try:
- # Wait for the next page to be loaded.
- self.wait_loaded_tag('body')
- except TimeoutException:
- # IE7 occasionnally returns an error "Internet Explorer cannot
- # display the webpage" and doesn't load the next page. We just
- # ignore it.
- pass
+ self.wait_page_loaded()
# Check that the objects have been created in the database
self.assertEqual(ProfileCollection.objects.all().count(), 1)
View
11 tests/regressiontests/admin_views/tests.py
@@ -3262,16 +3262,7 @@ def test_prepopulated_fields(self):
# Save and check that everything is properly stored in the database
self.selenium.find_element_by_xpath('//input[@value="Save"]').click()
-
- try:
- # Wait for the next page to be loaded.
- self.wait_loaded_tag('body')
- except TimeoutException:
- # IE7 occasionnally returns an error "Internet Explorer cannot
- # display the webpage" and doesn't load the next page. We just
- # ignore it.
- pass
-
+ self.wait_page_loaded()
self.assertEqual(MainPrepopulated.objects.all().count(), 1)
MainPrepopulated.objects.get(
name=' this is the mAin nÀMë and it\'s awεšome',
View
5 tests/regressiontests/admin_widgets/tests.py
@@ -644,12 +644,14 @@ def test_basic(self):
self.selenium.get(
'%s%s' % (self.live_server_url, '/admin_widgets/school/%s/' % self.school.id))
+ self.wait_page_loaded()
self.execute_basic_operations('vertical', 'students')
self.execute_basic_operations('horizontal', 'alumni')
# Save and check that everything is properly stored in the database ---
self.selenium.find_element_by_xpath('//input[@value="Save"]').click()
- self.school = models.School.objects.get(id=self.school.id) # Reload from database
+ self.wait_page_loaded()
+ self.school = models.School.objects.get(id=self.school.id) # Reload from database
self.assertEqual(list(self.school.students.all()),
[self.arthur, self.cliff, self.jason, self.john])
self.assertEqual(list(self.school.alumni.all()),
@@ -728,6 +730,7 @@ def test_filter(self):
# Save and check that everything is properly stored in the database ---
self.selenium.find_element_by_xpath('//input[@value="Save"]').click()
+ self.wait_page_loaded()
self.school = models.School.objects.get(id=self.school.id) # Reload from database
self.assertEqual(list(self.school.students.all()),
[self.jason, self.peter])
Please sign in to comment.
Something went wrong with that request. Please try again.