Почему событие React onChange не запускается на SendKeys Selenium WebDriver в IE 11? - PullRequest
9 голосов
/ 12 апреля 2019

У нас есть относительно простой компонент 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 запускается. Ниже вывод консоли: Missing onChange under WebDriver

Обратите внимание, что value ввода изменяется во время ввода "теста", но onChange.

нет

Ниже приведено расширенное событие input в случае WebDriver: Detailed input event from WebDriver

Если пользователь затем вводит с клавиатуры на том же входе, событие onChange: onChange is successfully fired on real typing

Ниже приведено расширенное событие input при вводе пользователем: Detailed input event when user is typing

Тщательный анализ показывает, что единственное различие в событиях input заключается в том, что в WebDriver isTrusted: false, а в режиме реального ввода isTrusted: true.

Вопрос в том, почему в первом случае onChange события не запускаются React?

Я предполагаю, что это потому, что React пропускает события с isTrusted: false, потому что это означает, что они имитируются, а не реальные пользовательские события. Однако я не смог найти никаких доказательств этого. Если это так, не могли бы вы предоставить ссылку на публикацию или строку в источниках React, которые ее обрабатывают?

  • Реакция: 16.7.0
  • Selenium.WebDriver.IEDriver: 3.14.0

1 Ответ

6 голосов
/ 12 апреля 2019

При установке возможности nativeEvents на false (это то, что вы устанавливаете с помощью свойства EnableNativeEvents), вы говорите драйверу IE использовать JavaScript для имитации событий. События, смоделированные с помощью JavaScript не может иметь для свойства isTrusted значение true . Это свойство предназначено для точного определения сценария, в котором вы находитесь. Реализации драйверов для Firefox и Chrome производятся и поддерживаются поставщиками для этих браузеров (Mozilla и Google, соответственно), и, как таковые, эти драйверы имеют доступ к внутренним компонентам браузера способами, которые нет у драйвера IE (и, вероятно, никогда буду иметь. Если React действительно отключает это свойство для запуска события onChanged, то здесь нужно установить EnableNativeEvents = true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...