Selenium WebElement.click()与Javascript单击事件

Selenium WebElement.click()与Javascript单击事件,java,javascript,selenium,selenium-webdriver,Java,Javascript,Selenium,Selenium Webdriver,我想知道调用的click()方法与通过id查找元素并使用JavaScript触发click事件之间有什么区别 在第一个方法中,我调用了一个实例的。click(): 第二种技术是: ((JavascriptExecutor)driver).executeScript("document.getElementById('myElementID').click()"); 我有兴趣了解这两种单击web元素的技术之间的所有差异,以及它们各自的优缺点。这些测试是E2E(端到端)而不是BDD 第一个–现在执

我想知道调用的
click()
方法与通过id查找元素并使用JavaScript触发
click
事件之间有什么区别

在第一个方法中,我调用了一个实例的
。click()

第二种技术是:

((JavascriptExecutor)driver).executeScript("document.getElementById('myElementID').click()");

我有兴趣了解这两种单击web元素的技术之间的所有差异,以及它们各自的优缺点。

这些测试是E2E(端到端)而不是BDD

第一个–现在执行,要执行下一个操作,您必须编写一些函数来延迟执行,例如从服务器下载新数据


第二个代码返回
promise
––计划一个命令来单击此元素。-您可以使用然后回调来运行下一个操作。

Webdriver利用浏览器的本机支持,使用id/xpath等将DOM元素映射到WebElement对象

JavascriptExecutor.executeScript
在当前所选浏览器窗口的上下文中执行一个外部脚本。(类似于增强型浏览工具,如油脂猴,如果您曾经使用过的话), 如果脚本返回任何DOM元素并将其转换为WebElement对象,则返回

也可以说,WebDriver在浏览器上模拟的点击与实际用户使用javascript调用的点击相似

事实上,使用WebDriver并不是所有的事件都可以在所有的web浏览器上完美地自动化,事实上,在同一个web浏览器的不同版本上也是如此。(即不同版本的IE、FF等表现不同)。仍然WebDriver是这方面近乎最佳的工具

有一次(大约4年前)在IE的某个版本上,我们观察到我们不能发送右键单击,或者可能在生成的菜单链接上悬停鼠标,所以我们使用js来模拟这一点,它以非常独立于浏览器的方式执行。因此,您现在可以得出结论,执行外部javascript有什么好处

此外,还有一些自动化的web测试框架,它们使用javascript进行一切测试,而不是浏览器的本机支持。e、 g:

参考:


谢谢,让我们回到我的示例,假设我们有一个按钮是不启用的(例如,带有角度)。我认为如果我使用第一种技术(WebElement.click()),什么都不会发生,而如果我使用第二种技术,它将绕过按钮被禁用的事实,并触发单击操作,对吗?我怀疑如果按钮已经被禁用,你是否可以单击它。记住,如果你有firefox,那么在同一个域名中它仍然是同一个按钮(禁用按钮),然后进入
tools->webdevelopers->Scratchpad
。这将打开一个小的草稿行窗口。将脚本复制到它
document.getElementById('myElementID')。单击()。然后单击
Run
按钮,然后自己检查发生了什么情况。:)事实上,我可以在chrome和firefox的开发者工具->控制台上实现这一点,是的,你是对的!
((JavascriptExecutor)driver).executeScript("document.getElementById('myElementID').click()");