Selenium WebElement.click() 与 Javascript click event 的区别

10

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

只是为了明确,在第一种方法中,我调用WebElement实例的.click()

myWebElement.click();

第二个技巧是:

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

我想了解在点击网页元素方面这两种技术的所有差异,以及它们各自的优缺点。

2个回答

11

Webdriver利用浏览器的原生支持来将DOM元素映射为WebElement对象,使用id/xpath等。

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

也可以说,WebDriver在浏览器上模拟点击与实际用户相比较,使用JavaScript调用的方式不同。

事实上,使用WebDriver无法完美地自动化所有事件,包括所有Web浏览器,甚至是同一Web浏览器的不同版本。 (即不同版本的IE、FF等行为不同)。然而,WebDriver是目前最好的工具之一

曾经(大约4年前),我们在某个版本的IE上观察到我们不能发送右键单击或悬停鼠标在生成的菜单链接上,所以我们使用js模拟了这个行为,这种方法非常独立于浏览器。所以您现在可以得出结论:执行外部javascript有可能很有用。

此外,还有一些自动化Web测试框架,它们使用JavaScript代替浏览器的原生支持。例如:http://en.wikipedia.org/wiki/Sahi_%28software%29

参考资料:


谢谢,让我们回到我的例子,假设我们有一个未启用的按钮(例如使用Angular)。我认为如果我使用第一种技术(WebElement.click()),什么也不会发生,而如果我使用第二种技术,它将绕过按钮被禁用的事实,并触发点击操作,这是正确的吗? - cloudy_weather
我怀疑如果按钮已经被禁用,你是否能够点击它。记住,在同一个DOM中它仍然是相同的按钮。 - Shailesh Aswal
1
如果你有火狐浏览器,那么在禁用按钮的情况下在其中加载你的页面,然后转到“工具->Web开发者->Scratchpad”选项。这将会打开一个小的Scratchpad窗口。在其中复制你的脚本 document.getElementById('myElementID').click(),然后点击“运行”按钮,检查一下发生了什么。 :) - Shailesh Aswal
实际上我可以在Chrome和Firefox的开发者工具->控制台中完成这个操作,是的,你说得对! - cloudy_weather

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接