mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
chore: do not disable fieldset legend (#35063)
This commit is contained in:
parent
ad0581fafb
commit
a52ad0743e
@ -1005,13 +1005,12 @@ function isNativelyDisabled(element: Element) {
|
||||
return isNativeFormControl && (element.hasAttribute('disabled') || belongsToDisabledFieldSet(element));
|
||||
}
|
||||
|
||||
function belongsToDisabledFieldSet(element: Element | null): boolean {
|
||||
if (!element)
|
||||
function belongsToDisabledFieldSet(element: Element): boolean {
|
||||
const fieldSetElement = element?.closest('FIELDSET[DISABLED]');
|
||||
if (!fieldSetElement)
|
||||
return false;
|
||||
if (elementSafeTagName(element) === 'FIELDSET' && element.hasAttribute('disabled'))
|
||||
return true;
|
||||
// fieldset does not work across shadow boundaries.
|
||||
return belongsToDisabledFieldSet(element.parentElement);
|
||||
const legendElement = fieldSetElement.querySelector(':scope > LEGEND');
|
||||
return !legendElement || !legendElement.contains(element);
|
||||
}
|
||||
|
||||
function hasExplicitAriaDisabled(element: Element | undefined): boolean {
|
||||
|
||||
@ -243,6 +243,48 @@ test('should support disabled', async ({ page }) => {
|
||||
]);
|
||||
});
|
||||
|
||||
test('should support disabled fieldset', async ({ page }) => {
|
||||
await page.setContent(`
|
||||
<fieldset disabled>
|
||||
<input></input>
|
||||
<button data-testid="inside-fieldset-element">x</button>
|
||||
<legend>
|
||||
<button data-testid="inside-legend-element">legend</button>
|
||||
</legend>
|
||||
</fieldset>
|
||||
|
||||
<fieldset disabled>
|
||||
<legend>
|
||||
<div>
|
||||
<button data-testid="nested-inside-legend-element">x</button>
|
||||
</div>
|
||||
</legend>
|
||||
</fieldset>
|
||||
|
||||
<fieldset disabled>
|
||||
<div></div>
|
||||
<legend>
|
||||
<button data-testid="first-legend-element">x</button>
|
||||
</legend>
|
||||
<legend>
|
||||
<button data-testid="second-legend-element">x</button>
|
||||
</legend>
|
||||
</fieldset>
|
||||
|
||||
<fieldset disabled>
|
||||
<fieldset>
|
||||
<button data-testid="deep-button">x</button>
|
||||
</fieldset>
|
||||
</fieldset>
|
||||
`);
|
||||
|
||||
await expect.soft(page.getByTestId('inside-legend-element')).toBeEnabled();
|
||||
await expect.soft(page.getByTestId('nested-inside-legend-element')).toBeEnabled();
|
||||
await expect.soft(page.getByTestId('first-legend-element')).toBeEnabled();
|
||||
await expect.soft(page.getByTestId('second-legend-element')).toBeDisabled();
|
||||
await expect.soft(page.getByTestId('deep-button')).toBeDisabled();
|
||||
});
|
||||
|
||||
test('should support level', async ({ page }) => {
|
||||
await page.setContent(`
|
||||
<h1>Hello</h1>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user