mirror of
https://github.com/django/django.git
synced 2025-11-07 07:15:35 +00:00
Fixed #36511 -- Ensured filters came before table in keyboard navigation in admin changelist.
This commit is contained in:
committed by
Sarah Boyce
parent
792ca148a2
commit
6ea3319079
@@ -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",)
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user