diff --git a/django/contrib/admin/tests.py b/django/contrib/admin/tests.py index 9ad817d4a7..2491fc65b1 100644 --- a/django/contrib/admin/tests.py +++ b/django/contrib/admin/tests.py @@ -79,7 +79,7 @@ class AdminSeleniumWebDriverTestCase(LiveServerTestCase): identified by the CSS selector `selector`. """ from selenium.common.exceptions import NoSuchElementException - options = self.selenium.find_elements_by_css_selector('%s option' % selector) + options = self.selenium.find_elements_by_css_selector('%s > option' % selector) for option in options: if option.get_attribute('value') == value: return option @@ -90,7 +90,7 @@ class AdminSeleniumWebDriverTestCase(LiveServerTestCase): Asserts that the <SELECT> widget identified by `selector` has the options with the given `values`. """ - options = self.selenium.find_elements_by_css_selector('%s option' % selector) + options = self.selenium.find_elements_by_css_selector('%s > option' % selector) actual_values = [] for option in options: actual_values.append(option.get_attribute('value')) diff --git a/tests/regressiontests/admin_inlines/tests.py b/tests/regressiontests/admin_inlines/tests.py index bb8418be21..8b620cc57d 100644 --- a/tests/regressiontests/admin_inlines/tests.py +++ b/tests/regressiontests/admin_inlines/tests.py @@ -394,6 +394,7 @@ class SeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): Ensure that the "Add another XXX" link correctly adds items to the inline form. """ + from selenium.common.exceptions import TimeoutException self.admin_login(username='super', password='secret') self.selenium.get('%s%s' % (self.live_server_url, '/admin/admin_inlines/profilecollection/add/')) @@ -401,14 +402,14 @@ class SeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): # Check that there's only one inline to start with and that it has the # correct ID. self.failUnlessEqual(len(self.selenium.find_elements_by_css_selector( - '#profile_set-group table tr.dynamic-profile_set')), 1) - self.failUnlessEqual(self.selenium.find_element_by_css_selector( - '.dynamic-profile_set:nth-of-type(1)').get_attribute('id'), + '.dynamic-profile_set')), 1) + self.failUnlessEqual(self.selenium.find_elements_by_css_selector( + '.dynamic-profile_set')[0].get_attribute('id'), 'profile_set-0') self.failUnlessEqual(len(self.selenium.find_elements_by_css_selector( - 'form#profilecollection_form tr.dynamic-profile_set#profile_set-0 input[name=profile_set-0-first_name]')), 1) + '.dynamic-profile_set#profile_set-0 input[name=profile_set-0-first_name]')), 1) self.failUnlessEqual(len(self.selenium.find_elements_by_css_selector( - 'form#profilecollection_form tr.dynamic-profile_set#profile_set-0 input[name=profile_set-0-last_name]')), 1) + '.dynamic-profile_set#profile_set-0 input[name=profile_set-0-last_name]')), 1) # Add an inline self.selenium.find_element_by_link_text('Add another Profile').click() @@ -416,24 +417,24 @@ class SeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): # Check that the inline has been added, that it has the right id, and # that it contains the right fields. self.failUnlessEqual(len(self.selenium.find_elements_by_css_selector( - '#profile_set-group table tr.dynamic-profile_set')), 2) - self.failUnlessEqual(self.selenium.find_element_by_css_selector( - '.dynamic-profile_set:nth-of-type(2)').get_attribute('id'), 'profile_set-1') + '.dynamic-profile_set')), 2) + self.failUnlessEqual(self.selenium.find_elements_by_css_selector( + '.dynamic-profile_set')[1].get_attribute('id'), 'profile_set-1') self.failUnlessEqual(len(self.selenium.find_elements_by_css_selector( - 'form#profilecollection_form tr.dynamic-profile_set#profile_set-1 input[name=profile_set-1-first_name]')), 1) + '.dynamic-profile_set#profile_set-1 input[name=profile_set-1-first_name]')), 1) self.failUnlessEqual(len(self.selenium.find_elements_by_css_selector( - 'form#profilecollection_form tr.dynamic-profile_set#profile_set-1 input[name=profile_set-1-last_name]')), 1) + '.dynamic-profile_set#profile_set-1 input[name=profile_set-1-last_name]')), 1) # Let's add another one to be sure self.selenium.find_element_by_link_text('Add another Profile').click() self.failUnlessEqual(len(self.selenium.find_elements_by_css_selector( - '#profile_set-group table tr.dynamic-profile_set')), 3) - self.failUnlessEqual(self.selenium.find_element_by_css_selector( - '.dynamic-profile_set:nth-of-type(3)').get_attribute('id'), 'profile_set-2') + '.dynamic-profile_set')), 3) + self.failUnlessEqual(self.selenium.find_elements_by_css_selector( + '.dynamic-profile_set')[2].get_attribute('id'), 'profile_set-2') self.failUnlessEqual(len(self.selenium.find_elements_by_css_selector( - 'form#profilecollection_form tr.dynamic-profile_set#profile_set-2 input[name=profile_set-2-first_name]')), 1) + '.dynamic-profile_set#profile_set-2 input[name=profile_set-2-first_name]')), 1) self.failUnlessEqual(len(self.selenium.find_elements_by_css_selector( - 'form#profilecollection_form tr.dynamic-profile_set#profile_set-2 input[name=profile_set-2-last_name]')), 1) + '.dynamic-profile_set#profile_set-2 input[name=profile_set-2-last_name]')), 1) # Enter some data and click 'Save' self.selenium.find_element_by_name('profile_set-0-first_name').send_keys('0 first name 1') @@ -442,10 +443,17 @@ class SeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): self.selenium.find_element_by_name('profile_set-1-last_name').send_keys('1 last name 2') self.selenium.find_element_by_name('profile_set-2-first_name').send_keys('2 first name 1') 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() - # Wait for the next page to be loaded. - self.wait_loaded_tag('body') + 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 # Check that the objects have been created in the database self.assertEqual(ProfileCollection.objects.all().count(), 1) @@ -491,4 +499,7 @@ class SeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): class SeleniumChromeTests(SeleniumFirefoxTests): - webdriver_class = 'selenium.webdriver.chrome.webdriver.WebDriver' \ No newline at end of file + webdriver_class = 'selenium.webdriver.chrome.webdriver.WebDriver' + +class SeleniumIETests(SeleniumFirefoxTests): + webdriver_class = 'selenium.webdriver.ie.webdriver.WebDriver' \ No newline at end of file diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py index 5241d263a7..12f1c677af 100755 --- a/tests/regressiontests/admin_views/tests.py +++ b/tests/regressiontests/admin_views/tests.py @@ -2934,6 +2934,7 @@ class SeleniumPrePopulatedFirefoxTests(AdminSeleniumWebDriverTestCase): main form and with stacked and tabular inlines. Refs #13068, #9264, #9983, #9784. """ + from selenium.common.exceptions import TimeoutException self.admin_login(username='super', password='secret', login_url='/test_admin/admin/') self.selenium.get('%s%s' % (self.live_server_url, '/test_admin/admin/admin_views/mainprepopulated/add/')) @@ -2958,7 +2959,7 @@ class SeleniumPrePopulatedFirefoxTests(AdminSeleniumWebDriverTestCase): self.assertEqual(slug2, 'option-one-here-stacked-inline') # Add an inline - self.selenium.find_element_by_css_selector('#relatedprepopulated_set-group .add-row a').click() + self.selenium.find_elements_by_link_text('Add another Related Prepopulated')[0].click() self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-1-pubdate').send_keys('1999-01-25') self.get_select_option('#id_relatedprepopulated_set-1-status', 'option two').click() self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-1-name').send_keys(u' now you haVe anöther sŤāÇkeð inline with a very ... loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog text... ') @@ -2978,7 +2979,7 @@ class SeleniumPrePopulatedFirefoxTests(AdminSeleniumWebDriverTestCase): self.assertEqual(slug2, 'option-two-and-now-tabular-inline') # Add an inline - self.selenium.find_element_by_css_selector('#relatedprepopulated_set-2-group .add-row a').click() + self.selenium.find_elements_by_link_text('Add another Related Prepopulated')[1].click() self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-2-1-pubdate').send_keys('1981-08-22') self.get_select_option('#id_relatedprepopulated_set-2-1-status', 'option one').click() self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-2-1-name').send_keys(u'a tÃbűlaŘ inline with ignored ;"&*^\%$#@-/`~ characters') @@ -2989,6 +2990,16 @@ class SeleniumPrePopulatedFirefoxTests(AdminSeleniumWebDriverTestCase): # 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.assertEqual(MainPrepopulated.objects.all().count(), 1) MainPrepopulated.objects.get( name=u' this is the mAin nÀMë and it\'s awεšome', @@ -3031,6 +3042,9 @@ class SeleniumPrePopulatedFirefoxTests(AdminSeleniumWebDriverTestCase): class SeleniumPrePopulatedChromeTests(SeleniumPrePopulatedFirefoxTests): webdriver_class = 'selenium.webdriver.chrome.webdriver.WebDriver' +class SeleniumPrePopulatedIETests(SeleniumPrePopulatedFirefoxTests): + webdriver_class = 'selenium.webdriver.ie.webdriver.WebDriver' + class ReadonlyTest(TestCase): urls = "regressiontests.admin_views.urls" diff --git a/tests/regressiontests/admin_widgets/tests.py b/tests/regressiontests/admin_widgets/tests.py index 94ee5a9fe9..87e0309ddc 100644 --- a/tests/regressiontests/admin_widgets/tests.py +++ b/tests/regressiontests/admin_widgets/tests.py @@ -462,6 +462,9 @@ class DateTimePickerSeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): class DateTimePickerSeleniumChromeTests(DateTimePickerSeleniumFirefoxTests): webdriver_class = 'selenium.webdriver.chrome.webdriver.WebDriver' +class DateTimePickerSeleniumIETests(DateTimePickerSeleniumFirefoxTests): + webdriver_class = 'selenium.webdriver.ie.webdriver.WebDriver' + class HorizontalVerticalFilterSeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): webdriver_class = 'selenium.webdriver.firefox.webdriver.WebDriver' @@ -515,7 +518,7 @@ class HorizontalVerticalFilterSeleniumFirefoxTests(AdminSeleniumWebDriverTestCas elif mode == 'vertical': # There 's no 'Choose all' button in vertical mode, so individually # select all options and click 'Choose'. - for option in self.selenium.find_elements_by_css_selector(from_box + ' option'): + for option in self.selenium.find_elements_by_css_selector(from_box + ' > option'): option.click() self.selenium.find_element_by_id(choose_link).click() self.assertSelectOptions(from_box, []) @@ -532,7 +535,7 @@ class HorizontalVerticalFilterSeleniumFirefoxTests(AdminSeleniumWebDriverTestCas elif mode == 'vertical': # There 's no 'Remove all' button in vertical mode, so individually # select all options and click 'Remove'. - for option in self.selenium.find_elements_by_css_selector(to_box + ' option'): + for option in self.selenium.find_elements_by_css_selector(to_box + ' > option'): option.click() self.selenium.find_element_by_id(remove_link).click() self.assertSelectOptions(from_box, @@ -685,4 +688,7 @@ class HorizontalVerticalFilterSeleniumFirefoxTests(AdminSeleniumWebDriverTestCas [self.jason, self.peter]) class HorizontalVerticalFilterSeleniumChromeTests(HorizontalVerticalFilterSeleniumFirefoxTests): - webdriver_class = 'selenium.webdriver.chrome.webdriver.WebDriver' \ No newline at end of file + webdriver_class = 'selenium.webdriver.chrome.webdriver.WebDriver' + +class HorizontalVerticalFilterSeleniumIETests(HorizontalVerticalFilterSeleniumFirefoxTests): + webdriver_class = 'selenium.webdriver.ie.webdriver.WebDriver' \ No newline at end of file