События не запускаются в селене, нужно разрешение

У меня есть три текстовых поля и кнопка отправки на странице браузера.

Допустим, A, B, C и отправить (все поля являются необязательными)

Если я ввожу значение вручную в поле A. Затем поле B и поле C отключаются, и если я ввожу поле B или C, поле A отключается. Нажмите кнопку «Поиск», ошибка не отображается.

Но делая то же самое с автоматизацией Selenium на языке C #, т. Е. Ввод значения в A, два других поля не отключаются и после нажатия кнопки «Отправить» появляется ошибка, говорящая «Введите значение для B, введите значение для C».


person Pradeep    schedule 22.03.2019    source источник
comment
Добро пожаловать в stackoverflow.com. Попробуйте прочитать эту статью о том, как задать хороший вопрос и как создать минимальный, полный и проверяемый пример.   -  person jtate    schedule 22.03.2019
comment
Вероятно, вам нужно переместить курсор из начального поля, чтобы вызвать действие обновления. Вы пытались щелкнуть в другое поле, например. введите значение в поле A, щелкните в поле B?   -  person JeffC    schedule 23.03.2019
comment
Да, я пробовал все возможные способы, такие как триггер Change, OnChange все   -  person Pradeep    schedule 27.03.2019
comment
На самом деле поля A, B, C представляют собой числовые текстовые поля, и они не поддерживают ключи отправки, поэтому я применил java-скрипт для ввода значений в эти поля. поэтому значения обновляются в пользовательском интерфейсе, но события не запускаются.   -  person Pradeep    schedule 27.03.2019
comment
Что вы имеете в виду под numeric text boxes and they does not support sendkeys? Насколько я понимаю, sendkeys должен работать с текстом типа ввода. Вы выяснили, что такое связанное событие?   -  person supputuri    schedule 30.03.2019


Ответы (2)


Добро пожаловать в СО. Вы можете инициировать событие change после ввода значения в поле eleInputboxA.

IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
js.ExecuteScript("arguments[0].dispatchEvent(new Event('change', {'bubbles': true,'cancelable': true}));",eleInputboxA);

* Измените название события на основе связанного события.

person supputuri    schedule 22.03.2019

То, что сказал суппутури, должно сработать. Хотя я думаю, что следующее будет немного более кратким.

Моя рекомендация будет такой:

     using OpenQA.Selenium.Support.Extensions;   

     driver.ExecuteJavascript("$('#TextBoxId01').val('New Text Value').trigger('change').trigger('mouseup')");

Это объединит текстовую запись и триггерное событие в одном. Поскольку мы запускаем событие через javascript, в любом случае не имеет особого смысла выполнять ввод текста с помощью Selenium. Selenium, в этом случае, уже не может имитировать ввод реального пользователя, поэтому никаких дополнительных потерь при этом.

Обратите внимание, что я добавил триггеры событий «change» и «mouseup». Я не могу сказать, какой из них используется вашим. Удалите все, что не нужно. Хотя, если вы исследуете элемент и увидите, что он должен инициировать несколько событий, свяжите все события, которые вам нужно будет инициировать, как я сделал выше.

Вы можете запросить DOM для событий через:

   getEventListeners($("#SomeElement")[0]); //Javascript
   $._data($("#SomeElement")[0], "events"); //JQuery
person Asyranok    schedule 22.03.2019
comment
Я попробую сначала, но когда я применяю это к полю A, это автоматически повлияет на другие поля B и C или нет. Потому что я хочу имитировать ручное действие с помощью селена - person Pradeep; 23.03.2019