单击"搜索"框,使用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>

我的目标是将鼠标点击";客户搜索输入";。点击后,输入字段必须是活动的,光标在上面,这之后我想发送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设置中的问题吗?或者我可以试试其他方法吗?

回答我的问题非常有趣。页面加载后线程.睡眠(500(是非常短的等待时间。当我把它改为2000年时,它必须是。

最新更新