fix: isDisabled check with option/optgroup (#12437)

This commit is contained in:
Max Schmitt 2022-03-01 18:10:16 +01:00 committed by GitHub
parent d14ecec612
commit d2ae6a9db2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 1 deletions

View file

@ -1237,7 +1237,7 @@ function deepEquals(a: any, b: any): boolean {
}
function isElementDisabled(element: Element): boolean {
const isRealFormControl = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA'].includes(element.nodeName);
const isRealFormControl = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA', 'OPTION', 'OPTGROUP'].includes(element.nodeName);
if (isRealFormControl && element.hasAttribute('disabled'))
return true;
if (isRealFormControl && hasDisabledFieldSet(element))

View file

@ -260,6 +260,29 @@ it('isEnabled and isDisabled should work', async ({ page }) => {
expect(await page.isDisabled(':text("button2")')).toBe(false);
});
it('isEnabled and isDisabled should work with <select/> option/optgroup correctly', async ({ page }) => {
await page.setContent(`
<select name="select">
<option id="enabled1" value="1">Enabled</option>
<option id="disabled1" value="2" disabled>Disabled</option>
<optgroup label="Foo1">
<option value="mercedes">Mercedes</option>
</optgroup>
<optgroup label="Foo2" disabled>
<option value="mercedes">Mercedes</option>
</optgroup>
</select>
`);
expect((await (await page.$('#enabled1')).isEnabled())).toBe(true);
expect((await (await page.$('#enabled1')).isDisabled())).toBe(false);
expect((await (await page.$('#disabled1')).isEnabled())).toBe(false);
expect((await (await page.$('#disabled1')).isDisabled())).toBe(true);
expect((await (await page.$('optgroup >> nth=0')).isEnabled())).toBe(true);
expect((await (await page.$('optgroup >> nth=0')).isDisabled())).toBe(false);
expect((await (await page.$('optgroup >> nth=1')).isEnabled())).toBe(false);
expect((await (await page.$('optgroup >> nth=1')).isDisabled())).toBe(true);
});
it('isEditable should work', async ({ page }) => {
await page.setContent(`<input id=input1 disabled><textarea></textarea><input id=input2>`);
await page.$eval('textarea', t => t.readOnly = true);