diff --git a/lib/checks/navigation/region-evaluate.js b/lib/checks/navigation/region-evaluate.js index 0ff830f8b1..48b86e92f1 100644 --- a/lib/checks/navigation/region-evaluate.js +++ b/lib/checks/navigation/region-evaluate.js @@ -1,5 +1,5 @@ import * as dom from '../../commons/dom'; -import * as aria from '../../commons/aria'; +import { getRole } from '../../commons/aria'; import * as standards from '../../commons/standards'; import matches from '../../commons/matches'; import cache from '../../core/base/cache'; @@ -10,7 +10,7 @@ const implicitAriaLiveRoles = ['alert', 'log', 'status']; // Check if the current element is a landmark function isRegion(virtualNode, options) { const node = virtualNode.actualNode; - const role = aria.getRole(virtualNode); + const role = getRole(virtualNode); const ariaLive = (node.getAttribute('aria-live') || '').toLowerCase().trim(); // Ignore content inside of aria-live @@ -41,6 +41,7 @@ function findRegionlessElms(virtualNode, options) { const node = virtualNode.actualNode; // End recursion if the element is a landmark, skiplink, or hidden content if ( + getRole(virtualNode) === 'button' || isRegion(virtualNode, options) || ['iframe', 'frame'].includes(virtualNode.props.nodeName) || (dom.isSkipLink(virtualNode.actualNode) && diff --git a/test/aria-practices/apg.spec.js b/test/aria-practices/apg.spec.js index 66512f469e..bc50ba64b1 100644 --- a/test/aria-practices/apg.spec.js +++ b/test/aria-practices/apg.spec.js @@ -34,7 +34,6 @@ describe('aria-practices', function () { const disabledRules = { '*': [ 'color-contrast', - 'region', // dequelabs/axe-core#3260 'heading-order', // w3c/aria-practices#2119 'list', // w3c/aria-practices#2118 'scrollable-region-focusable', // w3c/aria-practices#2114 diff --git a/test/checks/navigation/region.js b/test/checks/navigation/region.js index fe414a7399..3ad50bae95 100644 --- a/test/checks/navigation/region.js +++ b/test/checks/navigation/region.js @@ -313,6 +313,15 @@ describe('region', function() { assert.isTrue(checkEvaluate.apply(checkContext, checkArgs)); }); + it('should return true when there is a button', function() { + // Some pages have a skiplink menu, that opens through a button + // ARIA practices is an example of this. + var checkArgs = checkSetup( + '

Introduction

' + ); + assert.isTrue(checkEvaluate.apply(checkContext, checkArgs)); + }); + (shadowSupport.v1 ? it : xit)('should test Shadow tree content', function() { var div = document.createElement('div'); var shadow = div.attachShadow({ mode: 'open' });