Как смоделировать истинный щелчок по элементу ввода в JavaScript - PullRequest
0 голосов
/ 18 октября 2018

Использование браузера CefSharp в .NET-проекте для автоматизации проекта веб-сайта, но я подозреваю, что это общий вопрос JavaScript.

Чтобы автоматизировать веб-сайт, мне нужно найти элемент ввода и смоделировать пользователянажмите и затем заполните поле, затем нажмите и заполните другое.Последовательность щелчка - фокуса - размытия важна, потому что этот конкретный сайт прослушивает событие размытия для выполнения какого-либо действия AJAX.

Моя проблема в том, что я не могу запустить событие размытия поля ввода, когда я программно 'щелкните по следующему полю.

По сути, я делаю цикл через поля ввода и делаю это для каждого:

el.click(); //click it   
el.focus(); //just trying to force focus
el.value = 'sometext'; //change it
...and loop to next field

Моя цель состоит в том, чтобы на втором проходе событие размытия первого полябудет срабатывать, но это не так.

Но я могу добиться этого с помощью:

var ev=document.createEvent('HTMLEvents');
ev.initEvent('blur', false, true);
el.dispatchEvent(ev);

Проблема в том, что у меня есть специальные знания об этом сайте и я знаю размытиедолжно произойти, но я хочу общее решение, которое будет запускать все обычные события - фокус, размытие, изменение, что угодно, я думал el.click ();будет делать это, но, очевидно, нет.

РЕДАКТИРОВАТЬ:

Это выглядело многообещающе, но это также не запускает события.

browser.GetBrowser().GetHost().SendMouseClickEvent(x, y,   MouseButtonType.Left, false, 1, CefEventFlags.None);
System.Threading.Thread.Sleep(100);
browser.GetBrowser().GetHost().SendMouseClickEvent(x, y, MouseButtonType.Left, true, 1, CefEventFlags.None);

Я посмотрел на кукловода, кажется, что .NET-оболочке требуется> framework 4.0, мое требование 4.0, а селен, кажется, без головы, мне нужен видимый браузер.Дополнительные исследования указаны, но я в целом доволен CefSharp и тем, что он может сделать.

Я знаю, что могу «форсировать» события, так что фокус, изменение, размытие, скорее всего, охватят все, думаю, возможны также мышь / вверх / вниз / щелчок, нажатие клавиши, вниз, вниз.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Мне очень понравился код Такаши;События mousedown и mouseup, запускаемые в ответ на команду 'point click', работали, когда на сайт был добавлен файл debug.js, но он все еще не работал при портировании в мой проект CefSharp.

Как оказалось,глупо правильный ответ - браузер CefSharp должен иметь фокус, прежде чем любой элемент сможет получить фокус.Вот и все.Когда браузер сфокусирован, el.focus ();фактически устанавливает фокус на элемент HTML, и в ответ вызывается событие размытия.Нет необходимости вызывать события щелчка или мыши.

0 голосов
/ 18 октября 2018

Вот библиотека для отладки и автоматического тестирования.https://debugjs.net/

В этой библиотеке есть оригинальный интерпретатор сценариев, и вы можете выполнить сценарий автоматического тестирования.

Вот пример сценария.Вы можете попробовать это на демонстрационном сайте выше.Окно консоли в правом нижнем углу является окном библиотеки.Нажмите TOOL -> BAT и введите следующий скрипт и нажмите [RUN].

point move #text1
wait 300
point click
wait 250
point text "abcdefg"
wait 500
point move #text2
wait 300
point click
wait 250
point text "1234567890"
wait 500
point init

Эта команда «щелчка по точке» имитирует реальное поведение при щелчке.Поэтому эта команда будет запускать не только событие щелчка, но также mousedown, mouseup, focus, blur и т. Д.

...