feat: add accessibility/ selector for accessible name/role lookup #14964
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Proposed changes
This PR adds a new accessibility/ selector strategy that finds elements by their computed accessible name and optionally role, similar to Playwright's getByRole() and Cypress's cy.findByRole().
await $('accessibility/Submit') // Find by accessible name
await $('accessibility/Submit[role=button]') // Find by name + role
await $$('accessibility/Click Me') // Get all matches
Features:
BiDi-first implementation with in-page script fallback
Shadow DOM traversal support
Configurable strict mode (accessibilityStrict: false | 'warn' | true)
Performance tuning via accessibilityCandidateCap option
Types of changes
Checklist
Backport Request
//: # (The current
mainbranch is the development branch for WebdriverIO v9. If your change should be released to the current major version of WebdriverIO (v8), please raise another PR with the same changes against thev8branch.)v9and doesn't need to be back-ported#XXXXXFurther comments
This implementation uses a BiDi-first approach with browsingContext.locateNodes accessibility locator when available, falling back to an injected in-page script for browsers that don't support it yet.
Configuration options added to Options.ts:
accessibilityStrict - Default false (v10 will flip to true)
accessibilityCandidateCap - Default 1000
accessibilityIncludeHidden - Default false
Reviewers: @webdriverio/project-committers