注意:我们将“点击”称为最终用户点击。“ js click”是通过JS点击的
为什么在常规WebDriver单击不起作用时单击“通过JavaScript”有效?
有两种情况会发生这种情况:
I. 如果您正在使用PhamtomJS
这是的最常见的已知行为PhantomJS
。例如,某些元素有时不可单击<div>
。这是因为PhantomJS
最初是用来模拟浏览器引擎的(例如初始HTML + CSS->计算CSS->呈现)。但这并不意味着要以最终用户的方式进行交互(查看,单击,拖动)。因此PhamtomJS
,最终用户交互仅部分支持。
JS为什么点击工作?至于任一点击,它们都是平均点击。它就像带有1个枪管和2个扳机的枪。视口中的一个,JS中的一个。由于可以PhamtomJS
很好地模拟浏览器的引擎,因此JS单击应该可以很好地工作。
二。“ click”的事件处理程序必须在糟糕的时间内绑定。
例如,我们得到了一个 <div>
我们可能最终得到相同的结果。单击将不起作用,因为WebdriverJS在没有单击事件处理程序的情况下会尝试单击该元素。
JS为什么点击工作?JS单击就像将JS直接注入浏览器。可能有2种方式,
拳头是通过devtools控制台(是的,WebdriverJS确实与devtools的控制台进行通信)。
其次是将<script>
标记直接注入HTML。
对于每个浏览器,其行为将有所不同。但是无论如何,这些方法比单击按钮更复杂。Click正在使用已经存在的内容(最终用户单击),js click正在通过后门。
对于js,单击将显示为异步任务。这与一个复杂的主题“ 浏览器异步任务和CPU任务调度 ”相关(一会儿再读也找不到文章)。简而言之,这主要是因为js click需要等待CPU的任务调度周期,并且在click事件绑定后运行速度会变慢。
(当您发现元素有时可单击,有时却不可单击时,您可能会知道这种情况。)
这到底是什么时候发生的,这种解决方法(如果有)的缺点是什么?
=>如上所述,两者都意味着一个目的,但是关于使用哪个入口:
- 点击:使用默认情况下提供的浏览器。
- JS click:正在通过后门。
=>对于性能,很难说,因为它依赖于浏览器。但通常:
- 单击:并不意味着更快,而只是在CPU执行任务的计划列表中签名更高的位置。
- JS单击:并不意味着速度较慢,而仅是它登录到CPU任务计划列表的最后位置。
=>缺点:
- 点击:除了您使用PhamtomJS之外,似乎没有其他缺点。
- JS单击:对健康非常不利。您可能不小心单击了视图中没有的内容。使用此功能时,请确保该元素在那里并且可供查看,然后单击以作为最终用户的观点。
PS,如果您正在寻找解决方案。
- 使用PhantomJS?我建议改用无头的Chrome。是的,您可以在Ubuntu上无头设置Chrome。事物的运行方式与Chrome一样,但它没有视图,并且像PhantomJS一样没有虫子。
- 不使用PhamtomJS但仍然有问题吗?我建议使用带有
browser.wait()
(分度器的ExpectedCondition)(检查此以获得更多信息)
(我想简短一点,但结局很糟。与理论有关的任何事情都难以解释...)