如何模拟javascript中输入元素的真实点击

时间:2018-10-18 01:28:33

标签: javascript cefsharp

在.NET项目中使用CefSharp浏览器来执行网站自动化项目,但这是我怀疑的一般javascript问题。

要使网站自动化,我需要找到一个输入元素并模拟用户单击,然后填写一个字段,然后单击并填写另一个。点击-焦点-模糊-序列很重要,因为该特定站点侦听模糊事件以执行某些AJAX操作。

我的问题是,当我无法启动输入字段的模糊事件时, 以编程方式“单击”下一个字段。

基本上,我循环遍历输入字段,并对每个字段执行此操作:

.hero {
  background-image: linear-gradient(to bottom, rgba(0,0,0,0.5) 0%,rgba(0,0,0,0.5) 100%),
      url('https://cdn10.bostonmagazine.com/wp-content/uploads/sites/2/2016/03/nkotb.jpg');
  background-size: cover;
  color: white;
  position: relative;
  height: 500px;
}

我的目标是在第二遍通过时,第一个字段的模糊事件将触发,但不会触发。

但是我可以做到这一点:

<div class="hero">Some content</div>

问题是我碰巧对这个站点有特殊的了解,并且知道需要进行模糊处理,但是我想要一个通用的解决方案来触发所有正常事件-聚焦,模糊处理,更改等等,我认为.click();会这样做,但显然不会。

编辑:

这看起来很有希望,但也不会触发事件。

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

我看着puppeteer,似乎.NET包装器要求框架4.0,我的要求是4.0,硒似乎没有头,我需要一个可见的浏览器。指出了更多的研究,但我对CefSharp及其功能总体上感到满意。

我知道我可以“强制”事件,所以聚焦,更改,模糊可能会覆盖所有内容,我想鼠标上/下/单击,键上,按下,下也是可能的。

2 个答案:

答案 0 :(得分:2)

这里是一个用于调试和自动测试的库。 https://debugjs.net/

该库具有原始脚本解释器,您可以执行自动测试方案。

这是一个示例脚本。 您可以在上面的演示站点上尝试此操作。 右下方的控制台窗口是库的窗口。 单击工具-> BAT,然后输入以下脚本,然后单击[运行]。

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

此“点击”命令模拟真实的点击行为。 因此,此命令不仅会触发click事件,还会触发mousedown,mouseup,focus,blur等。

答案 1 :(得分:0)

我非常喜欢#Takashi的代码;当将debug.js添加到站点时,响应于“指向单击”命令而触发的mousedown和mouseup事件起作用,但是当移植到我的CefSharp项目时仍然无法起作用。

事实证明,最愚蠢的正确答案是CefSharp浏览器需要先获得焦点,然后任何元素才能获得焦点。而已。通过集中浏览器,el.focus();实际上将焦点设置到HTML元素,并且模糊事件作为响应引发。完全不需要调用单击或鼠标事件。