#javascript #vb.net #cefsharp
#javascript #vb.net #cefsharp
Вопрос:
Может быть, кто-то знает, почему я не могу получить событие fire MouseClick.
Это моя HTML-разметка:
<app-invoice-details-customer-search _ngcontent-ydd-c36="" class="customer-search-input" _nghost-ydd-c40="">
<div _ngcontent-ydd-c40="">
<div _ngcontent-ydd-c40="" class="form-group search-group">
<input _ngcontent-ydd-c40="" aria-label="Number" class="form-control mat-autocomplete-trigger" name="searchBox" type="search" placeholder="Valitse asiakas" autocomplete="off" role="combobox" aria-autocomplete="list" aria-expanded="false" aria-haspopup="true">
<span _ngcontent-ydd-c40="" class="search-icon"></span>
<span _ngcontent-ydd-c40="" class="clear-search"></span>
<mat-autocomplete _ngcontent-ydd-c40="" class="">
<!---->
</mat-autocomplete>
</div>
</div>
</app-invoice-details-customer-search>
Моя цель — щелкнуть мышью по «customer-search-input». После щелчка поле ввода должно быть активным с наведенным на него курсором, который после того, как я захочу отправить события, чтобы написать «1159». К сожалению, это не сработает, если я просто отправлю значение этого поля, потому что веб-страница после каждого номера записи выполняет поиск в собственной базе данных для отфильтрованных клиентов. Итак, я попробовал три основных способа добиться этого. Один из них с JavaScript:
var coordinates = document.getElementsByClassName("customer-search-input")[0].getBoundingClientRect();
var ev = new MouseEvent('click', {
'view': window,
'bubbles': true,
'cancelable': true,
'screenX': coordinates.x,
'screenY': coordinates.y
});
var el = document.elementFromPoint(coordinates.x, coordinates.y);
el.dispatchEvent(ev);
Этот код почти работает на панели консоли, и я уверен, что он сделал клики в нужном месте из-за ранее добавленного прослушивателя событий. Но ничего не происходит.
Второй шаг с помощью focus() также не помогает.
document.getElementsByClassName("customer-search-input")[0].focus();
Также попробовал третий шаг с браузером Cefsharp, чтобы щелкнуть там с точными координатами и снова не сработает.
browser.GetBrowser().GetHost().SendMouseMoveEvent(750, 306, False, CefEventFlags.None)
Thread.Sleep(100)
browser.GetBrowser().GetHost().SendMouseClickEvent(750, 306, MouseButtonType.Left, False, 1, CefEventFlags.None)
Thread.Sleep(100)
browser.GetBrowser().GetHost().SendMouseClickEvent(750, 306, MouseButtonType.Left, True, 1, CefEventFlags.None)
Что я заметил. Когда код выполняется, и если я сам нажимаю на поле браузера, эта страница загружается с полем поиска, активным по умолчанию. Я пытался также сделать щелчок программно перед загрузкой страницы, и это не помогает.
В чем проблема? Похоже, что клики сделаны, но поле все еще не активно. Может ли это быть проблемой в настройках ChromiumBrowser? Или я могу попробовать другие способы?
Ответ №1:
Ответ на мой вопрос очень забавный. После загрузки страницы Поток.Время ожидания Sleep (500) было очень коротким. Когда я изменил его на 2000, все работает так, как должно быть.