У нас есть относительно простой компонент React с элементом input
:
export class MyInput extends Component {
componentDidMount() {
function log(e) {
console.log(`Event: ${e.type}, isTrusted: ${e.isTrusted}, input value: ${e.target.value}`, e);
}
this.rawInput.addEventListener("change", log);
this.rawInput.addEventListener("input", log);
}
onChanged(e) {
console.log("raw-input.onChanged: e.target.value", e.target.value);
this.props.onChanged(e.target.value);
}
render() {
return (
<div className="my-class">
<input
value={this.props.value}
onChange={this.onChanged.bind(this)}
ref={(input) => { this.rawInput = input; }}
/>
</div>
);
}
}
По сути, это просто слегка завернутый элемент input
, в то время как добавляемая сверху запись предназначена для отладки.
Он отлично справляется с печатанием при обычном использовании, а также SendKeys
в Selenium WebDriver в Chrome, Firefox и IE 11 (при условии, что EnableNativeEvents
WebDriver true
).
Однако при запуске в Internet Explorer 11 WebDriver и с EnableNativeEvents = false
событие onChanged
не запускается при выполнении SendKeys
. Самое странное, что событие HTML input
запускается. Ниже вывод консоли:
Обратите внимание, что value
ввода изменяется во время ввода "теста", но onChange
.
нет
Ниже приведено расширенное событие input
в случае WebDriver:
Если пользователь затем вводит с клавиатуры на том же входе, событие onChange
:
Ниже приведено расширенное событие input
при вводе пользователем:
Тщательный анализ показывает, что единственное различие в событиях input
заключается в том, что в WebDriver isTrusted: false
, а в режиме реального ввода isTrusted: true
.
Вопрос в том, почему в первом случае onChange
события не запускаются React?
Я предполагаю, что это потому, что React пропускает события с isTrusted: false
, потому что это означает, что они имитируются, а не реальные пользовательские события. Однако я не смог найти никаких доказательств этого. Если это так, не могли бы вы предоставить ссылку на публикацию или строку в источниках React, которые ее обрабатывают?
- Реакция: 16.7.0
- Selenium.WebDriver.IEDriver: 3.14.0