单击搜索框以使用 CefSharp 激活它

Click on the Search box to get it active with CefSharp

可能有人知道为什么我无法触发 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>

我的目标是将鼠标单击“客户搜索输入”。单击后,输入字段必须处于活动状态且光标位于其上,之后我想发送 KeyEvents 以写入“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 设置中的问题?或者我可以试试其他方法吗?

我的问题的答案很有趣。页面加载后 Thread.Sleep(500) 等待时间非常短。当我将它更改为 2000 时,它必须按原样工作。