Fixed #26048 -- Made admin selenium tests use implicitly_wait()
This commit is contained in:
parent
bc7d201bdb
commit
294d0d8815
|
@ -37,6 +37,7 @@ class AdminSeleniumWebDriverTestCase(StaticLiveServerTestCase):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise SkipTest('Selenium webdriver "%s" not installed or not '
|
raise SkipTest('Selenium webdriver "%s" not installed or not '
|
||||||
'operational: %s' % (cls.webdriver_class, str(e)))
|
'operational: %s' % (cls.webdriver_class, str(e)))
|
||||||
|
cls.selenium.implicitly_wait(10)
|
||||||
# This has to be last to ensure that resources are cleaned up properly!
|
# This has to be last to ensure that resources are cleaned up properly!
|
||||||
super(AdminSeleniumWebDriverTestCase, cls).setUpClass()
|
super(AdminSeleniumWebDriverTestCase, cls).setUpClass()
|
||||||
|
|
||||||
|
@ -63,13 +64,6 @@ class AdminSeleniumWebDriverTestCase(StaticLiveServerTestCase):
|
||||||
"""
|
"""
|
||||||
self.wait_until(lambda d: len(d.window_handles) == num_windows, timeout)
|
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
|
|
||||||
is found on the page.
|
|
||||||
"""
|
|
||||||
self.wait_for(tag_name, timeout)
|
|
||||||
|
|
||||||
def wait_for(self, css_selector, timeout=10):
|
def wait_for(self, css_selector, timeout=10):
|
||||||
"""
|
"""
|
||||||
Helper function that blocks until a CSS selector is found on the page.
|
Helper function that blocks until a CSS selector is found on the page.
|
||||||
|
@ -112,7 +106,7 @@ class AdminSeleniumWebDriverTestCase(StaticLiveServerTestCase):
|
||||||
from selenium.common.exceptions import TimeoutException
|
from selenium.common.exceptions import TimeoutException
|
||||||
try:
|
try:
|
||||||
# Wait for the next page to be loaded
|
# Wait for the next page to be loaded
|
||||||
self.wait_loaded_tag('body')
|
self.wait_for('body')
|
||||||
except TimeoutException:
|
except TimeoutException:
|
||||||
# IE7 occasionally returns an error "Internet Explorer cannot
|
# IE7 occasionally returns an error "Internet Explorer cannot
|
||||||
# display the webpage" and doesn't load the next page. We just
|
# display the webpage" and doesn't load the next page. We just
|
||||||
|
|
|
@ -900,6 +900,7 @@ The code for this test may look as follows::
|
||||||
def setUpClass(cls):
|
def setUpClass(cls):
|
||||||
super(MySeleniumTests, cls).setUpClass()
|
super(MySeleniumTests, cls).setUpClass()
|
||||||
cls.selenium = WebDriver()
|
cls.selenium = WebDriver()
|
||||||
|
cls.selenium.implicitly_wait(10)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def tearDownClass(cls):
|
def tearDownClass(cls):
|
||||||
|
|
|
@ -4430,8 +4430,7 @@ class SeleniumAdminViewsFirefoxTests(AdminSeleniumWebDriverTestCase):
|
||||||
self.admin_login(username='super', password='secret', login_url=reverse('admin:index'))
|
self.admin_login(username='super', password='secret', login_url=reverse('admin:index'))
|
||||||
self.selenium.get(full_url)
|
self.selenium.get(full_url)
|
||||||
self.selenium.find_element_by_class_name('deletelink').click()
|
self.selenium.find_element_by_class_name('deletelink').click()
|
||||||
# Wait until we're on the delete page.
|
# Click 'cancel' on the delete page.
|
||||||
self.wait_for('.cancel-link')
|
|
||||||
self.selenium.find_element_by_class_name('cancel-link').click()
|
self.selenium.find_element_by_class_name('cancel-link').click()
|
||||||
# Wait until we're back on the change page.
|
# Wait until we're back on the change page.
|
||||||
self.wait_for_text('#content h1', 'Change pizza')
|
self.wait_for_text('#content h1', 'Change pizza')
|
||||||
|
@ -4452,8 +4451,7 @@ class SeleniumAdminViewsFirefoxTests(AdminSeleniumWebDriverTestCase):
|
||||||
self.admin_login(username='super', password='secret', login_url=reverse('admin:index'))
|
self.admin_login(username='super', password='secret', login_url=reverse('admin:index'))
|
||||||
self.selenium.get(full_url)
|
self.selenium.get(full_url)
|
||||||
self.selenium.find_element_by_class_name('deletelink').click()
|
self.selenium.find_element_by_class_name('deletelink').click()
|
||||||
# Wait until we're on the delete page.
|
# Click 'cancel' on the delete page.
|
||||||
self.wait_for('.cancel-link')
|
|
||||||
self.selenium.find_element_by_class_name('cancel-link').click()
|
self.selenium.find_element_by_class_name('cancel-link').click()
|
||||||
# Wait until we're back on the change page.
|
# Wait until we're back on the change page.
|
||||||
self.wait_for_text('#content h1', 'Change pizza')
|
self.wait_for_text('#content h1', 'Change pizza')
|
||||||
|
|
|
@ -1154,7 +1154,6 @@ class HorizontalVerticalFilterSeleniumFirefoxTests(SeleniumDataMixin, AdminSelen
|
||||||
# Navigate away and go back to the change form page.
|
# Navigate away and go back to the change form page.
|
||||||
self.selenium.find_element_by_link_text('Home').click()
|
self.selenium.find_element_by_link_text('Home').click()
|
||||||
self.selenium.back()
|
self.selenium.back()
|
||||||
self.wait_for('#id_students_from')
|
|
||||||
expected_unselected_values = [
|
expected_unselected_values = [
|
||||||
str(self.arthur.id), str(self.bob.id), str(self.cliff.id),
|
str(self.arthur.id), str(self.bob.id), str(self.cliff.id),
|
||||||
str(self.jason.id), str(self.jenny.id), str(self.john.id),
|
str(self.jason.id), str(self.jenny.id), str(self.john.id),
|
||||||
|
@ -1306,7 +1305,6 @@ class RelatedFieldWidgetSeleniumFirefoxTests(SeleniumDataMixin, AdminSeleniumWeb
|
||||||
self.selenium.find_element_by_id('add_id_user').click()
|
self.selenium.find_element_by_id('add_id_user').click()
|
||||||
self.wait_for_popup()
|
self.wait_for_popup()
|
||||||
self.selenium.switch_to.window('id_user')
|
self.selenium.switch_to.window('id_user')
|
||||||
self.wait_for('#id_password')
|
|
||||||
password_field = self.selenium.find_element_by_id('id_password')
|
password_field = self.selenium.find_element_by_id('id_password')
|
||||||
password_field.send_keys('password')
|
password_field.send_keys('password')
|
||||||
|
|
||||||
|
@ -1318,14 +1316,13 @@ class RelatedFieldWidgetSeleniumFirefoxTests(SeleniumDataMixin, AdminSeleniumWeb
|
||||||
self.selenium.find_element_by_css_selector(save_button_css_selector).click()
|
self.selenium.find_element_by_css_selector(save_button_css_selector).click()
|
||||||
self.selenium.switch_to.window(main_window)
|
self.selenium.switch_to.window(main_window)
|
||||||
# The field now contains the new user
|
# The field now contains the new user
|
||||||
self.wait_for('#id_user option[value="newuser"]')
|
self.assertSelectOptions('#id_user', ['', 'super', 'newuser'])
|
||||||
|
|
||||||
# Click the Change User button to change it
|
# Click the Change User button to change it
|
||||||
self.selenium.find_element_by_id('change_id_user').click()
|
self.selenium.find_element_by_id('change_id_user').click()
|
||||||
self.wait_for_popup()
|
self.wait_for_popup()
|
||||||
self.selenium.switch_to.window('id_user')
|
self.selenium.switch_to.window('id_user')
|
||||||
|
|
||||||
self.wait_for('#id_username')
|
|
||||||
username_field = self.selenium.find_element_by_id('id_username')
|
username_field = self.selenium.find_element_by_id('id_username')
|
||||||
username_value = 'changednewuser'
|
username_value = 'changednewuser'
|
||||||
username_field.clear()
|
username_field.clear()
|
||||||
|
|
Loading…
Reference in New Issue