diff --git a/tests/page/locator-role.spec.ts b/tests/page/locator-role.spec.ts new file mode 100644 index 0000000000000..36dbb4db69c00 --- /dev/null +++ b/tests/page/locator-role.spec.ts @@ -0,0 +1,150 @@ +/** + * Copyright 2018 Google Inc. All rights reserved. + * Modifications copyright (c) Microsoft Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { test as it, expect } from './pageTest'; + +// https://www.w3.org/TR/wai-aria-1.2/#role_definitions +const workingRoles = [ + 'alert', + 'alertdialog', + 'application', + 'article', + 'banner', + 'blockquote', + 'button', + 'caption', + 'cell', + 'checkbox', + 'code', + 'columnheader', + 'combobox', + // 'command', + 'complementary', + // 'composite', + 'contentinfo', + 'definition', + 'deletion', + 'dialog', + 'directory', + // 'document', + 'emphasis', + 'feed', + 'figure', + 'form', + 'generic', + 'grid', + 'gridcell', + 'group', + 'heading', + 'img', + // 'input', + 'insertion', + // 'landmark', + 'link', + 'list', + 'listbox', + 'listitem', + 'log', + 'main', + 'marquee', + 'math', + 'meter', + 'menu', + 'menubar', + 'menuitem', + 'menuitemcheckbox', + 'menuitemradio', + 'navigation', + // 'none', + 'note', + 'option', + 'paragraph', + // 'presentation', + 'progressbar', + 'radio', + 'radiogroup', + // 'range', + 'region', + // 'roletype', + 'row', + 'rowgroup', + 'rowheader', + 'scrollbar', + 'search', + 'searchbox', + // 'section', + // 'sectionhead', + // 'select', + 'separator', + 'slider', + 'spinbutton', + 'status', + 'strong', + // 'structure', + 'subscript', + 'superscript', + 'switch', + 'tab', + 'table', + 'tablist', + 'tabpanel', + 'term', + 'textbox', + 'time', + 'timer', + 'toolbar', + 'tooltip', + 'tree', + 'treegrid', + 'treeitem', + // 'widget', + // 'window', +]; + +const failingRoles = [ + 'command', + 'composite', + 'document', + 'input', + 'landmark', + 'none', + 'presentation', + 'range', + 'roletype', + 'section', + 'sectionhead', + 'select', + 'structure', + 'widget', + 'window', +]; + +it.describe.only('getByRole', () => { + workingRoles.forEach(role => { + it(`${role}`, async ({ page }) => { + await page.setContent(`
Foo
`); + await expect(page.getByRole(`${role}`)).toHaveText('Foo'); + }); + }); + + failingRoles.forEach(role => { + it.fail(`${role}`, async ({ page }) => { + await page.setContent(`
Foo
`); + await expect(page.getByRole(`${role}`)).toHaveText('Foo'); + }); + }); +});