Open
Description
Reproduction example
https://stackblitz.com/edit/js-4pfvam?file=index.js
Prerequisites
To repro, create an <input>
in a shadow root, and then try to clear()
it:
import userEvent from '@testing-library/user-event';
const appDiv = document.getElementById('app');
appDiv.attachShadow({ mode: 'open' }).innerHTML = '<input type=text>';
const input = appDiv.shadowRoot.querySelector('input');
userEvent.clear(input); // throws the Error
Expected behavior
An <input>
should be clear()
able regardless of whether it's in a shadow root or not. It's still focusable, even if it's in a shadow root.
Actual behavior
The error is thrown: The element to be cleared could not be focused
The root cause seems to be this line of code:
The issue is that document.activeElement
is not sufficient for determining the active element in this case. You would need to drill down one level deeper into the shadow root:
document.activeElement // shadow host element
document.activeElement.shadowRoot.activeElement // <input>
User-event version
14.4.3
Environment
See repro above.
Additional context
This used to work in a previous version of @testing-libray/user-event
. It seems to have started throwing in this commit: 1cda1b1