WebDriver.SendKeys и событие onchange

Всем привет!
Наткнулся на такую странную особенность.
При вызове метода SendKeys() не вызывается событие на странице onchange=“aspxETextChanged(…)”
Это при включенных Native Events. Если выключить - все работает. Хотя мне казалось, что скорее будет наоборот.
В общем, SendKeys не эмулирует нажатие клавиш, а как-будто вставляет строку из буфера.
Есть какой-то способ вызвать onchange врукопашную? Потому как хотелось бы запускать тесты на разных браузерах. Раньше, я так понял, был метод FireEvent. Но в текущей версии (2.44) ничего подобного я не обнаружил.
п.с. Погуглить мне тоже не помогло :smile:

UPD:
Native Events ни при чем!
В общем, удалось локализовать проблему и выработать рецепт костылей.
Не знаю, что это баг или… ну вы поняли.
В общем, отправленные вебдрайвером в инпут DevExpress компонента символы не вызывают событие(я) до тех пор, пока эти символы кириллица :expressionless:
То есть, к примеру, если вводим фразу “Московский филиал”, то событие change случается только после пробела!
Так что я склонен полагать, что это особенность реализации отправки “нетипичных” клавиатурных символов методом SendKeys().

Костыль в моем случае - пробел после каждой строки, которую ввожу в инпут.
А вызов события скриптом почему-то очищал value.
п.с. пардон за мой французский.

еще UPD
сделал небольшой пример, где каждый может убедиться, что я не вру.

А какой браузер / версия?

chrome 39 и ff 32

попробовал пойти по пути
IJavaScriptExecutor js = WebBrowser.Driver as IJavaScriptExecutor;
js.ExecuteScript(" ??? ");

осталось, видимо, написать javascript

Для хрома ведь нет нативных событий?

Скорее наоборот.

Как же вы выключали native events у хрома? И какую версию хром драйвера используете? Я видел всего лишь раз такое поведение (вставка, как из буфера), и то, это был какой-то древний IE. На Chrome и FF такого никогда не встречал.

Вроде же наоборот?

такое предположение я сделал исходя из таблицы выше и из того, что параметр
FirefoxProfile.EnableNativeEvents по умолчанию true. И при параметрах по умолчанию что в хроме, что фф картина не меняется.
Для фф стоит установить false - все работает так, как и было задумано.

chromeDriver 2.10

Мы смотрим на разные таблицы?

Browser 	Operating system	Native events   	Synthetic events
Firefox 	    Linux	        supported	        supported (default)
Firefox 	   Windows	        supported (default)	supported
IE      	   Windows	        supported (default)	not supported
Chrome  	Linux/Windows   	supported*	        not supported
Opera   	Linux/Windows	        supported (default)	not supported
HtmlUnit        Linux/Windows   	supported (default)	not supported

Все так. Работает, естественно, только в ФФ, потому что только там и можно выключить native.

К чему тогда было:

в ответ на мое сообщение? :slight_smile: Или вопрос относился к @alshipovalov?

2е!
Не совсем разобрался с местным интерфейсом, но рад, что все же понимание нашлось :smile:

Вопрос “что делать” остается открытым.

А сайт есть в паблик доступе?

Увы…
Все что могу сказать: написан на .net, комбобокс DevExpress. В него и посылаю символы. Должны вываливаться лист-бокс и проверяться введенные данные, но ничего не происходит.

Добавил небольшой апдейт, если интересно.

Интересно! 2 момента:

  • Пробовали ли вы вводить кириллицей в обычный инпут? Все же я склонен полагать, что проблема в DevExpress, а не в sendKeys. Посему, чтобы отбросить догадки, интересно увидеть сравнительный пример.
  • Если не сложно, залейте пример в наш местный GitHub, чтобы у других всегда был под рукой code snippet для решения данной проблемы.

Да, проблема в работе SendKeys конкретно с реализацией “как у DevExpress”
< input … onchange=“blalblabla(‘Arg’)” …>< /input >

Испытывал тоже самое на широко любимом инпуте поиска Гугла, яндекса и т.п. Там все тип-топ.

Похожую проблему решил посылая через JS событие input

driver.execute_script(“arguments[0].dispatchEvent(new Event(‘input’))”, ELEMENT)

спросите у фронт разрабов какое событие нужно послать

Вы хоть даты смотрите, прежде чем некропостить.