diff options
| author | antoliny0919 <antoliny0919@gmail.com> | 2025-07-20 22:12:15 +0900 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2025-07-30 17:32:39 +0200 |
| commit | 6ea331907996a51842da55c1f8d65eea7b367c7d (patch) | |
| tree | 3deaa0a318b80298438a366dd1808d4ef5be61ba /tests/admin_views | |
| parent | 792ca148a2d6da6cf0778f6a866c899208ab94f9 (diff) | |
Fixed #36511 -- Ensured filters came before table in keyboard navigation in admin changelist.
Diffstat (limited to 'tests/admin_views')
| -rw-r--r-- | tests/admin_views/admin.py | 2 | ||||
| -rw-r--r-- | tests/admin_views/test_skip_link_to_content.py | 44 |
2 files changed, 46 insertions, 0 deletions
diff --git a/tests/admin_views/admin.py b/tests/admin_views/admin.py index 95d16a4770..b6d009b388 100644 --- a/tests/admin_views/admin.py +++ b/tests/admin_views/admin.py @@ -431,6 +431,8 @@ class PodcastAdmin(admin.ModelAdmin): list_display = ("name", "release_date") list_editable = ("release_date",) date_hierarchy = "release_date" + list_filter = ("name",) + search_fields = ("name",) ordering = ("name",) diff --git a/tests/admin_views/test_skip_link_to_content.py b/tests/admin_views/test_skip_link_to_content.py index 3284b76495..5cec63307b 100644 --- a/tests/admin_views/test_skip_link_to_content.py +++ b/tests/admin_views/test_skip_link_to_content.py @@ -3,6 +3,8 @@ from django.contrib.auth.models import User from django.test import override_settings from django.urls import reverse +from .models import Podcast + @override_settings(ROOT_URLCONF="admin_views.urls") class SeleniumTests(AdminSeleniumTestCase): @@ -125,3 +127,45 @@ class SeleniumTests(AdminSeleniumTestCase): ) self.assertTrue(is_vertical_scrolleable) self.assertFalse(is_horizontal_scrolleable) + + def test_skip_link_keyboard_navigation_in_changelist(self): + from selenium.webdriver.common.by import By + from selenium.webdriver.common.keys import Keys + + Podcast.objects.create(name="apple", release_date="2000-09-19") + self.admin_login( + username="super", password="secret", login_url=reverse("admin:index") + ) + self.selenium.get( + self.live_server_url + reverse("admin:admin_views_podcast_changelist") + ) + selectors = [ + "ul.object-tools", # object_tools. + "search#changelist-filter", # list_filter. + "form#changelist-search", # search_fields. + "nav.toplinks", # date_hierarchy. + "form#changelist-form div.actions", # action. + "table#result_list", # table. + "div.changelist-footer", # footer. + ] + content = self.selenium.find_element(By.ID, "content-start") + content.send_keys(Keys.TAB) + + for selector in selectors: + with self.subTest(selector=selector): + # Currently focused element. + focused_element = self.selenium.switch_to.active_element + expected_element = self.selenium.find_element(By.CSS_SELECTOR, selector) + element_points = self.selenium.find_elements( + By.CSS_SELECTOR, + f"{selector} a, {selector} input, {selector} button", + ) + self.assertIn( + focused_element.get_attribute("outerHTML"), + expected_element.get_attribute("innerHTML"), + ) + # Move to the next container element via TAB. + for point in element_points[::-1]: + if point.is_displayed(): + point.send_keys(Keys.TAB) + break |
