fix(codegen): use name attribute for frame elements (#14609)

This commit is contained in:
Dmitry Gozman 2022-06-02 21:14:01 -07:00 committed by GitHub
parent 79d356f0cc
commit 40bfdb0f4e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 1 deletions

View File

@ -161,7 +161,7 @@ function buildCandidates(injectedScript: InjectedScript, element: Element): Sele
if (element.getAttribute('role')) if (element.getAttribute('role'))
candidates.push({ engine: 'css', selector: `${cssEscape(element.nodeName.toLowerCase())}[role=${quoteAttributeValue(element.getAttribute('role')!)}]` , score: 50 }); candidates.push({ engine: 'css', selector: `${cssEscape(element.nodeName.toLowerCase())}[role=${quoteAttributeValue(element.getAttribute('role')!)}]` , score: 50 });
if (element.getAttribute('name') && ['BUTTON', 'FORM', 'FIELDSET', 'IFRAME', 'INPUT', 'KEYGEN', 'OBJECT', 'OUTPUT', 'SELECT', 'TEXTAREA', 'MAP', 'META', 'PARAM'].includes(element.nodeName)) if (element.getAttribute('name') && ['BUTTON', 'FORM', 'FIELDSET', 'FRAME', 'IFRAME', 'INPUT', 'KEYGEN', 'OBJECT', 'OUTPUT', 'SELECT', 'TEXTAREA', 'MAP', 'META', 'PARAM'].includes(element.nodeName))
candidates.push({ engine: 'css', selector: `${cssEscape(element.nodeName.toLowerCase())}[name=${quoteAttributeValue(element.getAttribute('name')!)}]`, score: 50 }); candidates.push({ engine: 'css', selector: `${cssEscape(element.nodeName.toLowerCase())}[name=${quoteAttributeValue(element.getAttribute('name')!)}]`, score: 50 });
if (['INPUT', 'TEXTAREA'].includes(element.nodeName) && element.getAttribute('type') !== 'hidden') { if (['INPUT', 'TEXTAREA'].includes(element.nodeName) && element.getAttribute('type') !== 'hidden') {
if (element.getAttribute('type')) if (element.getAttribute('type'))

View File

@ -301,6 +301,12 @@ it.describe('selector generator', () => {
await page.setContent(`<form><${tagName} name="foo"></${tagName}><${tagName} name="bar"></${tagName}></form>`); await page.setContent(`<form><${tagName} name="foo"></${tagName}><${tagName} name="bar"></${tagName}></form>`);
expect(await generate(page, '[name=bar]')).toBe(`${tagName}[name="bar"]`); expect(await generate(page, '[name=bar]')).toBe(`${tagName}[name="bar"]`);
} }
await page.setContent(`<iframe name="foo"></iframe><iframe name="bar"></iframe>`);
expect(await generate(page, '[name=bar]')).toBe(`iframe[name="bar"]`);
await page.setContent(`<frameset><frame name="foo"></frame><frame name="bar"></frame></frameset>`);
expect(await generate(page, '[name=bar]')).toBe(`frame[name="bar"]`);
}); });
it('should work with tricky attributes', async ({ page }) => { it('should work with tricky attributes', async ({ page }) => {