单击搜索框以使用 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 设置中的问题?或者我可以尝试其他一些方法吗?


慕侠2389804
浏览 146回答 1
1回答

汪汪一只猫

回答我的问题很有趣。页面加载后 Thread.Sleep(500) 等待时间非常短。当我将它更改为 2000 时,它必须按原样工作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript